JAVA异常

一、
1、异常:程序运行过程出现的不正常情况
2、由来:在日常生活中,也会出现各种问题。把各种问题用类的形式描述,并封装成对象,便是我们所说的异常
3、异常分类:
a、非常严重的问题:Error类
不编写针对性的程序进行处理
b、非严重性的问题:Exception类。
编写针对性的程序进行处理
4、异常和错误会有一些共性的东西,便向上抽取,形成Throwable类
5、创建类时,为了提高阅读性,可以把父类名称作为子类名称的尾缀
二、异常的处理
1、形式
try{
可能发生异常的代码
}
catch(异常名称 变量){
处理方案
}
finally{
一定会执行语句
}
常见异常方法:
getMessage()
toString()
printStackTrace()
示例代码

public class YC01 {
	public int demo(int a,int b){
		int r=a/b;
		return r;
	}


}
public class YC01Test {

	public static void main(String[] args) {
//		YC01 d=new YC01();
//		int r=d.demo(4, 0);
//		System.out.println(r);
//		异常处理
		YC01 d=new YC01();
		int r;
		try {
			r=d.demo(4, 0);//new ArithmeticException()
			System.out.println(r);
		}
		catch(Exception e) {
			System.out.println("除零了");
			System.out.println(e.getMessage());//异常信息
			System.out.println(e.toString());//异常名称:异常信息
			e.printStackTrace();//异常名称:异常信息,异常出现的位置
		}
//其实,jvm默认的异常处理机制,就是调用printStackTrace,打印异常的堆栈处理信息
			System.out.println("over");		
	}

}

		

执行过程:
创建d对象,d调用demo方法,把4,0传给a,b,在a/b时,引发了java虚拟机识别的算术问题,ArithmeticException。把这个问题封装成对象,抛给调用者,也就是主函数。try用来检测问题,然后在r=d.demo(4, 0)这里检测到了。如果没有try,就无法检测到这个问题。因为主函数被虚拟机调用,所以虚拟机调用默认的异常处理机制,然后不再执行后面的程序。现在try检测到问题后,把问题丢给catch。即Exception e=new ArithmeticException().执行相关代码,解决问题
2、throws
3、不处理,交给虚拟机
三、
作为调用者,所调用的功能是别人写的,在调用的时候,不知道该不该写try。因为不知道这个功能会不会发生问题。
作为编写程序的人,所以应该提前想到有可能出现异常情况。比如/0。所以在编写功能时,在功能上声明一个异常,表示此功能有可能出现异常,需要调用者进行处理。否则编译不通过。
但是,RunTimeException包含的异常除外,属于不被检测的异常。此类一场不应该被处理
代码示例

public class YC01 {
	public int demo(int a,int b) throws Exception
	{
		int r=a/b;
		return r;
	}
}

如果功能编写者添加了此代码,调用者必须进行异常处理。但是此声明方式不具体,调用者不知道是什么问题。所以声明异常时,声明具体的异常,比如上面throws ArithmeticException,可以获取具体的内容
异常处理时,可以使用throws Exception,将问题丢给虚拟机处理
四、对多异常的处理
1、作为功能定义者,有多个异常时,需要抛出多个具体异常。作为调用者,书写多个catch语句。
五、自定义异常
概念:写项目的过程中,会出现一些java未封装好的异常,我们可以按照java封装问题的思想,自定义封装异常。
自定义类时,必须继承Exception,然后在自定义的异常类中写异常信息。然后,对于父类中已经有的方法,可以直接利用继承的思想使用。
在定义的功能方法中,自定义的异常必须手动throw抛出。throw new FuShuException();抛出后,必须在功能方法上声明异常或者try,catch解决。声明异常的方法必须在调用时try,catch解决或者抛给虚拟机解决(throws Exception)。
六、throws和throw的区别
throws抛出异常类,写在函数上,可以跟多个,逗号隔开
throw抛出异常对象,写在函数内。
七、RunTimeException
异常分为两类
编译时被检测的一场
编译时不被检测的一场RunTimeException
八、异常的继承
子类只能抛出父类异常的子集,若有其他异常,在功能内部try,catch。
九、finally
finally中的语句一定会被执行。
常用来释放运行程序过程中打开的资源
理解:
在某一个方法中处理异常时,如果在finally外出现了return,之后的语句中只接着执行finally中的语句。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值