cbg云服务Java,java编程入门4 异常处理

异常处理

异常的定义

1.异常是在代码序列运行时出现的非正常事件,是特殊的运行错误对象。异常的发生将阻止程序正常运行,并可能出现以下两种情况。

1)程序运行终止,控制权返回给操作系统

2)程序运行终止,系统死机崩溃状态

异常类

1.java提供了以Throwable类为基类的一系列异常类和错误类。throwable有两个直接的子类--Error(错误类)和Exception(异常类),Error类代表程序出现的错误,如程序运行时系统内部错误或资源耗尽等。这种错误是不能通过修改程序代码来恢复的。Exception类,代表程序出现的异常。

2.Exception类包括运行异常类(RuntimeException及其子类)和非运行异常类,运行异常类的产生一般由程序员的编程错误引起,完全可以通过改进程序避免,所以java编译器对此类异常不进行检查。非运行异常类是由运行环境引发的异常,eg:文件读写错误,数据库连接不通,找不到文件等。所以java编译器要求java程序必须捕捉或处理所有非运行异常。

常见的异常类

Throwable常见方法

异常处理

1.java中异常处理是通过try……catch……fianlly语句来实现的,具体格式为:

try{

可能抛出异常的语句

}catch(异常类型1 异常对象){

对异常类型1对象的处理

}catch(异常类型2 异常对象){

对异常类型2对象的处理

}

…… …… ……catch(异常类型n 异常对象){

对异常类型n对象的处理

}finally{

不管是否出现异常,必须执行的语句

}

说明:

1)将有可能出现异常的代码用try-catch语句块进行处理,当try语句块中的代码运行出现异常时,则进入catch语句块,从上至下依次与catch语句块中的异常类型进行查找匹配(检查以抛出的异常对象类型是否与该catch语句块中指定的异常类型相同或为其子类)执行完catch代码块中的程序代码后,将继续执行catch代码块后的其他代码,而不会执行try代码块中发生异常语句后面的代码。

2)在异常处理中,最多有一个catch语句块会被执行。另外,如果有多个catch语句块,且catch语句块中的参数所指定的异常类型有父子继承关系,则要求处理子类异常的catch语句块放在处理父类异常的catch语句块的前面。否则会出现编译错误。

3)由于finally语句块中的代码肯定会被执行,所以通常在finally语句块中进行资源的清除工作。

在方法中抛出异常

1.若某个方法可能会发生异常,但不想在当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常。

使用throws关键字抛出异常

1)throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常。多个异常可使用逗号分隔。

2)如果是Error、RuntimeException或它们的子类,可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。

使用throw关键字抛出异常

1)throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指定要抛出的异常;如果要捕获throw抛出的异常,则必须使用try-catch语句块。

2)throw通常用来抛出用户自定义异常。

自定义异常类

1.自定义异常类必须继承Exception类或其子类

class MyException extendsException{publicMyException(String ErrorMessage) {super(ErrorMessage);

}

}

2.自定义异常的抛出

1)自定义异常不可能依赖系统自动抛出,因为系统不知道错误在哪里,所以需在自定义的出错位置借助于throw语句抛出自定义的异常类对象。用throw语句抛出异常对象的语法格式为:

修饰符 返回类型 方法名(参数列表)throws异常类名列表{

…… …… ……throw异常类对象

…… …… ……

}

说明:

1)一般这种抛出异常的语句应该被定义为在满足一定条件时执行。

2)含有throw语句的方法。应该在方法头定义中增加“throws 异常类名列表"。如果方法中的throw语句中不止一个,则在异常类名列表中一一列出,中间用逗号隔开。

public classTest {static int dev(int number1,int number2) throwsMyException,IOException{if(number1<0||number2<0) {throw new MyException("不可以使用负数");

}if(number1>100||number2>100) {throw new MyException("数值太大");

}return number1/number2;

}public static voidmain(String[] args) {try{int result=dev(10,0);

System.out.println(result);

}catch(MyException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

}

异常使用原则

1.在当前方法声明中使用try-catch语句捕获异常

2.一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类

3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常

注:Error、RuntimeException或它们的子类,可以不使用throws关键字来声明要抛出的异常

//原则2

public class Text extendsfather{public void fun() throwsClassNotFoundException{

}public static voidmain(String[] args) {

}

}classfather {public void fun() throwsIOException,ClassNotFoundException{

}

}//原则3

public class Text extendsfather{public void fun() throwsClassNotFoundException,FileNotFoundException{

}public static voidmain(String[] args) {

}

}classfather {public void fun() throwsIOException,ClassNotFoundException{

}public void fun1() throwsFileNotFoundException{

}

}

13289

2018-11-25

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值