0
点赞
收藏
分享

微信扫一扫

第八章 异常处理总结

八怪不姓丑 2022-04-29 阅读 242

目录

一、异常概述

二、异常的分类

1、系统错误——Error

2、异常——Exception

(1)、运行时异常

(2)、非运行时异常 

三、捕捉处理异常

1、try...catch代码块

 2、finally代码块

四、在方法中抛出异常

1、使用throws关键字抛出异常

 2、使用throw关键字抛出异常

五、自定义异常

六、异常的使用原则 

七、小结


一、异常概述

在项目中创建类Baulk,在主方法中定义int型变量,将0作为除数赋值给该变量。

代码如下:

package8单元;

public class Baulk {//创建类

public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
int result =3/0;//定义int型变量并赋值
System.out.println(result);//将变量输出
}

}

异常效果:

二、异常的分类

1、系统错误——Error

2、异常——Exception

(1)、运行时异常

运行时异常是程序运行过程中产生的异常,它是RuntimeException类及子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这些异常的发生。

在项目中创建类Thundering,在主方法中实现将字符串转为int型。运行程序,系统会报出异常提示

代码如下:

package8单元;

public class Thundering {//创建类

public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
String str ="lili";//定义字符串
System.out.println(str+"年龄是:");//输出的提示信息
int age =Integer.parseInt("20L");//数据类型的转换
System.out.println(age);//输出信息
}

}

 运行时异常:

(2)、非运行时异常 

非运行时异常是RuntimeException类及其子类异常以外的异常。从程序语法角度将,这类异常
是必须进行处理的异常,如果不处理,程序就不能编译通过,如 IOException、SQLException 以及用户自定义的异常等。

package8单元;

public class FootballTeam {//创建类
private int playerNum;//定义:球员数量
private String teamName;//定义:球员队名
public FootballTeam() {//构造方法FootballTeam
//寻找"教练"类
try {//使用try...catch代码块进行处理
Class.forName("com.mrsoft.Coach");
} catch (ClassNotFoundException e) {//使用try...catch代码块进行处理
// TODO Auto-generated catch block
e.printStackTrace();//对象名
}
}
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
FootballTeam team=new FootballTeam();//创建对象team
team.teamName="com.mrsoft";//初始化teamName
team.playerNum=19;//初始化playerNum
System.out.println("\n球队名称:"+team.teamName+"\n"+"球员数量:"+team.playerNum+"名");//输出内容
}

}

运行结果:

三、捕捉处理异常

try {
//程序代码块

}

catch(Exceptiontype e) {
//对Exceptiontype的处理

}

finally {
//代码块

}

1、try...catch代码块

在项目中创建类Take,在主方法中使用tey...catch代码块将可能出现的异常语句进行异常处理。

public class Take1 {       //创建类

public static void main(String[] args) { //主方法
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"); //输出信息
}
}

运行结果:

 2、finally代码块

修改上一个代码,将程序结束的提示信息放到finally代码块中,代码如下:

package8单元;

public class Take2 {//创建类

public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
try {//try语句中包含可能出现异常的程序代码
String str ="lili";//定义字符串变量
System.out.println(str+"年龄是");//输出的信息
int age =Integer.parseInt("20L");//数据类型转换
System.out.println(age);//输出
}catch(Exception e) {//catch代码块用来获取异常信息
e.printStackTrace();//输出异常性质
}finally {//finally代码块
System.out.println("program over");//输出信息
}
}

}


 运行结果:

四、在方法中抛出异常

1、使用throws关键字抛出异常

在项目中成绩类Shoot,在该类中创建方法pop(),在该方法中抛出NegativeArraySizeException(试图创建大小为负的数组)异常,在主方法中调用该方法,并实现异常处理。

代码如下:

package8单元;

public class Shoot {//创建类
static void pop() throws NegativeArraySizeException{//主方法
//定义方法并抛出NegativeArraySizeException异常
int[] arr =new int[-3];//创建数组
}
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
try {//try语句处理异常信息
pop();//调用pop()方法
}catch(NegativeArraySizeException e) {
System.out.println("pop()方法抛出的异常");//输出异常
}
}

}

运行结果:

 2、使用throw关键字抛出异常

使用throw关键字抛出除数为0的异常。

代码如下:

package8单元;

public class ThrowTest {//创建类

public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
int num1 = 25;//定义int型变量并赋值
int num2 = 0;//定义int型变量并赋值
int result;//定义int型变量
if (num2 == 0) //判断num2是否等于0,如果等于0,抛出异常
{
//抛出ArithmeticException异常
throw new ArithmeticException("这都不会,小学生都知道:除数不能是0!!!");//输出信息
}
result = num1 / num2; //计算int1除以int2的值
System.out.println("两个数的商为: " + result);//输出信息
}

}

运行结果:

五、自定义异常

 在程序中使用自定义异常类,大体可分为以下几个步骤。

(1)创建自定义异常类。

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

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

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

首先在项目中创建员工自定义的异常类Exception,该类继承Exception,代码如下:

public class MyException extends Exception {   //创建自定义异常,继承Exception类
public MyException(String ErrorMessage) { //构造方法
super(ErrorMessage); //父类构造方法
}
}

在项目中创建类Tran,该类中创建一个带有int型参数的方法avg(),该方法用来检查年龄是否小于0,如果小于0,则使用throw关键字抛出一个自定义的MyException异常对象,并在main()方法中捕捉该异常。代码如下:

package8单元;

public class Tran {
//定义方法,抛出自定义的异常
static void avg(int age) throws MyException {//方法
if (age < 0) { //判断方法中参数是否满足指定条件
throw new MyException("年龄不可以使用负数"); //错误信息
} else {
System.out.println("王师傅今年 " + age + "岁了!"); //输出信息
}
}
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
try { //try代码块处理可能出现异常的代码

avg(-50); //值
} catch (MyException e) {
e.printStackTrace();//错误输出
}
}
}

运行结果:

六、异常的使用原则 

编写代码处理某个方法可能出现的异常时,可遵循以下原则:

(1)不要过度使用异常。虽然通过异常可以增强程序的健壮性,但如果使用过多不必要的异常处理,可能会影响程序的执行效率。

(2)不要使用过于庞大的try...catch块。在一个try块中放置大量的代码,这种写法看上去“很简单”,但是由于try块中的代码过于庞大,业务过于复杂,会造成try块中出现异常的可能性大大增加,从而导致分析异常原因的难度也大大增加。

(3)避免使用catch(Exception e)。因为如果所有异常都采用相同的处理方式,将无法对不同异常分情况处理;另外,这种捕获方式可能将程序中的全部错误、异常捕获到,这时如果出现一些“关键”异常,可能会被“悄悄地”忽略掉。

(4)不要忽略捕捉到的异常,遇到异常一定要及时处理。

(5)如果父类抛出多个异常,则覆盖方法必须抛出相同的异常或其异常的子类,不能抛出新异常。

七、小结

THE END!

 

举报

相关推荐

0 条评论