首页 > 代码库 > JAVA学习第二十课(异常的应用和注意事项(三))
JAVA学习第二十课(异常的应用和注意事项(三))
十、异常的应用
import java.util.Random; import javax.rmi.CORBA.Stub; /* *老师用电脑上课 *用面向对象思考问题 *问题设计两个对象 *老师,电脑 * *可能发生的问题: *电脑蓝屏、电脑冒烟 */ class Lan extends Exception//蓝屏 { Lan(String problem) { super(problem); } } class Fir extends Exception//冒烟 { Fir(String problem) { super(problem); } } class No extends Exception { No(String problem) { super(problem); } } class Computer {//定义一个电脑运行的状态 private int stu = 3; //stu为1正常,2是蓝屏,3是冒烟 //stu = Random()%2+1; public void run()throws Lan,Fir { switch (stu) { case 2: throw new Lan("Computer is Lan!!!"); //此处就不用break了,因为已经抛出了 case 3: throw new Fir("Computer is Fir!!!"); case 1: System.out.println("Computer is running"); break; } } public void rest()//电脑重启 { stu = 0; System.out.println("Computer is rest"); } } class Teacher { private String name = null; private Computer C; Teacher(String name) { this.name = name; C = new Computer(); } public void lesson()throws Fir,No { try { C.run(); System.out.println(name+" teacher is teaching"); } catch(Lan a) { System.out.println(a.toString());//打印信息 C.rest(); lesson(); } catch(Fir b) { System.out.println(b.toString());//打印信息 test(); //能处理的已经处理了,处理不了的继续向外抛 //找人,对电脑进行维修,并告知学校并带原因,不告知,就是异常异常 throw new No("课时无法进行,"+b.getMessage()); } } public void test()//做练习 { System.out.println("student is exciesing"); } } public class Main { public static void main(String[] args) { Teacher B = new Teacher("BLF2"); try { B.lesson(); } catch (Fir e) { System.out.println("....."); } catch (No e) { System.out.println(e.toString()); } finally {//无论课上发生什么,但是还是会下课 System.out.println("到点下课"); } } }
/*
* 异常的转换,也就叫异常的封装
* 数据库
* class Nosuess extends Exception
* {
* .....//将异常转换,只需要告知出现异常
* }
* void adddata()throws Nosuess
* {
* 1.连接数据库
* try
* {
* 添加数据,出现异常 SQLException,但是添加数据的人不知道SQLException是什么
* }
* catch
* {
* 内部处理
* throw new Nosuess();
* }
* finally
* {
* 关闭数据库
* }
* }
* */
十一、异常的注意事项
(1).子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出子类的异常或者该异常的子类(见下述代码)
(2).如果父类抛出多个异常,那么子类只能抛出父类异常的子集
简单说:子类覆盖父类只能抛出父类的异常或者父类异常的子类或者子集
注意:如果父类的方法没有抛出异常,那么子类的覆盖时绝对不能抛
下述代码解释注意事项(1)
class A extends Exception {} class B extends A {} class C extends Exception {} class FU { void show()throws A { } } class Test { void method(FU f) { try { f.show(); } catch (A a) { } } } class ZI extends FU { void show()throws A,B //也可以不抛,但是不可以抛出其他异常 {} } public class Main { public static void main(String[] args) { Test t = new Test(); t.method(new ZI());//用多态就可以解释为什么不能抛其他的异常 } }
下述代码解释注意事项(2)
interface in { abstract void show(); } class BB implements in { public void show()//throws Exception,因为父类没有出现异常,子类就不能抛 { //如果真的出现异常,那么只能try,不能抛 } }
异常到此就结束了,内容很多,自己需要多复习,消化才是。。。
JAVA学习第二十课(异常的应用和注意事项(三))
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。