异常的真实应用

/**
 * 要求:老师用电脑讲课发生蓝屏异常和死机异常机器处理
 *
 * @author Administrator
 *
 */

class Teacher
{
	private String name;
	private Computer com;
	public Teacher(String name){
		this.name=name;
		com=new Computer();
	}

	public void teach() throws NoPlanException{
		try{
			com.run();
		System.out.println(name+"开始上课");

		}catch(LanPingException e){
			System.out.println(e.toString());
			com.reset();//调用重启方法
			teach();
		}
		catch(SiJiException e){
			System.out.println(e.toString());
			test();//调用休息方法
			throw new NoPlanException("任务完不成");//抛出不能完成任务的方法给调用者
		}
	 }
	public void test(){//休息方法
		System.out.println("大家休息");
	}
}
class Computer{
	int status=(int)(Math.random()*3);//定义状态变量获取随机数,0表示正常,1表示蓝屏异常,2,表示死机异常
	public void run()throws LanPingException,SiJiException
	{
			if(status==1){//不同情况抛出不同异常
				throw new LanPingException("你的电脑蓝屏了");
			}

			if(status==2){
				throw new SiJiException("你的电脑坏掉了!");
			}

			System.out.println("电脑运行");

	}
	public void reset(){
		System.out.println("电脑重新启动!");
		status=0;//重启后电脑正常
	}
}
class LanPingException extends Exception{//蓝屏异常
	LanPingException(String s){
		super(s);
	}
}
class SiJiException extends Exception{//电脑不会用异常
	SiJiException(String s){
		super(s);
	}
}
class NoPlanException extends Exception{//任务完不成的异常
	NoPlanException(String s){
		super(s);
	}
}
public class ExceptionApplication {
	public static void main(String[] args) {
		Teacher t=new Teacher("李老师");
     	try{//获取任务完不成的异常,然后处理
     		t.teach();
     	}catch(NoPlanException e){
     		System.out.println(e.toString());
     	    System.out.println("换一个老师");

     	}
	}
}

//若status为0,

电脑运行
李老师开始上课

//若status为1

LanPingException: 你的电脑蓝屏了
电脑重新启动!
电脑运行
李老师开始上课

//若status为2

SiJiException: 你的电脑坏掉了!
大家休息
NoPlanException: 任务完不成
换一个老师

时间: 2024-11-05 15:58:29

异常的真实应用的相关文章

【转】Java异常:选择Checked Exception还是Unchecked Exception?

Java包含两种异常:checked异常和unchecked异常.C#只有unchecked异常.checked和unchecked异常之间的区别是: Checked异常必须被显式地捕获或者传递,如Basic try-catch-finally Exception Handling一文中所说.而unchecked异常则可以不必捕获或抛出. Checked异常继承java.lang.Exception类.Unchecked异常继承自java.lang.RuntimeException类. 有许多支

Java面向对象之异常详解

目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往期回顾:上一篇我们大致总结了异常的继承体系,说明了Exception和Error两个大类都继承于顶级父类Throwable,又谈到编译时异常与运行时异常的区别,谈到异常的处理方式,以及处理方式中关于捕获方式的几种类型. 本篇承上启下,将从异常的其余部分进行总结,但是毕竟现在处于初学阶段,未必能够体会

Checked Exceptions

记得当年在程序员杂志上看出这次访谈,10多年过去了, 这件事儿最近被重提了, 原因是 Kotlin. 1.对Checked Exceptions特性持保留态度 (译者注:在写一段程序时,如果没有用try-catch捕捉异常或者显式的抛出异常,而希望程序自动抛出,一些语言的编译器不会允许编译通过,如Java就是这样.这就是Checked Exceptions最基本的意思.该特性的目的是保证程序的安全性和健壮性.Zee&Snakey(MVP)对此有一段很形象的话,可以参见: http://www.b

Net调用非托管代码(P/Invoke与C++InterOP) [转]

将 System::String 转换为 wchar_t* 或 char* PtrToStringChars将String转换为本机wchar_t *或char *.由于 CLR 字符串为内部 Unicode,因此这样通常会返回一个 Unicode 宽字符串指针.然后可以将其转换为宽字符串 1 .Net互操作 .Net不能直接操作非托管代码,这时就需要互操作了. 1.1 P/Invoke 许多常用Windows操作都有托管接口,但是还有许多完整的 Win32 部分没有托管接口.如何操作呢?平台调

真实案例:异常断电导致虚拟机无法启动恢复成功

虚拟机数据恢复故障: 发生故障的存储设备是某品牌存储 EVA8400型号,由于机房意外断电导致该存储中的一台VMware虚拟机无法启动(虚拟机中存储了oracle数据库),管理员清空cache并尝试重新启动该虚拟机但失败了.需要对该无法启动的虚拟机进行数据恢复. 虚拟机数据恢复流程:1)合并虚拟机快照 由于VMware虚拟机的快照原理是虚拟机的快照文件一旦被创建则之后的数据更新都只在快照文件里面发生,并且该虚拟机存在有两个快照文件.所以本次虚拟机数据恢复的第一步为将两个虚拟机快照进行合并,然后才

python基础--接口与归一化设计、封装、异常、网络编程

1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合 继承的两种用途 一:继承基类的方法,并且做出自己改变或者扩展(代码重用):实践中,继承的这种用途意义并不很大,甚至常常是有害的.因为它使得子类与基类出现强耦合. 二:声明某个子类兼容于某基类,定义一个接口类(模仿java的Interface),接口类中

异常相关问题

1.Java中的两种异常是什么?它们之间的区别? Java有两种类型的异常:checked与unchecked(检查与未检查) 异常. 如果unchecked异常可能会在方法或构造函数的执行时被抛出从而蔓延到方法或构造函数的外部, 它们也不需要要在方法或构造函数中声明throws子句. 然而, checked异常必须通过方法或构造函数的throws子句声明. 关于java异常处理的建议请参考这里Java exception handling. 2.Java中异常与错误的区别? Exception

太狗血了!分享一次网站百度收录排名异常的检查记录

事情是这样的:我的博客现在的百度收录异常惨淡!而且,我还叮嘱哪些喜欢转载我博客博文的朋友,不要转载半个月内发布的文章,因为我以为几个月来百度不收录.排名下降严重的是因为我先后更换主题-->换用360网站卫士-->文章被人快速转载所致. 我发现最蛋疼.最诡异的是,我发布的文章几个月都没被收录!!!然后我也默默的在心里把度娘骂了几个月,尼玛就算被人采集.被人第一时间转载也不至于不收录啊? 可实际有图为证: 基本从5月份开始,发布的文章就不再收录,索引从4800掉到现在1000左右! 期间,我各种怀

C++ Primer笔记2_四种类型转换_异常机制

1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式执行的任何类型转换都可以由static_cast完成 当一个较大的算术类型赋值给较小的类型时,可以用static_cast进行强制转换. 可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全. 无法将const转化为nonconst,这个只有const_cast才可以办得到 举例: