异常

什么是异常:

概念:程序在运行中出现的特殊情况。

异常处理的必要性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确处理,则可能导致程序的中断,造成不必要的损失。

异常的分类:

Throwable:可抛出的,一切错误或异常的父类,位于java.lang包中。

1.Error:JVM、硬件、执行逻辑错误,不能手动处理。

2.Exception:程序在运行时和配置中产生的问题,可处理。

    (1)RuntimeException:运行时异常,可处理,可不处理。

              可处理也可不处理,无需声明异常。

    (2)CheckedException:受查异常,必须处理。

              用Throws声明异常,修饰在方法参数列表后端

异常的产生:

1.自动抛出异常:当程序在运行时遇到不符合规范的代码或结果时,会产生异常。

2.手动抛出异常:语法:throw new 异常类型(“实际参数”);

3.产生异常结果:相当于遇到return语句,导致程序因异常而终止。

常见的异常处理方式:

try{

可能异常的代码

}catch(Exception e){

处理异常的相关代码。

}finally{

无论是否出现异常都执行。

}

常见的处理结构:多重catch();try{} finally{}

多重catch,遵循从小到大的顺序,父类异常在最后。

自定义异常:

需继承自Exception或Exception的子类,常用RuntimeException。

无参数构造方法

String message参数的构造方法

方法覆盖:

带有异常声明的方法覆盖:
方法名、参数列表、返回值类型必须和父类相同。
子类的访问修饰符和父类相同或是比父类更宽。
子类中的方法,不能抛出比父类更宽的异常,但可以比父类抛出更多的异常(前提是抛出的异常小于或等于父类异常级别)。

案例:

package com.Ch10.t1;

public class TestMyWork {

	public static void main(String[] args)throws MyException2 {
		int n;
		try{
			m(2);
		}catch(MyException1 ex1){
			//输出ex1详细方法调用栈信息
			ex1.printStackTrace();
		}catch(MyException2 ex2){
			//输出ex2的详细信息
			//把ex2重新抛出
			ex2.printStackTrace();
			throw ex2;
		}
	}							//声明抛出M有Exception1
	public static void m(int n)throws MyException1,MyException2{
		if(n==1){ 
		//抛出MyException1,并设定详细信息为"n==1"
		throw new MyException1("n==1");
	}else{
		//抛出MyException1,并设定详细信息为"n==2"
		throw new MyException2("n==2");
	}
}
}
//受查时异常
class MyException1 extends Exception{
	public MyException1(){}
	public MyException1(String message){
		super(message);
	}
}
//运行时异常
class MyException2 extends RuntimeException{
	public MyException2(){}
	public MyException2(String message){
		super(message);
		
	}
}





 

你可能感兴趣的:(java)