黑马程序员-java异常学习笔记

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
 

Java异常学习笔记
一. java异常的定义
 
   在《java编程思想》中这样定义 异常:阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意。(异常的由来:在程序运行时出现的不正常情况,通过java类的形式进行描述并封装成对象。)
 
二.Java异常的体系
	Throwable 
	|---Error :理用于指示合理的应用程序不应该试图捕获的严重问题。一般不写针对 性的代码进行处理。
	|---Exception:指出了合理的应用程序想要捕获的条件。可以使用针对性的处理 方式进行处理。
	    |---RuntimeException:运行时异常。当该异常发生时希望程序停止。
 
三.Java异常的处理
 
  当异常发生时,可以使用两种方法处理。第一种:抓取异常。第二种:向上抛出异常。
    (1)抓取异常:
	Java提供了特有的语句进行处理。
	try{}catch(){}:处理语句:
		try{
		   需要被检测的代码}
		catch(异常类 变量){
		   异常处理代码
		}
		finally{
	            一定会被执行的代码(一般用来关闭资源)
		}
 
    (2)向上抛出异常
	throw和throws的区别:
	Throw用在函数内,后面跟的是异常对象
	Throws用在函数上,后面跟的是异常类,可以有多个,用逗号分开。(和 implements相似)
 
四.Java异常的使用
 
Eg.
/*
 * 需求:毕老师用电脑上课。过程中可能出现的问题:电脑蓝屏,电脑冒烟
 * 面向对象分析:(名词提取法)
 * 		涉及对象:老师,电脑。
 * 出现的问题(异常):
 * 		电脑蓝屏:BlueScreenException :可以通过重启电脑解决
 * 		电脑冒烟:SmokeException 	        :需要用其他方式解决
 * 
 * 		
 */
class NoPlanException extends Exception{	// 未知异常
	NoPlanException(String msg){
		super(msg);
	}
}

class BlueScreenException extends Exception { // 蓝屏异常
	BlueScreenException(String msg) {
		super(msg);
	}
}

class SmokeException extends Exception { // 冒烟异常
	SmokeException(String msg) {
		super(msg);
	}
}

class Computer {
	private int state = 3; // state取值为1,2,3(1:正常运行;2:蓝屏异常;3:冒烟异常)
							// 用枚举会好一些

	public void run() throws BlueScreenException, SmokeException {
		switch (state) {
		case 1: // 正常运行
			System.out.println("电脑启动");
			System.out.println("电脑运行");
			break;
		case 2: // 蓝屏异常
			System.out.println("电脑启动");
			System.out.println("电脑蓝屏了...");
			throw new BlueScreenException("电脑蓝屏了...");
		case 3: // 冒烟异常
			System.out.println("电脑启动");
			System.out.println("电脑冒烟了...");
			throw new SmokeException("电脑冒烟了...");
		}

	}

	public void restart() {
		state = 1; // 电脑恢复正常运行状态
		System.out.println("电脑重启...");
		System.out.println("电脑运行");
	}
}

class Teacher // 老师类
{
	private String name;
	private Computer computer; // 面向对象组合

	Teacher(String name) {
		this.name = name;
		computer = new Computer();
	}

	public void prelect() throws NoPlanException {
		try {
			computer.run();
			System.out.println(name + "用电脑讲课");
		} catch (BlueScreenException e) {
			computer.restart();		// 出现蓝屏异常,重启电脑解决问题
		} catch (SmokeException e) {
			
			NoPlanException otherException = 
				new NoPlanException("教学延误"); // 老师无法处理冒烟问题,向上抛出异常
			
			otherException.initCause(e);	// 抛出新异常时,吧导致新异常的原因记录下来,以便分析和修改程序
			throw otherException;
		}
		
	}
}

public class ExceptionDemo {

	public static void main(String[] args) {

		Teacher t = new Teacher("毕老师");
		try {
			t.prelect();
		} catch (NoPlanException e) {
			System.out.println("放假: "+e.getMessage()+" "+e.getCause());
		}
	}

}

参考博客:点击打开链接

 

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值