异常是在执行期出现的错误,运行的时候出现的,而不是编译的时候出现的错误,设计一个良好的程序的时候我们应该考虑到这些问题,从而保证出现异常的时候不会使程序崩溃掉,从而给用户更好的体验感,java强迫程序员要来捕获程序运行过程中可能会出现的异常,在可能出现异常的地方,可以生成一个异常类对象,我们可以通过这个对象,这个对象会将异常的信息封装起来交给正在运行的java系统,这就是所说的抛出异常(throw),java系统接受到这一个异常之后会寻找能够处理这异常的代码,然后对其进行处理,这一过程被称作异常的捕获(catch),首先根据下面这张图来介绍一下异常的类型有哪些。
在exception的下面有两个类分别为RuntimeException和Checked,第一中异常是在运行期间出现的异常我们可以不用对其进行捕获,但是第二种异常我们是必须要对其进行捕获的,而且是java强制的,我们必须要对其进行捕获。
然后就是finally关键字,这个一般是我们放在catch之后来用的,这个可以帮助我们用来完成一些资源的回收等,也许你现在会问,资源的回收不是有java的垃圾回收机制吗?好吧,这里的回收是对物理资源进行的回收而垃圾回收机制的回收是对我们的内存的回收,这里的回收有关闭网络连接呀,关闭已经打开的数据库呀?等等,说的finally,我们在这里就会引出一些问题,通过代码来看一下。
public static void main (String[]args){程序输出结果是“已被执行”和6;输出已被执行说明finally方法已经被执行了,输出6 说明try方法中的代码段未被执行这也就说明了,这就是反应出了finally的执行问题,当在try方法中遇到return语句会调转到finally语句中,如果finally语句中并没有return语句就会立刻返回到原先的代码段中,但是如果有了return语句我们就需要会从这里返回,不再去执行try中的代码。也就是finally中的语句会在最后被执行,用来释放资源等进行一些处理,但是如果在方法中出现了System.exit(0),此时给程序就会停止,因为这个程序是将程序当前所在的线程进行了中断,任何都不会在继续执行。
int a = cal();
System.out.println(a);
}
public static int cal (){
int count = 5;
try{
return ++count;
}
finally {
System.out.println("已被执行");
return count++;
}
}
catch中我们需要的注意的问题就是我们不能够去捕获try区不可能产生的异常,然后关于catch的问题就是关于其执行顺序的问题,以及对异常的捕获,我们需要的是先小后大对其进行捕获,首先是对捕获其子类的异常然后再去捕获父类异常,如果颠倒顺序,程序就会出现异常。还有就是不能够利用catch来代替流程控制,因为异常捕获的机制是java为异常捕获开设的。对于catch中我们应该做出一些能够对程序崩溃的异常可以进行修复的操作,对于不能够处理的异常我们就需要用throws方法,当该方法被调用的时候我们就需要对该方法进行一个异常的捕获。