*异常的注意事项:
1,子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类。
2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集。
简单说:子类覆盖父类只能抛出父类的异常或者子类或者子集。
注意:如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛,就只能try .
*异常处理的原则:
1,函数内容如果抛出需要检测的异常,那么函数上必须要声明。
否则必须在函数内用trycatch捕捉,否则编译失败。
2,如果调用到了声明异常的函数,要么trycatch要么throws,否则编译失败。
3,什么时候catch,什么时候throws 呢?
功能内容可以解决,用catch。
解决不了,用throws告诉调用者,由调用者解决 。
4,一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。
内部又几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
*异常的分类:
1,编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系。
这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。
这样的问题都可以针对性的处理。
2,编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类。
这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者的原因导致的而或者引发了内部状态的改变导致的。
那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修正。 所以自定义异常时,要么继承Exception。要么继承RuntimeException。
*throws 和throw的区别
1,throws使用在函数上
throw使用在函数内
2,throws抛出的是异常类,可以抛出多个,用逗号隔开。
throw抛出的是异常对象。
1 class BlueException extends Exception{ 2 public BlueException(String message){ 3 System.out.println(message); 4 } 5 } 6 7 class BreakException extends Exception{ 8 public BreakException(String message){ 9 System.out.println(message); 10 } 11 } 12 13 class HanderException extends Exception{ 14 public HanderException(String message){ 15 System.out.println(message); 16 } 17 } 18 19 class Computer{ 20 private int status; 21 public void work(int status,String name) throws BreakException, BlueException{ 22 if(status==1){ 23 throw new BlueException("电脑蓝屏了,请重启"); 24 }else if(status==2){ 25 throw new BreakException("电脑彻底,请给客服打电话……"); 26 }else{ 27 System.out.println("正常上课,老师姓名为:"+name); 28 } 29 } 30 public void reset(){ 31 System.out.println("Computer reset success......"); 32 } 33 } 34 /** 35 * 编译时候异常必须处理,运行时候异常可处理也可不处理 36 * @author sunfei 37 * 38 */ 39 class Teacher{ 40 private String username; 41 private Computer computer; 42 public Teacher(String useranme,Computer computer){ 43 this.username=useranme; 44 this.computer=computer; 45 } 46 public void teacher(int status) throws HanderException{ 47 try { 48 this.computer.work(status, this.username); 49 this.computer.reset(); 50 } catch (BreakException e) { 51 System.out.println(e.toString()); 52 this.replace(); 53 throw new HanderException("客服正在赶来……"); 54 } catch (BlueException e) { 55 System.out.println(e.toString()); 56 go(); 57 } 58 } 59 60 public String getUsername() { 61 return username; 62 } 63 public void setUsername(String username) { 64 this.username = username; 65 } 66 public Computer getComputer() { 67 return computer; 68 } 69 public void setComputer(Computer computer) { 70 this.computer = computer; 71 } 72 public void go(){ 73 System.out.println("重启之后继续……"); 74 } 75 public void replace(){ 76 System.out.println("换人之后继续……"); 77 } 78 } 79 80 public class Example2 { 81 public static void main(String[] args) throws HanderException { 82 Computer computer = new Computer(); 83 Teacher t = new Teacher("张三",computer); 84 Scanner scanner = new Scanner(System.in); 85 System.out.println("请输入状态"); 86 int status = scanner.nextInt(); 87 System.out.println(t.getUsername()); 88 while(status!=0){ 89 t.teacher(status); 90 status=scanner.nextInt(); 91 } 92 } 93 }
原文:http://www.cnblogs.com/sunfie/p/4787156.html