第九章 异常处理

文章详细介绍了Java中的异常处理,包括try-catch-finally结构的使用,ArithmeticException和NumberFormatException等常见异常的处理,以及如何自定义异常。强调了异常处理的重要性,用于捕获和处理程序运行时可能出现的错误,保证程序的健壮性。
摘要由CSDN通过智能技术生成

try{
// 代码块
}
catch(Excepton1 e){
//对Excepton1处理
}
catch(Excepton2 e){
//对Excepton2处理
}
...
finally{
//代码块
}

异常概述

在程序中,异常可能由程序员没有预料到的各种情况产生,也可能由超出了程序员可控范围的环境因素产生,如用户的坏数据,试图打开一个根本不存在的文件等。在Java中,这种在程序运行时可能出现的一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。

package 第九章;

public class Baulk { //创建类Baulk

public static void main(String[] args) { //主方法

// TODO 自动生成的方法存根

try {

int result=3/0; //定义int型变量并赋值

System.out.println(result); //将变量输出

}catch (ArithmeticException e) {

System.out.println("捕捉到算法异常");

}finally {

System.out.println("程序结束");

}

}

}

ArithmeticException  算法异常

异常的抛出与捕捉

异常抛出后,如果不做任何处理,程序就会被终止。例如,将一个字符串转换为整形,可以通过Integer类的parseInt()方法来实现。但如果该字符串不是数字形式,parseInt()方法就会抛出异常,程序将在出现异常的位置终止,不在执行。

package 第九章;

public class Thundering { //创建类

public static void main(String[] args) { //主方法

// TODO 自动生成的方法存根

try {

String str="lili"; //定义字符串

System.out.println(str+"年龄是:"); //输出的提示信息

int age=Integer.parseInt("20L"); //数据类型的转换

System.out.println(age); //输出信息

}catch (NumberFormatException e) {

System.out.println("捕捉到数字格式异常");

}finally {

System.out.println("程序结束");

}

}

}

NumberFormatException    数字格式异常

捕捉异常

Java语言的异常捕获结构由try,catch和finally3部分组成。其中,try语句块存放的是可能发生异常的Java语句;catch语句块在try语句块之后,用来激发被捕获的异常;finally语句块是异常处理结构的最后执行部分,无论try语句块中的代码如何退出,都将执行finally语句块。语法如下

 try-catch语句块

package 第九章;

public class Take { //创建类

public static void main(String[] args) {

// TODO 自动生成的方法存根

try { //try

String str="lili"; //定义字符串变量

System.out.println(str+"年龄是:"); //输出的信息

int age=Integer.parseInt("20L"); //数据类型的转换

System.out.println(age); //

}catch(Exception e) { //catch语句块用来获取异常信息

e.printStackTrace(); //输出异常性质

}

System.out.println("program over"); //输出信息

}

}

finally语句块

完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,并且无论之前的try-catch语句块是否顺利执行完毕,都会执行finally语句。但是,在以下4种特殊情况下,finally块不会被的执行:

在finally语句块中发生了异常

在前面的代码中使用System.exit()退出程序

程序所在的线程死亡

关闭CPU

Java常见的异常类

 

自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户只需继承Exception类即可自定义异常类。在程序中使用自定义异常类,大体可分以下几个步骤:

1  创建自定义异常类。

2 在方法中通过throw关键字抛出异常对象

3 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作

4 在出现异常的方法的调用者中捕获并处理异常。

package 第九章;

public class MyException1 extends Exception{ //创建自定义异常类

String message; //定义String类型变量

public MyException1(String ErrorMessage) { //父类方法

message=ErrorMessage;

}

public String getMessage() { //覆盖getMessage()方法

return message;

}

}

package 第九章;

public class Tran {

static int avg(int number,int number2)throws MyException {

//number和number2一定要在0~100之间

if(number<0 || number2<0) {

throw new MyException("不可以使用负数");

}

if(number>100 || number2>100) {

throw new MyException("数值太大了");

}

return(number+number2)/2;

}

public static void main(String[] args) {

// TODO 自动生成的方,法存根

try {

int result=avg(102,150);

System.out.println(result);

}catch(MyException e) {

System.out.println(e);

}

}

}

 在方法中抛出异常

使用throws关键字抛出异常

package 第九章;

public class Shoot { //创建类

static void pop()throws NegativeArraySizeException{

//定义方法并抛出NegativeArraySizeException 异常

int[]arr=new int[-3]; //创建数组

}

public static void main(String[] args) { //主方法

// TODO 自动生成的方法存根

try { //try语句处理异常信息

pop(); //调用pop()方法

}catch (NegativeArraySizeException e) {

System.out.println("pop()方法抛出的异常"); //输出异常信息

}

}

}

使用throw关键字抛出异常

package 第九章;

public class MyException1 extends Exception{ //创建自定义异常类

String message; //定义String类型变量

public MyException1(String ErrorMessage) { //父类方法

message=ErrorMessage;

}

public String getMessage() { //覆盖getMessage()方法

return message;

}

}

package 第九章;

public class Captor { //创建类

static int quotient(int x,int y)throws MyException{ //定义方法抛出异常

if(y<0) { //判断参数是否小于0

throw new MyException("除数不能是负数"); //异常信息

}

return x/y; //返回值

}

public static void main(String[] args) { //主方法

// TODO 自动生成的方法存根

try { //try语句块包含可能发生异常的语句

int result=quotient(3,-1); //调用方法quotient()

}catch(MyException e) { //处理自定义异常

System.out.println(e.getMessage());

}catch(ArithmeticException e) {

System.out.println("除数不能为0");

}catch(Exception e) {

System.out.println("程序发生了其他的异常");

}

}

}

运行时异常

RuntimeException 常是程运行过程中抛出的异常。Java类库的每个包中都定义了异常类,所这些类都是Throwable 类子类Throwable 类派生了两个子类,分别是 Exception 类和 Error 类。类及其子类用来描述Jav系统中内错误及资尽的错误,这类错误比较严重。Excen类称为非致命性类,可以通过捕捉处理使程序继续执行。Exception类根据错误发生的原因 RuntimeException异常和除RuntimeException 之外的异常,如图9.8所示。

Java中提供了常见的RuntimeException异常,这些异常可通过try-catch语句块捕获。

 

异常的使用原则 
Jave异常强制用户考程的强健性和安全性。异常处理不应用来控制程的正常流程。美生要作用是排获程序在远行时发生的异常并进行相应的处理。编写代码处理某个方法可能出现的异能。可速有以下几条原则:
当前方法声明中使用trycatch语句获异常。
己一个方法被爱盖时,爱盖它的方法必须抛出相同的异常或异常的子类。
如果父类地出多个异常,则爱盖方法必须抛出那些异常的一个子集,不能抛出新异常。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值