//异常:感冒,发烧,是可以治 //错误:癌症,艾滋,是不能治的,一旦发生错误,直接修改代码 public class Demo01 { public static void main(String[] args) { int[] arr={1,2,3,4,5}; int i=get(arr); System.out.println(i); //int[] arr=new int[999999999]; } public static int get(int[] arr){ int i=arr[5]+1; return i; } }
抛出异常throw public class Demo02 { public static void main(String[] args) throws Exception{ int[] arr={}; int i=get(arr); System.out.println(i); } //throw new 异常类名() //throws 声明异常 public static int get(int[] arr) throws Exception{ if(arr.length==0){ throw new Exception("你传入的数组为空的数组"); } if(arr==null){ throw new Exception("你传入的数组为null"); } int i=arr[arr.length-1]; return i; } }
public class Demo05 { public static void main(String[] args) { } } //如果父类方法抛异常,子类继承 如果子类也抛异常,抛的异常必须小于等于父类抛的异常 //如果父类方法没抛异常,子类不许抛异常 //如果父类方法没抛异常 子类继承方法里有抛异常的方法,只能用try catch class Fu{ public void eat() throws Exception{ } } class Zi extends Fu{ } 捕获异常try…catch…finally /*try{ * 可能会产生异常的语句 * }catch(可能会产生的异常名 变量名){ * 返回该类异常 * }finally{ * 一定会执行的代码 * }*/ public class Demo03 { public static void main(String[] args){ int[] arr={}; try{ int i=get(arr); System.out.println(i); }catch(Exception ex){ System.out.println(ex); }finally{ System.out.println("一定会执行的代码"); } System.out.println("Hi"); } //throw new 异常类名() //throws 声明异常 public static int get(int[] arr) throws Exception{ if(arr.length==0){ throw new Exception("你传入的数组为空的数组"); } if(arr==null){ throw new Exception("你传入的数组为null"); } int i=arr[arr.length-1]; return i; } }
try…catch…finally异常处理的组合方式 /*try{ * 可能会产生异常的语句 * }catch(可能会产生的异常名 变量名){ * 返回该类异常 * }catch(可能会产生的异常名 变量名){ * 返回该类异常 * }finally{ * 一定会执行的代码 * }*/ public class Demo04 { public static void main(String[] args){ int[] arr={}; try{ int i=get(arr); System.out.println(i); }catch(ArrayIndexOutOfBoundsException ex){ System.out.println(ex); }catch(NullPointerException ex){ System.out.println(ex); }finally{ System.out.println("一定会执行的代码"); } System.out.println("Hi"); } //throw new 异常类名() //throws 声明异常 public static int get(int[] arr) throws ArrayIndexOutOfBoundsException,NullPointerException{ if(arr.length==0){ throw new ArrayIndexOutOfBoundsException("你传入的数组为空的数组"); }if(arr==null){ throw new NullPointerException("你传入的数组为null"); } int i=arr[arr.length-1]; return i; } }
运行时期异常 运行时期异常的特点: 方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常 运行时期异常一旦发生,需要程序人员修改源代码. public class FuShu extends RuntimeException{ public FuShu(){ } public FuShu(String str){ super(str); } } 异常中常用方法 public class Demo06 { public static void main(String[] args) { int[] arr={}; int i=0; try{ i=get(arr); System.out.println(i); }catch(Exception ex){ //红字打印 ex.printStackTrace(); //异常简短描述 //String e=ex.getMessage(); //详细消息字符串 //String e=ex.toString(); //System.out.println(e); } } public static int get(int[] arr) throws Exception{ if(arr.length==0){ throw new Exception("你传入的数组为空的数组"); } int i=arr[arr.length-1]; return i; } }
自定义异常 public class Demo07 { public static void main(String[] args) { int[] arr={-1,2,3}; double score=avg(arr); System.out.println(score); } public static double avg(int[] arr){ int sum=0; for(int i:arr){ if(i<0){ throw new FuShu("你传入的数组中有负数"+i); } sum+=i; } return sum/arr.length; } }