标签:java异常 javaexception exception顺序
先普及下什么是异常:
异常就是程序非正常结束,不按我们的处理逻辑执行下去了 导致程序中断的情况。
一般来说,一开始写程序犯错基本上就是 空指针NullPointerException 数组越界 参数异常
其实Java添加异常处理机制 是为了把异常和正常代码隔离开来,保证程序的健壮性和完整性
首先看段代码
public static void main(String[] args){
try {
ArrayList<Integer> nin = new ArrayList<Integer>();
nin.add(312);
nin.add(3122);
nin.add(3112);
System.out.println(nin.get(8));
} catch (Exception e) {
System.out.println("Exception");
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException");
e.printStackTrace();
}
}哎....我去 代码会编译不过去。
public static void main(String[] args) throws NullPointerException {
show();
}
public static int[] nu = null;
public static void show() {
System.out.println(doSomething());
try {
System.out.println(nu[3]);
} catch (NullPointerException e) {
System.out.println("NullPointerException -");
e.printStackTrace();
}catch (Exception e) {
System.out.println("Exception -");
e.printStackTrace();
}
}输出结果:
NullPointerException -
java.lang.NullPointerException
at com.tz.TestException.show(TestException.java:26)
at com.tz.TestException.main(TestException.java:16)
原来Java中catch是按顺序往下匹配的,而一旦catch到异常符合要求,就会直接跳出去,有finally就会执行它,没有则直接跳出去,不再执行任何东西,所以catch异常时应该有个顺序的。
catch代码块应该是 从小范围的到大范围的异常 顺序往下写的。
public static int[] nu = null;
public static void show() throws NullPointerException {
try {
System.out.println(nu[3]);
}catch (Exception e) {
System.out.println("");
e.printStackTrace();
}
}下面这段代码
Exception -
java.lang.NullPointerException
at com.tz.TestException.show(TestException.java:26)
at com.tz.TestException.main(TestException.java:16)
public static int[] nu = null;
public static void show() {
System.out.println(nu[3]);
try {
}catch (Exception e) {
System.out.println("Exception -");
e.printStackTrace();
}
}下面这段代码
Exception in thread "main" java.lang.NullPointerException
at com.tz.TestException.show(TestException.java:23)
at com.tz.TestException.main(TestException.java:16)
所以try......catch的是它自己囊括的代码出现的异常,方法上throws异常时方法里面的异常;
try catch里面的异常 由它抛出,不在catcha里面代码出现的异常 由方法上的throws Exception抛出;多个catch异常之间,如果存在父子关系,是先写子异常在上面,父级异常在下面,这种编译才不会出错;
Java异常结构图如下:

由上面可以看出 Throwable分两种 一种是异常 一种是错误(这种情况程序基本就跪了 恢复不了)
Java异常又分为两种 checked异常(编译时异常)和Runtime异常 (运行时异常)
异常处理规则:
try 捕获异常 --> catch 处理异常 或者自定义异常逻辑处理代码 --> finally 结束时操作的事
怎么抛出异常?
1. try....catch
2. 方法上 throws 异常
3. 代码块里面 throw new XXXException
4. 代码块里面 throw new XXXException 框架统一处理捕获到的异常信息
处理抛出方式:
(1) 如果你很明确的知道怎么处理异常或者可能会出现什么异常 , 应该用try....catch 的方式抛出异常并写下处理异常代码
(2) 如果不知道有什么异常, 那就在方法上抛出异常,多个异常逗号隔离开就好了
注意: Java 在对(RunTimeException)运行时异常 就算你自己不捕获抛出处理 它也会帮你抛出来 其实.....现在Java7开始项目大多数是把异常抛出来最顶部 也就是控制层C再处理的
本文出自 “JTR” 博客,请务必保留此出处http://10229180.blog.51cto.com/10219180/1886167
标签:java异常 javaexception exception顺序
原文地址:http://10229180.blog.51cto.com/10219180/1886167