黑马程序员_异常练习

-------- android培训java培训、期待与您交流!--------
/*
练习1:
老师用电脑上课

考虑上课中出现的问题
比如问题是
  电脑蓝屏
  电脑冒烟

要对问题进行描述,要封装成对象

可是当冒烟发生后,出现讲课进度无法继续
出现了讲师的问题,课时计划无法完成
*/

class NoPlanException extends Exception//计划无法完成
{
	NoPlanException(String message)
	{
		super(message);
	}

}
class LanPingException extends Exception// 电脑蓝屏
{
	LanPingException(String message	)
	{
		super(message);
	}
}
class MaoYanException extends Exception// 电脑冒烟
{
	MaoYanException(String message)
	{
		super(message);
	}
}
class Computer//电脑对象
{
	private int state = 3;
	public void run() throws LanPingException,MaoYanException//抛出异常
	{
		if(state==2)
			throw new LanPingException("蓝屏");
	    if(state==3)
			throw new MaoYanException("冒烟了");
		
		System.out.println("电脑运行");
	}
	public void reset()
	{
		state = 1;
		System.out.println("电脑重启");
	}
}

class Teacher//教室对象
{
	private String name;
	private Computer cmpt;
	Teacher(String name)
	{
		this.name = name;
		cmpt = new Computer();
	}
	public void prelect()throws NoPlanException
	{
		try
		{
			cmpt.run();
		}
		catch (LanPingException e)//这个异常Teacher对象可以处理
		{
			System.out.println(e.toString());
			cmpt.reset();
		}
		catch(MaoYanException e)//这个异常Teacher对象处理不了(因为老师不会修电脑),抛可以让Teacher对象处理的异常
		{
			test();//要放在异常的上面,因为throw是函数的结束标识了
			throw new NoPlanException("课程无法继续 "+e.getMessage());
			
		}
		System.out.println("讲课");
	}
	public void test()
	{
		System.out.println("做练习");
	}
}
class ExceptionDemo5 
{
	public static void main(String[] args) 
	{
		Teacher t = new Teacher("毕老师");
		try
		{
			t.prelect();
		}
		catch (NoPlanException e)
		{
			System.out.println(e.toString());
			System.out.println("换老师");
		}
	}
}
/*
练习2.有一个圆形和长方形
都可以获取面积。对于面积如果出现非法的数值,视为是获取面积出现问题
问题通过异常来表示
现在对这个程序进行基本设计

正常流程代码和问题处理代码分离开来了
*/

class NoValueException extends RuntimeException//因为出现负数的时候,就要程序直接结束
{
	NoValueException(String message)
	{
		super(message);
	}
}

interface Shape//定义接口
{
	void getArea();//定义函数
}
class Rec implements Shape
{
	private int len,wid;
	Rec(int len,int wid)
	{
		if(len<=0||wid<=0) //抛出自定义异常
			throw new NoValueException("出现非法值");
		this.len = len;
		this.wid = wid;
	}
	public void getArea()
	{
		System.out.println(len*wid);
	}
}

class Circle implements Shape
{
	private int radius;
	public static final double PI = 3.14;//定义全局常量
	Circle(int radius)
	{
		if(radius<=0)//抛出自定义异常
			throw new NoValueException("出现负值了");
		this.radius = radius;
	}
	public void getArea()
	{
		System.out.println(radius*radius*PI);
	}
}

class ExceptionDemo7 
{
	public static void main(String[] args) 
	{
		Rec r = new Rec(3,4);	
		r.getArea(); 

		Circle c = new Circle(-8);
		c.getArea();

	}
}

/*
--------------------

异常的处理格式

第一个格式:
try
{}
catch()
{}

第二个格式:
try
{}
catch()
{}
finally
{}

第三个格式:
try
{}
finally
{}

catch是用来处理异常的,如果没有catch就代表异常没有被处理过
该异常是检测时异常,则必须声明
-----------------


异常在子父类覆盖中的体现
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该类异常的子类
2.如果父类方法抛出多个异常,那么子类在覆盖该方法的时,只能覆盖父类异常的子集
3.如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常
  如果子类方法发生了异常,那么就必须进行try处理,绝对不能抛

class AException extends Exception
{
}

class BException extends AException
{
}

class CException extends Exception
{
}


Exception
   |--AException
      |--BException
   |--CException
  早期的异常不能处理后期产生的异常
*/

class Fu
{
	void show()throws AException
	{}
}
class Zi extends Fu
{
	void show()//不能写 throws CException,因为子类的覆盖方法,只能抛出父类的异常或者该类异常的子类
	{}
}

class Test
{
	void function(Fu f)
	{
		try
		{
			f.show();
		}
		catch (AException e)//这里不能处理CException异常,所以下面不能用t.function(new Zi());
		{                   //早期的异常不能处理后期产生的异常
		}
	}
}

class ExceptionDemo6 
{
	public static void main(String[] args) 
	{
		Test t = new Test();
		t.function(new Fu());
		//t.function(new Zi());不能这样用
	}
}

-------- android培训java培训、期待与您交流!--------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值