前几天写代码的时候,遇到一个需求,保存的时候如果重名则不执行保存,并抛出异常。但是当我抛出的不是运行时异常的时候,这个异常就需要一层层的捕获。就像下面这样:
ExceptionTest .java
package com.lz.utils;
public class ExceptionTest {
public static void testRunTimeException() throws Exception {
//throw new MyRunTimeException("运行时的异常!");
throw new Exception();
}
}
Test.java
package com.lz;
import com.lz.utils.ExceptionTest;
import com.lz.utils.GetDBPhysicDesignTxt;
public class Test {
public static void main(String[] args) throws Exception {
ExceptionTest.testRunTimeException();
}
}
或者这样
ExceptionTest.java
package com.lz.utils;
public class ExceptionTest {
public static void testRunTimeException() {
//throw new MyRunTimeException("运行时的异常!");
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但是从一个程序员的角度,考虑,重名属于运行后进行操作才产生的异常,正常情况下应该抛出运行时异常,并且公司我最膜拜的架构师【据说是离神最近的男人】是已经封装好了异常,自定义运行时异常,因此就使用了运行时异常实现:
代码如下:
MyRunTimeException.java
自定义的运行时异常类:
package com.lz.utils;
public class MyRunTimeException extends RuntimeException {
public MyRunTimeException(String info) {
super(info);
}
}
ExceptionTest.java
package com.lz.utils;
public class ExceptionTest {
public static void testRunTimeException() {
throw new MyRunTimeException("运行时的异常!");
}
}
使用自定义运行时异常后,发现省事好多,异常并不需要一级一级的向上抛出或者在当前类捕获。
借助这个案例分析了下运行时异常的特点:
- A: 运行时期异常的概述:
- RuntimeException和他的所有子类异常,都属于运行时期异常。
NullPointerException,ArrayIndexOutOfBoundsException等都属于运行时期异常.- B:运行时期异常的特点
- a:方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常。
- b:运行时期异常一旦发生,需要程序人员修改源代码。
设计原因:
运行异常,不能发生,但是如果发生了,程序人员停止程序修改源代码
运行异常: 一旦发生,不要处理,请你修改源代码,运行异常一旦发生,后面的代码没有执行的意义
这就是运行时异常的总结,就问还有谁。