Error类包括一些严重的程序不能处理的系统错误类,如内存溢出、虚拟机错误、栈溢出等。这类错误一般与硬件有关,与程序本身无关,通常由系统进行处理,程序本身无法捕获和处理。
1)OutOfMemoryError内存溢出一般是出现在申请了较多的内存空间没有释放的情形。
//java.lang.OutOfMemoryError -Xmx150m try { byte[] b = new byte[1024*1024*600]; } catch (OutOfMemoryError e) { e.printStackTrace(); }
java.lang.OutOfMemoryError: Java heap space
2)java.lang.StackOverflowError
堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。
public static void main(String[] args) { method(); } public static void method() { while (true) { method(); } }无限次的递归调用出现
Exception in thread "main" java.lang.StackOverflowError
常见的运行时异常:
try { String str = new String("AA"); str = null; System.out.println(str.length()); } catch (NullPointerException e) { e.printStackTrace(); System.out.println("出现空指针的异常了"); } try { Object obj = new Date(); String str = (String) obj; } catch (ClassCastException e) { System.out.println("出现类型转换的异常了"); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("处理完异常后的逻辑"); } try { int i = 10; System.out.println(i / 0); } catch (ArithmeticException e) { System.out.println("算术异常"+e.getMessage()); } try { int[] i = new int[10]; System.out.println(i[-10]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组下标越界的异常!"); }
连接一个不存在的URL
FileInputStream fis = null; try { fis = new FileInputStream(new File("hello1.txt")); int b; while ((b = fis.read()) != -1) { System.out.print((char) b); } } catch (FileNotFoundException e1) { System.out.println("文件找不到了!"); } catch (IOException e1) { System.out.println(e1.getMessage()); } finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } }