1) Exception的printStackTrace(),getmessage(),toString()方法之间的区别与联系
printStackTrace():输出第一行包含此对象的toString()方法的结果,剩余行表示以前由方法fillInStackTrace()记录的数据
getMessage():返回此Throwable 或者Exception的详细消息字符串
toString():如果此Throwable或者Exception对象是利用非空详细消息字符串创建的,则结果是三个字符串的串联,1)此对象的实际类的名称2)“:”3)此对象的getMessage()方法的结果。
2)Checked Exception 必须在编译期间就try{ }catch()捕获,否则编译不会通过
3)finally的执行
遇到unchecked Exception ,finally均会被执行,遇到System.exit(0),finally将不会被执行
如果在catch代码块中return 一个基础变量,finally()中的操作修改不了返回值
如果在catch代码块中return一个对象,finally()针对对象的修改能修改返回值
如果finally中也有return语句,try{} catch{} finally{} 会在finnally的return处结束
int method()
{
int a=10;
try{a++;}
finally{
a++;
}
return a;
}
函数结果返回值12
int method()
{
int a=10;
try{a++;
return a;
}
finally{
a++;
}
}
函数结果返回值11int method()
{
int a=10;
try{a++; throw new Exception();}
catch(Exception e)
{
return a;
}
finally{
a++;
}
}
函数结果返回值11int method()
{
int a=10;
try{a++;
return a;
}
finally{
a++;
return a;
}
}
函数结果返回值124) checked exception 是java.lang.Exception的子类,unchecked Exception是java.lang.RuntimeException的子类
5) try{} catch(){}finally{} finally{}代码块不能出现在catch{}块之前 ,并且catch到的Exception必须依次排放,子类在前,父类在后否则会compile Error,没有子父类关系的可不必计较前后。
6)常见的RuntimeException
ArrayIndexOutOfBoundsException,IndexOutOfBoundsException,ClassCastException,IllegalArgumentException,IllegalStateException,NullPointerException,NumberFormatException,NumberFormatException