10、异常


十、异常

1、系统结构图(xmind)


2、tips

——1.throw和throws的区别

1.throws用于标识函数暴露出的异常类,并且可以抛出多个,用逗号分隔。throw用于抛出异常对象。

2.thorws用在函数上,后面跟异常类名。throw用在函数内,后面跟异常对象。

       定义功能方法时,需要把出现的问题暴露出来让调用者去处理,那么就通过throws在函数上标识。在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。


——2.异常的分类

1.编译时被检测异常:这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式,这样的问题都可以针对性的处理。

2.编译时不被检测异常(运行时异常):这种问题的发生,无法让功能继续,更多是因为调用的原因导致的或者引发了内部状态的改变导致的,这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行调整。所以自定义异常时要么继承Exception,要么继承RuntimeException。


——3.格式与注意事项

RuntimeException是那些可能在Java虚拟机正常运行期间抛出的异常的超类。
可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需在throws子句中进行声明。
异常处理的捕捉形式:
可以对异常进行针对性处理的方式。
具体格式是:
try

{
       //需要被检测异常的代码。
}
catch(异常类变量)//该变量用于接收发生的异常对象
{
       //处理异常的代码。
}
finally

{
       //一定会执行的代码;
}


注意事项:
finally代码块只有一种情况不会被执行,就是在之前执行了System.exit(0)。
处理过程:
try中检测到异常会将异常对象传递给catch,catch捕获到异常进行处理。
finally里通常用来关闭资源。比如:数据库资源,IO资源等。
需要注意:try是一个独立的代码块,在其中定义的变量只在该变量块中有效。
如果在try以外继续使用,需要在try外建立引用,在try中对其进行初始化。IO,Socket就会遇到。


/*
老师用电脑:
有两个对象:电脑,老师

其中涉及两个问题:
比如蓝屏,冒烟。

*/
class lanpinException extends Exception
{
	lanpinException(String msg)
	{
		super(msg);
	}
}
class maoyanException extends Exception
{
	maoyanException(String msg)
	{
		super(msg);
	}
}
class NoplanException extends Exception
{
	NoplanException(String msg)
	{
		super(msg);
	}
}
//描述电脑对象,抛出蓝屏和冒烟两个异常。
class computer
{
	private int state = 1;//0,2
	public void run()throws lanpinException,maoyanException
	{
		if(state == 1)
			throw new lanpinException("电脑蓝屏了");
		if(state == 2)
			throw new maoyanException("电脑冒烟了");
		System.out.println("电脑运行");
	}
	//重启功能
	public void reset()
	{
		state = 0;
		System.out.println("电脑重启");
	}
}
//老师对象,使用电脑,当电脑冒烟异常触发时,抛出计划外异常
class teacher
{
	private String name;
	private computer comp;
	//老师这个对象有使用电脑的行为以及老师姓名的属性
	teacher(String name)
	{
		this.name = name;
		comp = new computer(); 
	}
	//老师有讲课功能,讲课中使用电脑可能出现异常,捕捉
	public void prelect()throws NoplanException
	{
		try
		{
			comp.run();
			System.out.println(name+"讲课");
		}
		catch (lanpinException e)
		{
			System.out.println(e.toString());
			comp.reset();
			prelect();
		}
		catch (maoyanException e)
		{
			System.out.println(e.toString());
			test();
			throw new NoplanException("课时无法进行,原因:"+e.getMessage());
		}
	}
	public void test()
	{
		System.out.println("大家练习");
	}
}
class ExceptionDemo2
{
	public static void main(String[] args)
	{
		//创建老师对象,讲课期间可能出现异常,捕捉
		teacher t = new teacher("老师");
		try
		{
			t.prelect();
		}
		catch (NoplanException e)
		{
			System.out.println(e.toString()+"...换人");
		}
	}
}

运行结果:

          





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值