Java第八章总结

这篇博客总结了Java中的异常处理,包括异常概述、分类、错误(Error)、异常(Exception)、自定义异常的创建和使用,以及异常处理的原则。通过实例解析了如何在程序中捕获并处理异常,强调了正确使用异常处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.1 异常的概述
       在程序中,错误可能产生于程序员没有预料到的各种情况,或者是超出了程序员可控范围的环境因素,如试图打开一个根本不存在的文件等,在Java中,这种在程序运行时可能出现的一些错误称为异常。

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

例8.1

public class jjj666 {                            //创建类jjj666
    public static void main(String[] args) {   //主方法
           int result = 3 / 0;                 //定义int型变量并赋值
         System.out.println(result);           //将变量输出
     }
}

 

   运行的结果报告发生了算数异常ArithmeticException,系统不再执行下去,提前结束。

8.2 异常的分类
  Java类库的每个包中都定义了异常类,所有这些类都是Throwable类。

  Throwable类派生了Error和Exception连个子类。

  Error类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。

  Exception称为非致命类,可以通过捕捉处理使程序继续执行。

8.2.1 系统错误——Error
       Error类定义了常规环境下不希望由程序捕获的异常,比如:OutOfMemoryError、ThreadDeath等,这些错误发生时Java一般会选择终止。

 

 例8.2

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

 例8.3

package jjj666;
public class FootballTeam {
	private int playerNum;  //定义球员数量
	private String teamName; //定义“球员名称”
	public  FootballTeam()
	{
		//寻找教练类
		class.forName("com.mrsoft.Coach");
	}
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 FootballTeam team = new  FootballTeam();//创建对象team
		 team.teamName = "com.mrsoft";//初始化对象
		 team.playerNum = 19;//初始化对象
		 System.out.println("\n球队名称: " + team.teamName + "\n" + "球员数量: " + team.playerNum + "名");
 
	}

8.3 捕捉处理异常
在处理非运行时异常时,提到了系统会自动为非运行时异常提供两种解决方案,一种是使用throws关键字,一种是使用try...catch代码块。

try...catch代码块代码块主要用来对异常进行捕捉并处理。在实际使用时,改代码块还有一个可选的finally代码块。

例8.4

package jjj666;
public class jjj66 {       //创建类
	 
	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");   //输出信息
		     }
		}

例8.5 

 

package jjj666;
public class jjj66 {       //创建类
	 
	public static void main(String[] args) { //主方法
		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
 
		System.out.println("program over");   //输出信息
		     }
		}

 

例8.6 

package jjj666;
public class jjj66 {
	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()方法抛出的异常");  //输出异常信息
         }
        	  
     }
 
}

例8.7 

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

8.5 自定义异常
int age = -50;

System.out.println("王师傅今年  "+age+"  岁了!");

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

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

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

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

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

public class MyException extends Exception {   //创建自定义异常,继承Exception类
     public  MyException(String ErrorMessage) {  //构造方法
          super(ErrorMessage);                  //父类构造方法
   }
}
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();
             }
	   }
 
}
 

 

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

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

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

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值