Java笔记系列(基于马士兵的课堂)(2)-异常

11 篇文章 0 订阅

Java的异常

最主要是java运行期的错误。程序时调出来的。

数组:在内存空间中分配n个空间,装有每个值。(int[] arr = (1,2,3)每个空间有他的编号<0格=1,1格=2,2格=3>;输出arr[0]<结果输出值为1>)

Java和c,c++不同,java会检查数组(下标)的越界,c和c++需要自己检查(否则产生缓冲区漏洞)<exception:越界,逻辑错误>

设计良好的程序应该在异常发生时提供处理这些错误的方法(将java的报错转换成正常语言语言,以便可以有处理错误的方法,让普通人能理解<说一些有好的东西>)。

Java程序运行过程中如果发生一些异常事件,java会自动生成一个异常类对象。异常类对象封装了异常事件的信息,并将其提交给java运行时系统,这个过程叫做抛出(throw)异常(某一句抛出异常)。

Java运行时默认信息,是直接打印异常类对象的信息。

当java运行时系统接收到异常对象时,会寻能处理这一异常代码的并把当前异常对象交给其处理,这一过程叫做捕获(catch)异常。

Try catch关键字


Try{System.out.println(2/0);}<请尝试执行>catch()<可能抛出什么样的异常>;{System.out.println(“系统正在维护中,请与管理员联系”);

ae.printStackTrace()<打印对战信息【这个错误怎么引起的,哪一行引起的给程序员一个调试的提示,往往把他打印出来】>}(当出现异常,异常封装到里面,相当于传递了一个对象给了catch这个方法<其实不是方法>)[当出现异常,对象自动被初始化](注意ae是自定义异常的对象,其初始化由系统完成<产生错误时完成>)

java运行时当出现错误时先开有没有catch处理它,没有就直接抛出打印他。

想用catch必须用try。

一个类定义一种方法时往往会注明其可能会抛出什么样的异常。可以指明其可能抛出什么样的异常,使用throw关键字。

Jdk中定义了许多异常类,对应了各种各样的可能出现的异常事件,这些异常事件有个根类——Throwable类(不是一个类,也不是一个接口,也不是一个exception)其下两个子类(error,exception 前者是系统出错<处理不了>,后者是可以解决的,其中还有一类Runtime Exception旗下还有许多类,除了runtime其他类必须逮)。

Runtime Exception是经常出的错误,可以不逮它(直接略过,这样运行效率更高)<只不过运行出错>,若某个方法 throw了某个exception,必须逮它.

 


ArithmeticException有个构造方法(api文档中),可以输出输入结果。

在定义方法时void
 m(int i)throws ArithmeticException{if (i==0)throw new ArithmeticException(“被除数为0”)}

异常必须得逮的异常:FileInputStream Io包里的一个类,用来读文件


FileInputStream in=null;

Try{in =new FileInputStream(“mylife.txt”)

Int b;

B=in.read();

While (b!=1) {

System.out.println((char)b);}

Catch (FileInputStreamException a){

a.     printStackTrace()

}catch (IOException a){

System.out.println(a.getMessage ());

}finally {

Try {in.close();

}catch (IOException e){

E.printSTackTrace();

}

}

}

通过一个try去catch多个exception去完成不同的错误报告,方便程序员修复程序Exception。

Finally关键字<无论是否产生某种Exception>

Try里有多个语句,若第一个语句出错,第二个语句及接下来语句不再执行,但下一个try会继续执行,跟在try后面的finally一定会被执行,无论如何都需要执行。(用来关上一定需要关闭的文件,否则出现异常无法关闭)即使没有出现任何错误,catch语句全被略过,finally一样会被执行<进行资源的清除工作>

Try{}catch(){}catch(){}catch(){}…finally{}-执行下面语句

异常的捕获和处理

在catch中封装了,异常事件发生的信息,在catch语句块中可以用这个对象的一些方法来来获取这些信息,例如getMessage()方法,用来得到有关异常事件的信息,printStackTrace方法,用来跟踪异常事件发生执行时的堆,栈内容。

Finally,用来清除临时文件,可以更好地运行接下来的语句,使系统维护的比较好。

见具体Exception2

如果java里catch到exception但不能解决,向上抛出Exception即可,用到throws

当解决不了某种异常(catch住了以后解决不了,只要向上级抛出就行了)

将可能出异常的语句,封装在某个方法中,并注明抛出(抛出的类型)

Void f()throws <抛出错误类型1>,<抛出错误类型2>…{语句}

此时用f2()再封装f()方法,再次抛出或者用try catch对f()抛出的异常做出处理,当然也可以再次抛出 在main方法中也再次抛出写throws Exception(就是这个语句)(交给运行时系统打印Exception)

若已给方法再main方法抛出,还是会执行try catch语句。

程序员处理时第一行往往是你或系统提供给运行出错时显示的信息,之后是某个方法出错(也可以是main方法出错,方法出错后面紧跟的是出错行号<把堆栈信息打印出来>,根据行号,可以改正这些Exception)

注意:如果在之前已经把所有的大的Exception捕捉,再去捕捉属于这个Exception的小类,编译时一定会出错,应该先捕捉小的再捕捉大的。

自定义异常:只需要从某种Exception(也可以是Exception)中继承(注意RuntimeException可以逮也可以不逮,所以从此继承要注意),在方法适当的位置生成自定义异常实例,并用throw语句抛出,在方法的声明部分用throws语句声明该方法可能抛出的异常。

具体方法:定义一个异常,从某一个异常类(Exception or RunTimeException)继承,重写构造方法,写相关方法(编号,抛出怎样的话)

在运行类中定义一个方法可能抛出自定义类型异常,写方法语句(若某一步发生异常,不会继续这个方法,直接抛错)

主方法中运行这个方法,在之前加上try,在之后加上catch 其中逮到的异常类型是自定义异常类型[当然也可以将try catch封装在一个方法中,这个方法肯定不在主方法中,再在主方法中直接对某个对象调用这个方法,来防止对象声明,属性或运行出现异常]

异常与继承之间的关系:继承异常(或者继承类),重写某一个方法(这个方法抛出某一类异常),

其子类若想重写某一个方法,他可以抛出相当于父类同样的异常,或者不抛出任何异常(与父类异常必须完全相同,不可大 ,不可小。)

总结:一张图和五个关键字:老祖宗throwable -error&Exception-RuntimeException&必须处理

五个关键字:Throw,catch,try, throws, finally

先逮小的再逮大的,异常和重写之间的关系。

注意:finally方法在所有方法中都会比return语句先行执行,而且一旦抛出某个方法执行不了的异常后,return语句一定不会执行,但是finally方法仍会执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值