Java学习(74)Java异常——try-catch-finally

1. 结构

public void method() {
	try {
		// 代码段1
		// 产生异常的代码段2
	}catch(异常类型 ex) {
		// 对异常进行处理的代码段3
	}finally {
		// 代码段4
	}
}

其中:
(1) try块:用于捕获异常
(2) catch块:用于处理try捕获到的异常
(3) finally块:无论是否发生异常,代码总能执行
注:try块后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。

2. 案例:定义两数之商

public class TryDemoOne {
	public static void main(String[] args) {
		// 要求:定义两个整数,接受用户的键盘输入,输出两数之商
		Scanner input=new Scanner(System.in);
		System.out.println("=====运算开始=====");
		try{
			System.out.print("请输入第一个整数:");
			int one=input.nextInt();
			System.out.print("请输入第二个整数:");
			int two=input.nextInt();
			System.out.println("one和two的商是:"+ (one/two));
		}catch(ArithmeticException e){
			System.exit(1);//终止程序运行
			System.out.println("除数不允许为零");
			e.printStackTrace();
		}catch(InputMismatchException e){
			System.out.println("请输入整数");
			e.printStackTrace();
		}catch(Exception e){
			System.out.println("出错啦~~");
			e.printStackTrace();
		}finally{
			System.out.println("=====运算结束=====");
		}
	}
}

注:
(1) 异常Exception e:所有异常,要放在最后边,否则会报错;
(2) 异常ArithmeticException e:算数异常;
(3) 异常InputMismatchException e :输入匹配错误异常;
(4) 打印错误堆栈信息:e.printStackTrace();

3. 常见异常类型及原因分析

ArithmeticException

(1) 异常说明:数学运算异常
(2) 出现条件:涉及到数学运算的地方可能出现失误,比如程序中出现了除以零这样的运算。

NumberFormatException

(1) 异常说明:数字格式化异常
(2) 出现条件:涉及到类型转换时,比如不符合转换格式的字符被转换成数字。

ArrayIndexOutOfBoundsException

(1) 异常说明:数组下标越界异常
(2) 出现条件:涉及到使用超出数组下标范围的下标。

NullPointerException

(1) 异常说明:空指针异常
(2) 出现条件:当使用了未经初始化的对象或者是不存在的对象时。

ClassCastException

(1) 异常说明:类型转换异常
(2) 出现条件:如向下转型时,转换对象无法完成正常转换。

ArrayStoreException

(1) 异常说明:数组中包含不兼容的值的异常
(2) 出现条件:数组中实际传入的数据与预定不符,譬如子类数组经过向上转型。后,传入父类对象。

InputMismatchException

(1) 异常说明:输入格式错误的异常
(2) 出现条件:接收数据与预期格式不符时。

FileNotFoundException

(1) 异常说明:文件未找到异常
(2) 出现条件:操作文件内容时发现文件不存在。

  • 注:try…catch里面定义的变量外部可以使用吗?
    答:不可以,try…catch代码块中定义的是局部变量,只能在其代码块中应用。

4. 终止finally执行的方法

System.exit(1);

try{
...
}catch(ArithmeticException e){
			System.exit(1);//终止程序运行
			System.out.println("除数不允许为零");
			e.printStackTrace();
		}

注:System.exit(1);表示当前程序无条件终止运行。

5. return关键字在异常处理中的作用

public class TryDemoTwo {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int result=test();
		System.out.println("one和two的商是:"+ result);
	}
	public static int test(){
		Scanner input=new Scanner(System.in);
		System.out.println("=====运算开始=====");
		try{
			System.out.print("请输入第一个整数:");
			int one=input.nextInt();
			System.out.print("请输入第二个整数:");
			int two=input.nextInt();
			return one/two;
		}catch(ArithmeticException e){
			System.out.println("除数不允许为零");
			return 0;
		}finally{
			System.out.println("=====运算结束=====");
			return -100000;
		}
	}
}

运行结果:

=====运算开始=====
请输入第一个整数:12
请输入第二个整数:0
除数不允许为零
=====运算结束=====
one和two的商是:-100000

这里发现:finally中写return虽然不报错,但是不论有无异常最后都会返回finally中的return,因此,在逻辑上,finally中最好不要写return。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值