JAVA学习笔记-异常

1.异常处理类结构图:



2.派生于Error类或者RuntimeException类的所有异常类称为未检查异常(unchecked Exception)

所有其他的异常称为已检查的异常(CheckedException),即在编译时被强制检查的异常。


3.常见的几个异常:

①ArrayStoreException 将错误类型的对象存到对象数组时抛出

②ArithmeticException 异常运算条件时抛出(如除数为0)

③ArrayIndexOutOfBoundException 数组访问越界下标时抛出

④FileNotFoundException 打开文件失败时抛出

⑤IOException 读取和写入操作出错时抛出


4.throw和throws的区别:

throws是用来声明一个方法可能抛出的所有信息,throw是指在方法内部抛出一个具体的异常信息。throws在方法声明处使用,throw在方法内使用。


5.我们可以创建自己的异常类,只需要定义一个类继承于Exception,通常应该包含两个构造器,一个是默认的,一个可以传入字符串作为描述信息,要调用超类的构造器。


6.方法抛出的异常在两种情况下会丢失:
①finally中如果有抛出异常,而try中的异常没写catch,则try中的异常会被finally中的异常覆盖。
②如果finally中有return,而try中的异常没写catch,会把try中的异常丢失掉。

class OneException extends Exception{
	public String toString(){
		return "this is oneException!";
	}
}
class TwoException extends Exception{
	public String toString(){
		return "this is TwoException!";
	}
}

public class ExceptionClass  {
	public void method1 ()throws OneException{
		throw new OneException();
	}

	public void method2 ()throws TwoException{
		throw new TwoException();
	}
public static void main(String[] args) {
try{
	ExceptionClass ex=new ExceptionClass();
		try {
			ex.method1();
		} 
		finally{
			ex.method2();
		}
}catch(Exception e){
	e.printStackTrace();
}

try{
	throw new OneException();
} 
finally{
	return;
}

}	
}



运行结果:



7.在覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常,或者那些异常的子类,或者不抛出异常。在继承和覆盖的过程中,某个特定方法的异常说明的接口不是变大了而是变小了。


8.子类异常必须在基类异常前面捕获,否则会被基类异常覆盖。捕获一个基类异常,实际上会捕获所有从基类异常派生的子类异常。


9.checkException可以被包装进RuntimeException,这样即使是抛出checkException的方法也可以不必捕获异常。需要查找被包装的异常是具体什么异常的时候,用e.getCause()可以重新获得该异常。

package tes;

import java.io.FileNotFoundException;
import java.io.IOException;

public class SurroundException {
public static void main(String[] args) {
	ExceptionClass ec=new ExceptionClass();
	for(int i=0;i<3;i++){
		try{
		ec.choseException(i);
		}catch(RuntimeException e){
			try{
				throw e.getCause();//获得该异常后再获取异常中包装的异常
			}
			catch(FileNotFoundException ex){
				System.out.println("捕获到的异常里面包装的是FileNotFoundException!");
			}
			catch(IOException ex){
				System.out.println("捕获到的异常里面包装的是IOException!");
			}catch(Throwable ex){
				System.out.println("捕获到的异常里面包装的是"+ex.getMessage());
			}
		}
}
}
}

class ExceptionClass{
	public void choseException(int i){
		try{
		switch(i){
		case 0:throw new IOException("this is 0 exception");
		case 1:throw new FileNotFoundException("this is 1 exception");
		case 2:throw new RuntimeException("RuntimeException");
		default:return;
		}
		}
		catch(Exception e){
			throw new RuntimeException(e);//把checkException包装成RuntimeException
		}
		
		
	}
	
	
}

运行结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值