异常类
package com.abc; /* * * 系统提供的异常类,不可能完全满足我们要求, * 年纪大小于200,所以要自己动手写 * * 方法1,继承Exception:一旦throw就要马上处理 * 方法2,继承RuntimeException,不用处理或不用马上处理,一般自定义用这种 * * 调用自定义异常时一般是在可能产生的异常的地方(比如数据的判断后 if(uage>200)), * 使用关键字throw new 自定义异常; * */ public class MyException extends RuntimeException{ public MyException(){ } public MyException(int age){ System.err.println("年纪必须在200岁以内,你的年纪"+age+"有误"); } }
package com.abc; import java.util.Scanner; public class InputA { public static void main(String[] args) { int m = 0; for(int i = 0 ;i<5;i++){ System.out.println("请输入第"+(i+1)+"个数"); try{ System.gc(); Scanner sc = new Scanner(System.in); int j = sc.nextInt();//如果这句发生了异常,m+=j是不会执行的 m += j; }catch(Exception e){ System.out.println("第"+(i+1)+"个数输入错误"); i--; }finally{ System.out.println("无论异常是否发生,这里代码都会执行,特别是语句中有return的情况"); //finally主要用于资源的释放,比如try中打开了文件,数据库打开等 //finally会在一种情况下执行 System.exit(0);//程序退出 } } System.out.println("最终结果为"+m); } }
package com.abc; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.InputMismatchException; import java.util.Scanner; /* * 异常是程序运行过程中出现的一点小瑕疵,如果处理得当,程序就会继续运行, * 如果不处理,异常就会变成错误,造成程序的退出。 * * 如何处理:在可能产生异常的代码周围使用try{可能产生异常的代码 * }catch(可能产生的异常的对象){ * 异常处理的代码 * } * * 怎么知道哪一段会产生异常: * 1.经验, * 2.系统提示 * * * 异常处理中经常程序员喜欢用一个Exception e 来处理所有的异常. * 因为有的语句可能产生多种异常,比如产生ArithmeticException,ArrayIndexOutOfBoundsException * 每种异常产生后,处理的方式是不同的,如果都写在一个catch中将非常不方便 * * 所以建议少用Exception,或者最后用exception * * 多catch处理: * 处理时注意,子类应写在父类之前,即范围小的异常处理写在最前面,最后一个是Exception */ public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int a [] = new int[]{1,2,3,4,5}; try{ System.out.println(a[5]/1);//如果有异常就会catch抓到 }catch(ArithmeticException aa){ aa.printStackTrace();//这样算是处理了 }catch(ArrayIndexOutOfBoundsException ar){ ar.printStackTrace();//这样也算是处理了 }catch(Exception e){ e.printStackTrace();//处理异常,一定处理,不处理会让人理解为程序正常运行完成了 } System.out.println("我是最后一句"); Scanner sc = new Scanner(System.in); System.out.println("请输入一个整形"); int i = 0; try{ i = sc.nextInt(); }catch(InputMismatchException in){ System.out.println("脑残,整数都输不对"); }catch(Exception e){ System.out.println("主治医生"); } System.out.println("你输入的数字是"+i); } /* * 请用户输入十个整数,然后输出结果,如果用户输入的不是整数,提示其再次输入 * 用异常处理做 * public class Input(){ * * * public int getInt(){ * * } * } * */ }
package com.abc; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; public class Test2 { /* * 当一个方法A不能正确或更好处理自己代码中的异常时可以选择throws, * 那么当别外一个方法比如B,调用这个方法A时,B就要做出try...catch的处理, * 如果B做不到,可以再抛给调用 B的方法,如此反复下去可以到main方法 * 异常无论怎么去throws最终一定要在main解决,如果main不解决而是throws 那么异常变会变error,所 * 以开发中千万不要这么做 */ public static void main(String[] args) throws FileNotFoundException { A3 a = new A3(); a.a3(); } } class A1{ public void a1() throws FileNotFoundException { //当异常在村里处理不了的时候,转到乡里,throws出去 FileInputStream fis = new FileInputStream(new File("c:/a.txt")); } } class A2{ public void a2() throws FileNotFoundException{ A1 a = new A1(); a.a1(); } } class A3{ public void a3() throws FileNotFoundException{ A2 a = new A2(); a.a2(); } }