1 /* 2 * 异常分为编译异常和运行时期异常 3 * 编译异常: 调用了抛出异常的方法,不处理编译失败 (try throws) 4 * 运行异常: 抛出的异常是RuntimeException类,或者是他的子类 5 * 6 * 运行异常的特点: 7 * 方法内部抛出的异常是运行异常, new XXXException 8 * 方法的声明上,不需要throws语句,调用者,不需要处理 9 * 设计原因: 10 * 运行异常,不能发生,但是如果发生了,程序人员停止程序修改源代码 11 * 12 * 运行异常: 一旦发生,不要处理,请你修改源代码, 运行异常一旦发生,后面的代码没有执行的意义 13 */ 14 public class RuntimeExceptionDemo { 15 public static void main(String[] args) { 16 double d = getArea(1); 17 System.out.println(d); 18 } 19 20 /* 21 * 定义方法,计算圆形的面积 22 * 传递参数0,或者负数,计算的时候没有问题 23 * 但是,违反了真实情况 24 * 参数小于=0, 停止程序,不要在计算了 25 */ 26 public static double getArea(double r){ 27 if(r <= 0) 28 throw new RuntimeException("圆形不存在"); 29 return r*r*Math.PI; 30 } 31 32 33 public static void function(){ 34 int[] arr = {1,2,3}; 35 //对数组的5索引进行判断,如果5索引大于100,请将5索引上的数据/2,否则除以3 36 //索引根本就没有 37 if(arr[5] > 100){ 38 arr[5] = arr[5]/2; 39 }else{ 40 arr[5] = arr[5]/3; 41 } 42 } 43 }
1 /* 2 * Throwable类中的方法 3 * 三个方法,都和异常的信息有关系 4 * String getMessage(); 对异常信息的详细描述 5 * String toString(); 对异常信息的简短描述 6 * void printStackTrace(); 将异常信息追踪到标准的错误流;虚拟机JVM的默认调用方法;推荐用 7 */ 8 public class Demo03 { 9 public static void main(String[] args) { 10 try { 11 function(); 12 } catch (Exception e) { 13 //System.out.println(e.getMessage()); 14 //System.out.println(e.toString()); 15 e.printStackTrace(); 16 } 17 } 18 public static void function()throws Exception{ 19 throw new Exception("异常了"); 20 } 21 }
自定义异常
1 /* 2 * 自定义异常 3 * 继承Exception,或者继承RuntimeException 4 * 构造方法,super将异常信息传递给父类 5 */ 6 public class Demo04{ 7 public static void main(String[] args) { 8 System.out.println(getAvg(99,-45,75)); 9 } 10 public static int getAvg(int...source){ 11 int sum=0; 12 for(int s:source){ 13 if(s<0) 14 throw new fushuException("负数异常!"+s); 15 sum += s; 16 } 17 return sum/source.length; 18 } 19 } 20 class fushuException extends RuntimeException{ 21 public fushuException(String s){ 22 super(s); 23 } 24 public fushuException(){} 25 }