异常
1.异常分类
2.try-catch-finally处理异常
- e.getMessage() 打印出栈信息
- catch可以有多个,但父类放在子类下面,(先子后父)
- JDK7之后,可以写到一个catch中,用“|”进行分隔
- finally在最后一个catch后面
- try里面的变量外部是无法进行访问的
- finally语句的内容在try的return 语句之前执行,但是,return还是先执行,只不过是后打印而已
- 如果不让finally语句执行,则要推出Java虚拟机(在try语句中加上system.exit(0);)
-
int i=m1(); System.out.println(i);//10 public void m1(){ try{ return i;//因为没有catch,所以不用在try的外面再写一个return } finally{ i++; System.out.println("finally中的值为:"+i);//11 }
3.final、finally、finalize的区别
- final:可以修饰类,不能被继承,修饰的方法不能被重写,修饰的变量只能赋值一次
- finally:是try的一个语体,不能单独使用,一定会执行
- finalize:是object中的一个方法,当没有引用指向这个对象时,有对象的垃圾回收器在回收之前调用此方法
4.自定义异常
- 继承Exception
- 抛出一次非法用户名异常,throw new IllegalException("用户不小于6”)
- 然后进行throws抛出
- 再在主类中进行try-catch进行异常处理
-
class ExceptionTest01 extends Exception { private static final long serialVersionUID = 3977175901516018486L; public ExceptionTest01() { super(); } public ExceptionTest01(String s) { super(s); } }
-
class ExceptionTest02 { public void Test(String name) throws ExceptionTest01{ if(name.length()<6) { throw new ExceptionTest01("字节小于6"); } } }
5.throws与throw的区别
throws:用在方法声明的后面,跟的是异常类名,可以跟多个异常类名,用逗号隔开,表示抛出异常,由该方法调用者进行处理
throw:用在方法体中,跟的是一个异常类对象名,表示抛出异常由方法体内的语句处理
使用throws关键字并不是真正的处理异常,而是交给其调用者去处理,并不是说使用throws不好。而是使用throws将问题暴露出来由其调用者处理