Java中的异常处理

什么是异常:在程序运行的过程中发生了不被期望的事件,组织了程序按照预期正常执行。

我们要知道,一个程序不会一点错误都没有,在出现异常时,我们要进行异常处理,使程序从异常中恢复。

Java异常类型:

1、Error及其子类:错误,一般为虚拟机的错误,是由Java虚拟机生成并抛出,程序不能进行处理,例如OutOfMemoryError(内存溢出)StackOverFlowError(调出栈溢出)

2、RuntimeException及其子类:运行时异常,也称为非受检型异常,是由于编程时的bug所导致,一般不进行处理,直接中断报错。

例如:

ArithmeticException算数异常

public static void main(String[] args) {
	int k=0;
	System.out.println(1/k);
}

异常:Exception in thread "main" java.lang.ArithmeticException: / by zero

解决方法:判断分母是否为0

public static void main(String[] args) {
	int k=0;
	if(k==0) {
		System.out.println("除数不正确");
	}else {
		System.out.println(1/k);
	}
	
}

StringIndexOutOfBoundsException下标越界

public static void main(String[] args) {
	String ss="dsadasfwa";
	char cc=ss.charAt(ss.length());
	System.out.println(cc);
}

异常:Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9

解决方法:进行下标的合法性验证

public static void main(String[] args) {
	String ss="dsadasfwa";
	Scanner sc=new Scanner(System.in);
	int pos=sc.nextInt();
	if(pos>-1&&pos<ss.length()) {
		char cc=ss.charAt(pos);
		System.out.println(cc);
	}else {
		System.out.println("没有对应下标的字符");
	}
	sc.close();
}

ClassCastException类型转换异常

public static void main(String[] args) {
	Object obj=new Date();
	System.out.println(obj);
	Integer kk=(Integer)obj;
	System.out.println(kk);
	
}

处理方法:在进行窄化操作之前先进行对象类型判定

public static void main(String[] args) {
	Object obj=new Date();
	System.out.println(obj);
	if(obj!=null&&obj instanceof Integer) {
		Integer kk=(Integer)obj;
		System.out.println(kk);
	}else {
		System.out.println("...");
	}
}

3、Exception及其子类中除了RuntimeException及其子类之外的其它异常:

受检型异常:明知道这种异常的存在,但是没有办法杜绝,必须进行代码异常处理

非受检型异常:这种异常不需要进行处理,发现的越早越好

异常的捕获和处理:

try{
    try中包含可能产生异常的代码,在执行过程中如果出现了异常,则异常之后的语句不会执行,而是执行catch部分的代码。
}catch(xxException e){
    当异常发生时,程序会终止当前的流程,根据获取异常的类型去执行相应的代码
}finally{
    无论是否发生异常,此代码都会执行    
}

try{}后面必须跟一个finally或者catch

try:用于监听,将要被监听的代码放在try语句块之内,当try语句块内发生异常时,异常就被抛出在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做响应的处理。如果没有异常产生,所有的catch代码段都能略过不执行

catch:用于捕获try语句块中发生的异常,在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象,同时允许异常的继续抛出

finally:finally语句总是会被执行

throw:人为编程抛出异常

throws:用在方法签名中,用于声明该方法可能抛出的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值