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("程序结束了"); } }
运行结果如下所示:
空指针异常被忽略。