首页 > 代码库 > 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学习第二十课(异常的应用和注意事项(三))