Java学习之异常

来源:互联网 发布:软件的架构设计 编辑:程序博客网 时间:2024/05/22 00:01

一、概念

异常就是程序出现不正常的情况

二、分类

异常包括

错误:这是非常严重的问题,一般我们处理不了

异常:编译时期异常:开始就必须处理,如果不处理,程序就没法运行

   运行时期异常:开始可以不用处理,但是这种问题一旦发生,就是我们的程序问题,需要修改程序

三、体系结构


四、异常演示

package com.edu.exception;public class ExceptionDemo {public static void main(String[] args) {//int a = 10;//int b = 0;//System.out.println(a/b);//java.lang.ArithmeticException: / by zerotry{int a = 10;int b = 0;System.out.println(a/b);}catch (ArithmeticException e) {System.out.println("除数不能为0");}//finally{//System.out.println("finally里面一定会执行");//}}}

五、异常处理

默认处理方案:一旦程序出现了问题,就会把问题的类名,错误原因,错误的位置等信息打印在控制台,以便我们观察,并且会自动从当前出问题的地方停止掉
默认处理坏处:程序由多个部分组成,其中一个出问题了,不应该影响其他部分的执行
我们自己如何处理:

1、两种方案:

(1)
try{
可能出现异常的代码
}catch(异常类名 变量名){
针对异常的代码的处理
}finally{
释放资源的地方
}
finally:一般用于释放资源。在数据库操作或者IO流比较常见。
特点:
被finally控制的语句体一定会执行
特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
简化:
try{
可能出现异常的代码
}catch(异常类名 变量名){
针对异常的代码的处理
}
(2)throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用,号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能,并不一定会发生这些异常
例:public void method() throws FileNotFoundException{}

2、多个异常处理

try多个catch如果异常间存在父子关系,那么父必须在后面

3、演示编译器异常,运行期异常

try..catch是直接对异常进行了处理,而throws则是把异常处理的事情交给了调用者
throws用在方法上,声明方法有一场,交个调用者
但是,如果是编译时期的异常,调用者就必须处理,如果是运行时期的异常,调用者可以处理,也可以不处理
4、final和finally的区别:
final:是最终的意思,可以修饰类,方法,变量
修饰类,类不能被继承
修饰方法,方法不能被重写
修饰变量,变量变常量
finally:异常处理的一部分,被finally控制的代码一定会执行,
特殊情况:在执行到finally之前,jvm退出了

4、注意

仅仅针对编译时期异常,与运行时期异常无关。
(1)子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
(2)如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
(3)如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

5、throw和throws的区别?

 throws:

 用在方法声明后面,跟的是异常类名
 可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常

 throw:
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
private static void method2() throws FileNotFoundException{try{FileInputStream fis = new FileInputStream("D://a.txt");}catch(FileNotFoundException e){//当遇见这个异常之后,直接抛出(这就是我给出的处理方法)//如果【抛出的是编译时期异常的话,必须在方法声明上给予声明throw new FileNotFoundException();}}


0 0