Java中的异常处理

文章目录


一、异常

1、异常体系

Java中的异常处理
Error:严重问题,不需要处理
Exception:称为异常类,它表示程序本身可以处理的问题。RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码。
非RuntimeException:编译期就必须要处理的,否则程序不能通过编译,就更不能正常运行了。
异常处理:java中的异常处理是通过5个关键字来实现的:
try、catch、finally、throw、throws
try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一。
try:可能发生异常的代码块;
Catch:可以捕获的异常,可以有多个catch;
Finall:不管怎么办,这个代码块都会运行;
Throw:手动抛出异常关键字;
Throws:由方法自动抛出异常。

try {
	可能出现异常的代码;
	}catch(异常类名 变量名){
		异常处理代码;
		}finally{
		最终执行的代码块;
		}
 

程序从try里面的代码开始执行出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统。
当Java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理执行完毕之后,程序换可以继续往下执行。

2. try-catch块中存在return语句,是否还执行finally块 ,如果执行,说出执行顺序 try-catch- finally块中:

1、不管有没有出现异常,finally块中代码都会执行。
2、当try和catch中有return时,finally仍然会执行。
3、Finally是在return后面的表达式运算后执行的(此时没有返回运算后的值,而是把先要返回的值保存起来,不管finally中的代码怎么样,返回值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的。例如:

代码如下(示例):

public class FinallyTest  {	
	public static void main(String[] args) {
	System.out.println(new FinallyTest().test());	
	} 	
	static int test(){
		int x = 1;
		try{
			x++;
			return x;
		}finally{
		++x;
		}	
	}
}

返回值是2
1、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
2、如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况:
①如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值
②如果return的数据类型是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的值就是在finally中改变后的该属性的值

3.finally块唯一不执行的情况是什么:

解一: try之前异常,系统报错,当然不会执行finally
解二 : try 或 catch块中,如果有exit()会使程序提前退出
font color=#999AAA >该处使用的url网络请求的数据。

4、Throwable的成员方法:

Java中的异常处理
Java中的异常处理
Java中的异常处理

5、编译时异常和运行时异常的区别:

Java中的异常分为两大类:
编译时异常和运行时异常,也被称为受检异常和非受检异常
异常处理之throws:
throws 异常类名;
注意:这个格式是跟在方法的括号后面的
编译时异常必须要进行处理,两种方案:try…catch或者throws,如果采用throws这种方案,将来谁调用谁处理。
运行时异常可以不处理,出现问题后,需要我们回来修改代码。
自定义异常:

Public class 异常类名 extends Exception{
	无参构造;
	带参构造;
	}

throws和throw的区别:Java中的异常处理


异常处理原则:

提示:这里对文章进行总结:
异常处理与性能
异常只能用于非正常情况
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型
需要对捕获的异常做处理

上一篇:九:异常


下一篇:第 20 节课 集合收尾,异常