【Java基础】异常处理机制:try-catch-finally

1.异常对象生成(抛出异常)

Java程序的执行过程中如果出现异常,就会生成一个异常类的对象,该异常对象将会被提交给Java运行时系统。

  • 虚拟机自动生成异常对象:虚拟机检测到程序发生了问题,在后台自动创建异常对象,并交给Java运行时系统(抛出)。

  • 开发人员手动创建异常对象:Exception exception = new ClassCastException(); 可以不交给Java运行时系统(不抛出)。就是一个普通对象。

2.处理异常对象(捕获异常catch)

方法2内抛出异常 -> 抛给调用的方法1->...直到被处理

void method1(){
 method2();
}

void method2(){
	System.out.println("产生异常");
}

如果抛到main()方法,并且main也不处理,则程序运行终止。

3.try-catch-finally

(1)try
把可能出现异常的代码用try括起来
image

(2)catch
捕获到ClassCastException异常,异常对象名为e。括号内是处理该异常。
可以写多个catch,参数可以是ClassCastException,也可以是它的父类。
image

异常对象e可以调用成员变量和方法
image

常用方法
getMessage() 获取异常信息,返回字符串。
printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void。

catch (ClassCastException e) {
	e.printStackTrace();  //控制台显示异常
	System.out.println(e.getMessage()); //java.lang.Object cannot be cast to java.lang.String
}

(3)finally
finally是可选的,最后执行的代码。
不论是否有异常,不论catch语句中是否有return,finally块中的语句都会被执行。
如果catch中有return,则先执行finally块中代码,再返回catch中的return。
如果catch和finally中都有return,catch中的return会执行(表达式)不会返回,只返回finally中的return。

public void talk(String word) {
	System.out.println(word);

	try {
		Object o = new Object();
		String str = (String) o;
	} catch (IndexOutOfBoundsException e) {
		System.out.println("处理数组下标越界异常");
	} catch (ClassCastException e) {
		System.out.println("处理类型转换异常");

	} catch (NullPointerException e) {
		System.out.println("处理空指针异常");
	} finally {
		System.out.println("你写错代码了");
	}
	word += "~";
}

执行结果

English
处理类型转换异常
你写错代码了

1.catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错。小的写在上面。
2.try-catch-finally结构可以嵌套

posted @ 2022-09-28 19:07  植树chen  阅读(154)  评论(0编辑  收藏  举报