Java第八章总结

第八章 异常处理

8.1 异常概述

在程序中,错误可能产生生于程序员没有预料到的各种情况,或者是超出了程序员可控范围的环境因素,这种在程序运行时可能出现的一些错误称为异常。

package hwd;
 
public class Baulik {//创建类
 
	public static void main(String[] args) {//主方法
		int result = 3 / 0;//定义并赋值
		System.out.println(result);//打印结果
	}
 
}

8.2 异常的分类

Java类库阿每个包中都定义了异常类、所有这些类都是Throwable类的子类。Throwable类派生了两个子类,分别时Error类和Exception类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。Exception类称为非致命性类,可以通过捕捉处理使程序继续执行。

8.2.1 系统错误——Error

Error类及其子类通常用来描述Java运行系统中的内部错误,该类定义了常规环境不希望由程序捕获的异常。

8.2.2 异常——Exception

Exception是程序本身可以处理的异常,这种异常主要分为运行时异常和非运行时异常,程序中应当尽可能去处理这些异常。

1.运行时异常

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

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

 

package hwd;
 
public class Thundering {//创建类
 
	public static void main(String[] args) {//主方法
		String str = "1i1i";//定义字符串
		System.out.println(str + "年龄是:");//打印结果
		int age = Integer.parseInt("20L");//数据类型转换
		System.out.println(age);//打印结果
	}
 
}

 2.非运行时异常

非运行时异常是RuntimeException类及其子类异常以外的异常。

package hwd;
 
public class FootballTeam {//创建类
 
	private int playerNum;//创建属性
	private String teamName;//创建属性
	public FootballTeam() {//构造方法
		Class.forName("com.mrsoft.Coach");//寻找教练类
	}
	public static void main(String[] args) {//主方法
		FootballTeam team = new FootballTeam();//创建对象
		team.teamName = "com.mrsoft";//调用并赋值
		team.playerNum = 19;//调用并赋值
		System.out.println("\n球队名称:" + team.teamName + "\n" + "球员数量:" + team.playerNum + "名");//打印结果
	}
 
}

 

8.3 捕捉处理异常

系统会自动为非运行时异常提供两种解决方案,一种是使用throw关键字,一种是使用try...catch代码块。

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

try{
//程序代码块

}

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

}

finally{
//代码块

}

 8.3.1 try...catch代码块

package hwd;
 
public class Take {//创建类
 
	public static void main(String[] args) {//主方法
		try {
			String str = "1111";//try语句可能出现异常的代码
			System.out.println(str + "年龄是:");//定义字符串变量
			int age = Integer.paresInt("20L");//数据类型转换
			System.out.println(age);//打印结果
		} catch (Exception e){//catch代码块用来获取异常信息
			e.printStackTrace();//输出异常性质
		}
		System.out.println("program over");//输出信息
	}
 
}

8.3.2 finally代码块

完整的异常处理语句应该包含finally代码块,通常情况下,无论程序中有无异常发生,finally代码块中的代码都可以正常执行。

package hwd;
 
public class Take {//创建类
 
	public static void main(String[] args) {//主方法
		try {
			String str = "1111";//try语句可能出现异常的代码
			System.out.println(str + "年龄是:");//定义字符串变量
			int age = Integer.paresInt("20L");//数据类型转换
			System.out.println(age);//打印结果
		} catch (Exception e){//catch代码块用来获取异常信息
			e.printStackTrace();//输出异常性质
		}finally{
		System.out.println("program over");//输出信息
		}
	}
 
}

 

8.4 在方法中抛出异常

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

8.4.1 使用throws关键字抛出的异常

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

 

8.4.2 使用throws关键字抛出异常

throws关键字通常用于在方法体中“制造”一个小异常,程序在执行到throw语句时立即终止,它后面的语句都不执行。使用throw关键字出异常的语法格式为:

throw new 异常类型名(异常信息);
package hwd;
 
public class ThrowTest {//创建类
 
	public static void main(String[] args) {//主方法
		int num1 = 25;//创建属性
		int num2 = 0;//创建属性
		int result;//创建属性
		if(num2 == 0){//
			//抛出ArithmeticException
			throw new ArithmetiicException("这都不会,小学生都知道:除数不能为0");
		}
		result = num1 / num2;//计算
		System.out.println("两个数的商为:" + result);//打印结果
	}
 
}

8.5 自定义异常


使用Java内置的异常类可以描述在编程时出现的大部分情况,但是有些情况是通过内置异常类无法识别的,

int age = -50; 

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

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

1 创建自定义异常类

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

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

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

package hwd;
 
public class MyException extends Exception {//创建自定义异常,继承Exception类
	public MyException(String ErrorMessage){//构造方法
		super(ErrorMessage);//父类构造方法
	}
 
}
package hwd;
 
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) {//主方法
		try{
			
			
			avg(-50);//年龄值
		} catch (MyException e){//try代码块处理可能出现异常的代码
			e.printStackTrace();
		}
 
	}
 
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值