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

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

概述

概念:程序运行时期发生的不正常情况
由来:问题也是现实生活中的事物,也可以通过Java类进行描述,并封装成对象。其实就是Java对不正常情况进行描述后的对象体现。
体系:一种是Error,一种是Exception。由于发现这俩大类中还有很多共性东西,所以又进行了抽取。抽取成了Throwable。
Error:对于严重的异常,java通过Error类进行描述,对于Error一般不编写针对性的代码对其进行处理
Exception:对于非严重的,java通过Exception类进行描述,对于Exception可以使用针对性的处理方式进行处理。

异常的处理

异常的处理分两种方式:try..catch和throws抛异常

try...catch异常捕获的三种方式:

try{
	可能发生异常的代码;
}
catch(接收捕获异常类的对象 异常类引用变量){
	处理代码;
}

try{
	可能发生异常的代码;
}
fianlly{
	一定要执行的语句;(通常用于关闭资源)
}

try{
	可能发生异常的代码;
}
catch(捕获异常类的对象 异常类引用变量){
	处理代码;
}
finally{
	一定要执行的语句;(通常用于关闭资源)
}
PS:将必须要运行的代码放入finally代码块中。

try...catch异常的示例代码

class Demo{
	int div(int a,int b){
		return a/b;
	}
}
class ExceptionDemo{
	public static void main(String[] args){
		Demo d=new Demo();
		try{
			int x=d.div(4,0);
			System.out.println(x);
		}catch(Exception e){
			System.out.println("除零啦!");
		}
		System.out.println("over");
	}
}

throws异常的示例代码

class Demo{
	int div(int a,int b) throws Exception{
		return a/b;
	}
}
class ExceptionDemo{
	public static void main(String[] args) throws Exception{
		Demo d=new Demo();
		int x=d.div(4,0);
		System.out.println(x);
		System.out.println("over");
	}
}

throws和throw的区别

1、throws使用在函数上,throw使用在函数内
2、throws后面跟的是异常类,可以跟多个,用逗号隔开;throw后跟的是异常对象

RuntimeException

1、如果在函数中抛出该异常,函数上可以不用声明,编译一样通过;
2、如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
PS:该异常之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后由程序员对代码进行修正。
自定义异常时,如果该异常的发生无法再继续运算,就让自定义异常继承 RuntimeException。

练习

关于毕老师用电脑上课的异常处理

示例代码如下:
class LanPingException extends Exception{
	LanPingException(String message){
		super(message);
	}
}
class MaoYanException extends Exception{
	MaoYanException(String message){
		super(message);
	}
}
class Computer{
	private int state=1;
	public void run() throws LanPingException,MaoYanException{
		if(state==2)
			throw new LanPingException("蓝屏了");
		if(state==3)
			throw new MaoYanException("冒烟了");
		System.out.println("电脑运行");
	}
	public void reset(){
		System.out.println("电脑重启");
	}
}
class NoPlanException extends Exception{
	NoPlanException(String msg){
		super(msg);
	}
}
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){
			cmpt.reset();
		}catch(MaoYanException e){
			test();
			throw new NoPlanException("课时无法继续"+e.getMessage());
		}
		System.out.println("讲课");
	}
	public void test(){
		System.out.println("练习");
	}
}
public class Demo{
	public static void main(String[] args){
		Teacher t=new Teacher("毕老师");
		try{
			t.prelect();
		}catch(NoPlanException e){
			System.out.println(e.toString());
			System.out.println("换老师,或者放假");
		}
	}
}

----------------------  ASP.Net+Android+IO开发S .Net培训 、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值