一、异常分为:运行时异常和非运行时异常,又叫做不检查异常和检查异常。

二、运行时异常

——(在这里主要讲一下运行时异常,因为大家在编码过程中基本都是忽略的,非运行时异常编译器都会要求编码者处理)
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!");

}}