java异常

Error和Throwable类,面试遇到不会。

java把所有的异常进行归纳。

Throwable类下层有两个子类,一个是Exception,一个是Error。

所有异常的父类是Throwable。

Exception用来描述程序逻辑级别的错误,error抛出的系统级别的错误,比如说虚拟机出错。

Exception表示由于网络故障、文件损坏、设备错误、用户输入非法等情况导致的异常;

而Error表示java运行时环境出现的错误,例如JVM内存资源耗尽。

发生了Error,修改算法(升级硬件不现实)。

异常处理机制

异常案例如下所示:

public class Try_CatchDemo {
public static void main(String[] args) {
System.out.println("程序开始了");
String string = null;
System.out.println(string.length());
System.out.println("程序结束了");
}
}

string是null,抛出空指针异常。虚拟机会检测有没有抛出异常(有没有对异常进行处理),就向系统抛出异常。

虚拟机会直接kill程序。这是闪退。

异常,无法避免异常,但是我们可以去处理它。

写异常是有顺序的,当异常之间存在继承关系的时候,应该将子异常放在父异常上面。

package exception;
/**
 * 异常处理机制中的try-catch
 * 语法定义:
 * try{
 * 可能出现异常的代码片段
 * }catch(XXXException e){
 * 捕获try中出现的XXXException后处理操作代码
 * 
 * @author 小明
 *
 */
public class Try_CatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try{
            String string = "";
            //String string = null;
            //String string = "a";
            System.out.println(string.length());
            System.out.println(string.charAt(0));
            System.out.println(Integer.parseInt(string));
            /*
             * 需要捕获下标异常
             */
            /**
             * 在try块中出错语句以下的代码都不会被执行
             */
            System.out.println("!!!!X");
        }catch(NullPointerException e){
            System.out.println("出现了空指针异常");
        }catch(StringIndexOutOfBoundsException e){
            System.out.println("出现了字符串下标异常");
            /**
             * 应当有一个好习惯,在最后一个catch出捕获Exception
             * 防止一个未捕获的异常导致程序中断
             */
        }catch(Exception e){
            
        }
        
        System.out.println("程序结束了");
    }
}

运行结果如下所示:

空指针异常被忽略。

 

posted @ 2018-09-04 15:53  寒潭渡鹤影  阅读(110)  评论(0编辑  收藏  举报