Java学习之异常

一、概念

异常就是程序出现不正常的情况

二、分类

异常包括

错误:这是非常严重的问题,一般我们处理不了

异常:编译时期异常:开始就必须处理,如果不处理,程序就没法运行

   运行时期异常:开始可以不用处理,但是这种问题一旦发生,就是我们的程序问题,需要修改程序

三、体系结构


四、异常演示

package com.edu.exception;

public class ExceptionDemo {
	public static void main(String[] args) {
//		int a = 10;
//		int b = 0;
//		System.out.println(a/b);//java.lang.ArithmeticException: / by zero
		try{
			int a = 10;
			int b = 0;
			System.out.println(a/b);
		}catch (ArithmeticException e) {
			System.out.println("除数不能为0");
		}
//			finally{
//			System.out.println("finally里面一定会执行");
//		}
	}
}

五、异常处理

默认处理方案:一旦程序出现了问题,就会把问题的类名,错误原因,错误的位置等信息打印在控制台,以便我们观察,并且会自动从当前出问题的地方停止掉
默认处理坏处:程序由多个部分组成,其中一个出问题了,不应该影响其他部分的执行
我们自己如何处理:
1、两种方案:
(1)
try{
可能出现异常的代码
}catch(异常类名 变量名){
针对异常的代码的处理
}finally{
释放资源的地方
}
finally:一般用于释放资源。在数据库操作或者IO流比较常见。
特点:
被finally控制的语句体一定会执行
特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
简化:
try{
可能出现异常的代码
}catch(异常类名 变量名){
针对异常的代码的处理
}
(2)throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用,号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能,并不一定会发生这些异常
例:public void method() throws FileNotFoundException{}
2、多个异常处理
try多个catch如果异常间存在父子关系,那么父必须在后面
3、演示编译器异常,运行期异常
try..catch是直接对异常进行了处理,而throws则是把异常处理的事情交给了调用者
throws用在方法上,声明方法有一场,交个调用者
但是,如果是编译时期的异常,调用者就必须处理,如果是运行时期的异常,调用者可以处理,也可以不处理
4、final和finally的区别:
final:是最终的意思,可以修饰类,方法,变量
修饰类,类不能被继承
修饰方法,方法不能被重写
修饰变量,变量变常量
finally:异常处理的一部分,被finally控制的代码一定会执行,
特殊情况:在执行到finally之前,jvm退出了
4、注意
仅仅针对编译时期异常,与运行时期异常无关。
(1)子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
(2)如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
(3)如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
5、throw和throws的区别?

 throws:

 用在方法声明后面,跟的是异常类名
 可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常

 throw:
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
private static void method2() throws FileNotFoundException{
		try{
			FileInputStream fis = new FileInputStream("D://a.txt");
		}catch(FileNotFoundException e){
			//当遇见这个异常之后,直接抛出(这就是我给出的处理方法)
			//如果【抛出的是编译时期异常的话,必须在方法声明上给予声明
			throw new FileNotFoundException();
		}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值