Java基础系列—异常

一、Java异常

异常的类图

Error

1、 Error为严重性问题,总是不可控制的(unchecked)。

2、 经常用来表示系统错误或者底层资源错误。

3、 如果可能的话,应该在系统级被处理。

Exception

1、Checked Exception(编译时异常):不是RuntimeException的所有异常。必须处理,因为不处理的话,编译无法通过。

2、Uncheck Exception(运行时异常):RuntimeException及其子类的异常。可以处理,也可以不处理。

出现这类问题一般都是代码不够严谨所导致的。如果不处理,并且运行时出现问题的话,最终由JVM做默认处理。

把异常的名称、原因及出现的问题等输出到控制台,并且结束程序运行(不在运行剩余的代码)。

二、处理异常

处理异常有两种方法
1、try……catch……finally
2、throws抛出
try-catch格式

1、

try {

      可能出现问题的代码;

} catch (异常名 变量){

      针对问题的处理;

} finally {

      释放资源;

}

2、

try {

      可能出现问题的代码;

} catch (异常名 变量){

      针对问题的处理;

}

注意事项-try-catch

1、try里面的代码越少越好,因为try里面的代码都要走异常处理机制,代码越少效率越高。

2、catch里面必须有内容,哪怕只是一个简单的提示。如果没有提示的话,出现异常就会被异常,无从察觉。

异常处理方式

1、 一个异常,写一个try…catch。

2、 两个异常

1)写两个try…catch。

2)写一个try,多个catch。

try {

      可能出现问题的代码;

} catch (异常名1 变量){

      针对问题的处理;

} catch (异常名2 变量){

      针对问题的处理;

}
注意事项-处理多异常

1、 能明确的异常尽量用明确的异常,不要用父类。

2、 平级的异常,无论谁先谁后都没关系。如果出现父子类异常,则子类在前父类在后。

3、 一旦try里面的代码出现问题,jvm就会生成一个异常对象,然后把对象抛出去和catch里面的类进行匹配,

如果该对象是属于某个类的,就会执行catch里面的处理信息。一旦有匹配的,就执行catch里面的代码处理,然后try-catch结束。继续执行后面的代码。

4、try-catch的e.printStackTrace的错误提示虽然与系统默认的一样,但是有try-catch的话遇到错误后面的代码仍然运行。

JDK7异常处理方案

try {

      可能出现问题的代码;

} catch (异常名1 |异常名2|… 变量){

      针对问题的处理;

}

注意事项-JDK7异常处理缺陷

1、 处理方式一致。

2、 多个异常必须是平级关系,不能有子父类关系。

throws

1、有些时候,我们能对异常进行处理,但是有些时候,我们根本不能处理。这时候就需要抛出异常throws。

2、编译期异常抛出,将来调用者必须处理,即try-catch

3、运行期异常抛出,将来调用可以不用处理。

throws与throw的区别

throws:

1、用在方法声明后面,跟的是异常名。

2、可以跟多个异常类名,用逗号隔开。

3、表示抛出异常,由该方法的调用者来处理。

4、throws表示出现异常的一种可能性,并不一定会发生这些异常。

throw:

1、 用在方法体内,跟的是异常对象名。

2、 只能抛出一个异常对象名。

3、 表示抛出异常,由方法体内的语句处理。

4、 throw则是抛出了异常,执行throw则一定抛出了某种异常。

throws与try-catch的区别

1、 后续程序需要继续运行就try-catch。

2、 后续程序不需要继续运行就throws。

3、 可以解决的问题用try-catch,不可以解决的问题用throws,特别严重的问题用Error。

finally

1、如果在执行到finally之前jvm退出了,就不能执行了。

2、finally语句块一定会执行。

3、finally必须与try连用。

4、catch里面有return语句时,finally代码也会执行,是在return语句之前执行。

例如:

Main(){
	int i = getInt();//5  
	println(i);  //i=50
}

public int getInt(){
      int a = 10 ,b = 0;
      int d = 20;
      try{
            int c = a / b;
            d = 30;
      }catch(Exception e){
	    d = 40;  	//1
	    return d;  //2 时形成的返回路径为return 40   //4
      }finally{
	   d = 50;  //3
      }
      return 1;  //不执行
}

final,finally和finally的区别

final:

1、最终的意思,可以修饰类,成员变量,成员方法。

2、修饰类,类不能被继承。

3、修饰变量,变量是常量。

4、修饰方法,方法不能被重写。

finally:

1、是异常处理的一部分,用于释放资源。

2、一般情况,代码肯定会被执行。

3、特殊情况:在执行到finally之前jvm退出了就不会执行。

finalize:

1、是Object类的一个方法,用于垃圾回收。

欢迎关注个人公众号,可直接扫描以下二维码或微信搜索“阿毛聊技术”。

posted @ 2020-06-01 00:30  limaodeng  阅读(118)  评论(0)    收藏  举报