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(“到点下课”);
- }
- }
- }
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());//用多态就可以解释为什么不能抛其他的异常
- }
- }
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,不能抛
- }
- }
interface in
{
abstract void show();
}
class BB implements in
{
public void show()//throws Exception,因为父类没有出现异常,子类就不能抛
{
//如果真的出现异常,那么只能try,不能抛
}
}
异常到此就结束了,内容很多,自己需要多复习,消化才是。。。