异常的特点
1.异常在java中以类的形式存在,都可以创建对象。
2.编译时异常和运行时异常,都发生在运行阶段。
异常的类型
1.编译时异常(受控异常、受检异常)
一般发生的概率较高(需要在运行之前进行预处理)
2.运行时异常(非受控异常、未受检异常)
一般发生的概率较低
java中异常的处理方式
1.在方法声明的位置上,使用throws关键字,抛给上一级
2.使用try…catch语句进行异常的捕获
catch异常的方法:
1.getMesage 获取异常的简单描述
2.printStackTrace() 打印异常堆栈追踪信息(常用)
注意:捕获异常后,后续代码继续执行,这就体现出java的健壮性
关于try…catch中的finally子句
1.在finally子句中代码是最后执行的,并且是一定会执行的,而且finally子句必须和try一起出现
2.通常在finally语句块中完成资源的释放
面试题
问:以下程序的输出结果是什么?
答:输出结果:100
Tip:这里关系到java本身的特点:1>逐行执行,2>return语句在方法最后执行
public class FinallyTest {
public static void main(String[] args) {
int result=m();
System.out.println(result);
}
public static int m(){
int i=100;
try{
return i;//return是一定最后执行的
}finally {
i++;//这个先执行,return后执行,但是还是输出100
}
}
}
final finally finalize的区别
final:是一个关键字,表示最终的不变的
finally:是一个关键字,在异常处理机制中与try联用,
在finally子句中代码是最后执行的,并且是一定会执行的
finalize: finalize()是Object中的一个方法,作为方法名出现,是个标识符
自定义异常类
固定写法:
1.编写一个类继承Exception或者RuntimeException
2.提供两个构造方法,无惨、有参(带String参数)
(注意:子类抛出的异常只能比父类少,不能多)
例如:
//自定义异常类
class ExceptionTest extends Exception{
public ExceptionTest() {
}
public ExceptionTest(String s) {
super(s);
}
}
//测试类
public class DiyExceptionTest{
public static void main(String[] args) {
ExceptionTest e1=new ExceptionTest("用户名不能为空");
//打印异常信息
e1.printStackTrace();
}
}