文章目录
一、异常
1、异常体系
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的成员方法:
5、编译时异常和运行时异常的区别:
Java中的异常分为两大类:
编译时异常和运行时异常,也被称为受检异常和非受检异常
异常处理之throws:
throws 异常类名;
注意:这个格式是跟在方法的括号后面的
编译时异常必须要进行处理,两种方案:try…catch或者throws,如果采用throws这种方案,将来谁调用谁处理。
运行时异常可以不处理,出现问题后,需要我们回来修改代码。
自定义异常:
Public class 异常类名 extends Exception{
无参构造;
带参构造;
}
throws和throw的区别:
异常处理原则:
提示:这里对文章进行总结:
异常处理与性能
异常只能用于非正常情况
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型
需要对捕获的异常做处理