API-IO-异常

程序的异常:Throwable
严重的问题:Error 我们不处理这种问题,这种问题一般都是最严重的,比如说内存溢出
问题:Exception
1.编译期的问题:不是RuntimeException的一串必须进行处理的,因为不处理编译不同通过
2.运行问题:RuntimeException,这种问题我们也不处理,因为你的问题,而且这个问题出现肯定是我们的代码不够严谨,需要修正代码的
关系图:

异常处理:
1.try...catch...fianlly
--------------------------------------------------------------------------------
try{
可能出现的问题的代码;
    }catch(异常名  变量){
针对问题的处理;
}  finally{
释放的资源
}
--------------------------------------------------------------------------------
2.throws
throwable中的方法
getMessage()
获取异常信息,返回字符串
toString()
获取异常类名和异常信息返回字符串
printStackTrace()
获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void
printStackTrace(printStreams)
通常用该方法将异常内容保存在日志文件中,以便查阅
throws
什么时候使用:
定义功能方法时,需要把出现的问题暴露出来让调用者去处理。那么就通过throws在方法中标识
小结:
编译期异常抛出,将来调用者必须处理
运行期异常抛出,将来调用者可以不处理
throw
什么时候使用:
在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出
面试题:
throws和throw的区别:
throws:
用在方法声明的后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不可能会发生这种异常
throw:
只有在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
我们该到底如何处理异常
原则:如果该功能 内部可以将问题处理,用try,如果处理不了交由调用者处理,这里是用throws
区别:
后续程序需要继续运行就用try
后续程序不需要运行就用throws
finally的特点 :
被finally控制的语句体一定会执行
特殊情况:在执行到finally之前JVM退出了(如system.exit())
finally的作用:
用于释放资源,在IO流操作和数据库操作中会见到
面试题:
1.final,finally和finalize的区别
final:最终的意思,可以修饰类,成员变量,成员方法
   修饰类,类不能被继承
   修饰的变量,变量为常量
   修饰方法,方法不能被重写
finally:是异常处理的一部分,用于释放资源
   一般来说代码肯定会执行,特殊情况执行到finally之前jvm退出
finalize:是object类的一个方法,用于垃圾回收
2.如果catch里面有return语句,请问finally里面的代码还会执行么?
如果会,请问是在return前还是return后
会   前    (实际是在中间)
--------------------------------------------------------------------------------
public static int getInt(){
int a=10;
try{
system.out.println(a);
a=20;
}catch(Arithanetic.Exception e){
a=30;
return a;
return  a  在程序执行到这一步的时候 这里不是return a 而是 return 30; 这个返回路径就形成啦,但是呢 它发现后面还有fianlly的内容,a=40, 再次回到以前的返回路径,继续走return 30.
}fianlly{
a=40;
}
return a;
}
--------------------------------------------------------------------------------
try....fianlly 这样的做法的目的是为了释放资源
要想你的类是一个异常类,就必须继承来自Exception 或者 RuntimeException
异常注意事项:
子类重写父类方法时,子类的方法必须抛出相同的异常或者父类异常的子类(父亲坏了,儿子不能比父亲更坏)
如果父类抛出了许多异常,子类重写父类时,只能抛出相同的异常或者是他的子类,子类不能抛出子类没有的异常
如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能用try 不能用throws
 

猜你喜欢

转载自blog.csdn.net/qq_40935960/article/details/94959327