Java基础知识整理之异常篇

    直接上代码:

class ExceptionA extends Exception{ 
	//继承自Exception类,为受检查的异常
}
class ExceptionB extends RuntimeException{ 
	//继承自RuntimeException,为不受检查的异常,又称为运行时异常
}
class ExceptionC extends Exception{ 
	//继承自Exception,为受检查的异常
}

public class ExceptionTest {

	void throwExceptionA() throws ExceptionA{ 
		//方法本身内部抛出受检查的异常,因此方法要么声明为抛出该异常,要么方法内部处理异常
		//这里使用方法声明为抛出异常的方式
		throw new ExceptionA();
	}
	
	void throwExceptionA2(){ 
		//方法本身内部抛出受检查的异常,因此方法要么声明为抛出该异常,要么方法内部处理异常
		//这里使用方法内部处理异常的方式
		try {
			throw new ExceptionA();
		} catch (ExceptionA e) {
			e.printStackTrace();
		}
	}
	
	void throwExceptionA3() throws ExceptionA{ 
		//可以声明抛出异常,但实际上并不抛出任何异常
	}
	
	void catchExceptionA(){
		try {
			
		} catch (ExceptionA e) { 
			// error ,试图捕获并处理try块中不可能抛出的受检查的异常将导致编译错误
		}
	}
	
	void catchExceptionB(){
		try {
			
		} catch (ExceptionB e) { 
			//可以捕获运行时异常,即使try块中不会抛出该异常
		}
	}
	
	void catchException(){
		try {
			
		} catch (Exception e) { 
			//可以捕获Exception异常,不会引起编译错误
		}
	}
	
	void invokeA(){
		try {
			//调用的方法抛出异常,要么捕获异常,要么方法声明抛出该异常	
			throwExceptionA(); 
		} catch (ExceptionA e) {
			e.printStackTrace();
		}
	}
	
	void invokeA1() throws ExceptionA{
	   //调用的方法抛出异常,因为没有捕获异常,所以该方法必须声明抛出异常
		throwExceptionA();
	}
	
	void throwExceptionB() throws ExceptionB { 
		//ExceptionB为运行时异常,可以只抛出异常,不必在方法声明处声明抛出,也不必捕获处理
		//当然也可以在方法处声明抛出,也可以捕获异常
		throw new ExceptionB();
	}
	
	void invokeB(){
		//调用的方法抛出运行时异常,可以不捕获,也可以不声明抛出
		throwExceptionB();
	}	
}

class ExceptionChild extends ExceptionTest{
	void throwExceptionA() throws ExceptionC{
		//error,子类重写父类中的方法时,可以不抛出异常,但不能抛出新的异常
		//这里所谓的新的异常,指的该异常不是父类方法声明中抛出的异常之一,或是其中之一某个的异常子类
		//ExceptionC是新的受检查异常,父类方法中没有声明抛出,也不是ExceptionA异常类的子类,故编译错误
		//该规则只对受检查的异常有效,对运行时异常无效
	}
	
	void throwExceptionA2() throws ExceptionB{ 
		//ExceptionB为运行时异常,不受上面的规则的限制,ExceptionB不是父类方法中抛出的异常,在子类方法中可以抛出

	}
	
	void throwExceptionA3(){
		//重写父类方法时,可以不抛出相应异常
	}
}
    以上总结了正常情况下以及继承下编写异常处理模块的一些规则。小结一下:Throwable为所有可以抛出的异常的父类,它包括Error和Exception两个直接子类。所有的受检查的异常均从java.lang.Exception 继承而来,而运行时异常(不受检查的异常)则继承java.lang.RuntimeException 或java.lang.Error。一般而言,Checked Exception 表示这个Exception 必须要被处理,也就是说程序设计者应该已经知道可能会收到某个Exception;而Runtime Exception 通常会暗示着程序上的错误,这种错误会导致程序设计者无法处理,而造成程序无法继续执行下去(可以try catch处理而避免程序挂掉,但是这常常会掩盖问题所在)。

    常见的运行时异常有:NullPointerException、NumberFormatException(字符串转换为数字时)、ArrayIndexOutOfBoundsException:数组越界、StringIndexOutOfBoundsException:字符串越界、ClassCastException:类型转换错误、ArithmeticException:算术错误,除数为零、 ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常、ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时、IllegalArgumentException:非法参数、NoSuchElementException等。

    常见的受检查异常有:ClassNotFoundException:加载类时没有找到具有指定名称的类的定义、InterruptedException:sleep(),wait(),join()被中断时、NoSuchFieldException、NoSuchMethodException、SQLException:关于数据库访问错误或其他错误信息的异常、TimeoutException,阻塞操作超时、IOException及其子类等。

  



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值