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。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是 Java 异常Java 异常是指程序执行期间可能发生的错误或异常情况,例如除以零、数组越界、空指针引用等。当这些异常发生时,Java 虚拟机会抛出一个异常对象,并且程序的执行流程将被中断。 2. Java 异常处理机制有哪些关键字和语句? Java 异常处理机制包括以下关键字和语句: - try:用于包含可能会抛出异常的代码块。 - catch:用于捕获指定类型的异常,并在捕获到异常时执行相应的处理代码。 - finally:用于包含无论是否发生异常都需要执行的代码块。 - throw:用于抛出指定的异常对象。 - throws:用于声明可能会抛出指定类型异常的方法。 3. Java 中的异常分为哪几类? Java 中的异常分为两大类:Checked Exception 和 Unchecked Exception。 Checked Exception 是指在编译时就能够检查出来的异常,例如 IOException、ClassNotFoundException 等。程序必须显式地处理这些异常,否则编译不通过。 Unchecked Exception 是指在运行时才能检查出来的异常,例如 NullPointerException、ArrayIndexOutOfBoundsException 等。程序可以选择处理这些异常,但不处理也不会导致编译错误。 4. 请简要说明 try-catch-finally 的执行流程。 当程序执行到 try 块时,Java 会尝试执行其中的代码。如果在 try 块中抛出了异常,则会将异常对象传递给 catch 块进行处理。catch 块会匹配异常类型,如果匹配成功,则执行相应的处理代码。如果 catch 块处理完异常后,程序需要继续执行,则会执行 finally 块中的代码。如果 finally 块中也抛出了异常,则该异常会覆盖 try 或 catch 块中的异常。 如果 try 块中没有抛出异常,则 catch 块不会被执行。如果 finally 块中抛出异常,则该异常会覆盖 try 块中的异常。 5. 什么是异常链? 异常链是指在处理异常时,将一个异常对象作为另一个异常的原因,并将它们组合成一个异常链。这样做的好处是,在抛出异常时可以同时传递多个异常信息,从而更加清晰地表示异常发生的原因。 6. 请简要说明 try-with-resources 的作用和使用方法。 try-with-resources 是 Java 7 中引入的语法,用于自动关闭实现了 AutoCloseable 接口的资源。在 try 块中声明需要使用的资源,Java 会在 try 块执行完毕后自动关闭这些资源,无需手动调用 close 方法。 try-with-resources 的语法如下: ``` try (Resource1 r1 = new Resource1(); Resource2 r2 = new Resource2()) { // 使用资源 } catch (Exception e) { // 处理异常 } ``` 7. 请简要说明 Java 中的文本 IO。 Java 中的文本 IO 主要包括两种类:Reader 和 Writer。Reader 用于读取字符流,而 Writer 用于写入字符流。 Java 中常用的 Reader 类包括 InputStreamReader、FileReader 和 BufferedReader,常用的 Writer 类包括 OutputStreamWriter、FileWriter 和 BufferedWriter。这些类提供了各种方法来读取和写入字符流,并且可以处理多种编码格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值