一、异常分为:运行时异常和非运行时异常,又叫做不检查异常和检查异常。
二、运行时异常
——(在这里主要讲一下运行时异常,因为大家在编码过程中基本都是忽略的,非运行时异常编译器都会要求编码者处理)
1。运行时异常是.RuntimeException类型或者其子类;比如常见的空指针异常,数组越界异常,算数运算异常,格式转换异常等。
2。一段代码出现了运行时异常,那么异常交给虚拟机处理,虚拟机会把异常一直往上抛;1)如果代码对异常有所捕获处理,那么代码会继续运行,只是异常被代码处理了;2)如果代码没有对异常处理,那么虚拟机会一直往上抛,如果是多线程,则会由Thread.run()抛出;如果是单线程,则会被main()抛出,导致整个java程序终止,程序随之退出。
即,如果出现了运行时异常,没有捕获处理的话,要么线程终止,哟啊么导致程序退出。
三、编码建议
在编码时,应该尽量考虑运行时异常的出现情况;考虑周全,不然导致线程或者整个程序挂掉,那就不好了~~
四、常见的运行时异常
常见 RuntimeException :
ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常
ClassCastException 试图将对象强制转换为不是实例的子类时,抛出该异常
IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数
IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出
NoSuchElementException 表明枚举中没有更多的元素
NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常
五、几段代码
1.
public class RunTimeExceptionTest {
private static String e;
private static void test() {
e.getBytes();
}
/*
* 运行时异常,也可以捕获并处理;只是通常不建议去捕获处理
*
*/
public static void main(String[] args) {
try {
test();
} catch (Exception e) {
System.out.println("runTime Exception ..." + e.getStackTrace());
}
System.out.println("end!");
}}
2.public class RunTimeExceptionThreadOver {
private static String e;
private static void test() {
Thread thread = new Thread() {
@Override
public void run() {
/*
* will throw runtimeException,or may you deal this exception.
* */
System.out.println(e.getBytes());
/*
* if not deal exception,then the code flowing will not be executed.
* */
System.out.println("thread end!");
}
};
try {
thread.start();
} catch (Exception e) {
}
}
public static void main(String[] args) {
try {
test();
} catch (Exception e) {
System.out.println("thread runtime exception!");
}
System.out.println("end!");
}}