java异常

异常

java通过对这一类不正常的现象进行描述,并封装为对象。

1. java的异常体系包含在java.lang这个包默认不需要导入。
2. java异常体系图




----------------------------------------------------

Throwable


Throwable类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
Throwable类常用方法:
1. toString() 输出该异常的类名。
2. getMessage() 输出异常的信息,需要通过构造方法传入异常信息。
3. printStackTrace() 打印栈信息。
-------------------------------

错误

它指的是一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。错误是JVM的一个故障(虽然它可以是任何系统级的服务)。所以,错误是很难处理的,所以Error不是try-catch的处理对象,而JVM一般的处理方式是终止发生错误的线程,一般的开发人员是无法处理这些错误的。

-------------------------------------------------

异常

一. 运行时异常和非运行时异常
 1. RuntimeException和RunntimeException的子类: 运行时异常无需进行处理,直接找到出现问题的代码,进行规避。
 2. 非运行时异常(受检异常) :如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错
二. 异常处理
     1. 自行处理

使用try catch处理, 如果没有进行try catch处理,出现异常程序就停止。进行处理后,程序会继续执行

实例:

class Demo{
	public static void main(String[] args){
		try{
			dev(4,0);
		}catch(Exception e){
			e.printStackTrace();	
		}	
	}
	public static void dev(int x,int y){
		System.out.println(x/y);	
	}
}

2. 抛出处理
出现异常后抛出,由父类处理异常
class zeroException extends Exception{
	public zeroException(String message){
		super(message);
	}
}
class Demo{
	public static void main(String[] args){
		try{
			dev(4,0);
		}catch(Exception e){
			e.printStackTrace();	
		}	
	}
	public static void dev(int x,int y) throws zeroException{
		if (0==y) {
			throw new zeroException("除数不能为0");
		}
		System.out.println(x/y);	
	}
}

(1)注意:

1. 程序中有多个语句可能发生异常,可以都放在try语句中。并匹配对个catch语句处理。
2. 如果异常被catch匹配上,接着执行try{}catch(){} 后的语句。没有匹配上程序停止。
3. try中多个异常同时出现,只会处理第一条出现异常的一句,剩余的异常不再处理。
4. 使用多态机制处理异常。
5. 程序中多态语句出现不同异常,出现了多个catch语句。简化处理。
6. 使用多态,使用这些异常的父类进行接收。(父类引用接收子类对象)

7. 处理异常应该catch异常具体的子类,可以处理的更具体,不要为了简化代码使用异常的父类。

(2)try catch使用细节:
1. try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构。
2. catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。
3. try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
4. 多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。(子类在上,父类在下)。
5. throw语句后不允许有紧跟其他语句,因为这些没有机会执行。
6. 如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。

(3)多个catch语句之间的执行顺序
1. 是进行顺序执行,从上到下。
2. 如果多个catch 内的异常有子父类关系。

1. 子类异常在上,父类在最下。编译通过运行没有问题

2. 父类异常在上,子类在下,编译不通过。(因为父类可以将子类的异常处理,子类的catch处理不到)。
3. 多个异常要按照子类和父类顺序进行catch

(4)子类父类关系
1:子类覆盖父类方法是,父类方法抛出异常,子类的覆盖方法可以不抛出异常,或者抛出父类方法的异常,或者该父类方法异常的子类。
2:父类方法抛出了多个异常,子类覆盖方法时,只能抛出父类异常的子集
3:父类没有抛出异常子类不可抛出异常
5:子类发生非运行时异常,需要进行try{}catch的(){}处理,不能抛出。
6:子类不能比父类抛出更多的异常

(5)throw和throws的区别
1. 相同:都是用于做异常的抛出处理的。
2. 不同点:throws 后跟的是异常类,可以跟多个,用逗号隔开,是针对方法抛出的异常。throw 后跟异常对象。针对对象抛出的异常。
(6)finally
1.finally主要用于释放系统资源。
2:在处理异常的时候该语句块只能有一个。
3:无论程序正常还是异常,都执行finally。如果JVM退出了System.exit(0),finally就不执行。
4:return都不能停止finally的执行过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值