一、异常:
(1)错误:
错误是绝症,只能修改代码;
(2)异常
编译时期异常Exception是小病,能够处理;
运行时期异常RuntimeException不能处理,也须要修改代码;java
package com.oracle.demo01; //错误:绝症(只能修改代码) //异常:编译时期异常Exception 小病(能够处理);运行时期异常RuntimeException不能处理 public class demo01 { public static void main(String[] args) { //数组长度过大,会产生内存溢出错误 //int[] arr = new int[999999999]; int[] arr = new int[999]; //异常 int[] arr1 = new int[5]; int i = get(arr1); System.out.println(i); } public static int get(int[] arr){ int i = arr[5]; return i; } }
效果以下:程序员
(3)throw new Exception();抛出异常对象;
throws Exception;抛出异常类;
(4)try{可能会发生异常的语句
}catch(可能会发生异常的类名 变量名){
异常的处理方式
}finally{
无论发不发生异常都会执行的语句
释放资源的语句
}数组
package com.oracle.demo01; /*try{ 可能会发生异常的语句 }catch(可能会发生异常的类名 变量名){ 异常的处理方式 }finally{ 无论发不发生异常都会执行的语句 释放资源的语句 }*/ public class demo02 { public static void main(String[] args) { int[] arr = {1,2,2,2}; try{ int i = get(arr); System.out.println(i); }catch(NullPointerException ex){ System.out.println(ex); }catch(ArrayIndexOutOfBoundsException ex){ System.out.println(ex); }finally{ System.out.println("finally执行语句"); } System.out.println("你好呀"); } public static int get(int[] arr) { if(arr == null){ throw new NullPointerException("数组为空"); } if(arr.length == 0){ throw new ArrayIndexOutOfBoundsException("数组长度为零"); } int i = arr[arr.length-1]; return i; } }
效果以下:oracle
(5)对于RuntimeException运行时期异常:不须要throws,也不须要try,catch处理
一旦出现,程序员修改代码;
对于编译时期异常Exception及Exception的子类(不包括RuntimeException)
2种处理方式:一个throws,一个是try/catchspa
package com.oracle.demo02; //RuntimeException运行时期异常:不须要throws,也不须要try,catch处理 // 一旦出现,程序员修改代码; //对于编译时期异常Exception及Exception的子类(不包括RuntimeException) // 2种处理方式:一个throws,一个是try/catch public class demo01 { public static void main(String[] args) { int[] arr = null; try { System.out.println(get2(arr)); } catch (Exception e) { System.out.println(e.getMessage()); } } public static int get(int[] arr){ if(arr == null){ throw new NullPointerException("数组为空"); } return arr[1]; } public static int get2(int[] arr) throws Exception { if(arr == null){ throw new Exception("数组为空"); } return arr[1]; } }
效果以下:3d
(6)1当父类方法有异常时,子类继承重写后能够不抛异常,
也能够抛异常,该异常不得超过父类异常
2当父类方法没有异常,子类重写该方法不得抛出异常
若是该方法调用了一个抛出编译异常的方法,只能try,catch;code
package com.oracle.demo02; //1当父类方法有异常时,子类继承重写后能够不抛异常, //也能够抛异常,该异常不得超过父类异常 //2当父类方法没有异常,子类重写该方法不得抛出异常 //若是该方法调用了一个抛出编译异常的方法,只能try,catch; import java.text.ParseException; public class fu { public void f() throws ParseException{} //重载不会 public void f(String a){}; } class zi extends fu{ public void f(){ try { z(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; public void z() throws Exception{} }