异常

 

异常:异常就是Java程序在运行过程中出现的错误。
异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象。其实就是Java对不正常情况进行描述后的对象体现。

异常的体系


Throwable分三种

1,编译时异常
除了RuntimeException及其子类,Exception中所有的子类都是,这种异常必须要处理,要不编译通不过
2,运行是异常
RuntimeException及其子类都是,这种异常不用处理,编译会通过,不过这样的程序会有安全隐患,遇到这种异常是需要改代码的
3,严重错误问题
用Error进行描述,这个问题发生后,一般不编写针对代码进行处理,而是要对程序进行修正.通常都是由虚拟机抛出的问题

Throwable中的方法
String getMessage()
获取异常信息,返回字符串。

getMessage() :返回此 throwable 的详细消息字符串。
class Throwable {
	String detailMessage;
	Throwable(){}

	Throwable(String message) {
		this.detailMessage = message;
	}

	public String getMessage() {
		return detailMessage;
	}
}


String toString()
获取异常类名和异常信息,返回字符串。
覆盖了object里的toString()方法
void printStackTrace()
获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
void printStackTrace(PrintStream s)
通常用该方法将异常内容保存在日志文件中

异常处理

               try...catch...finally
		格式:
			try {
				需要检测的代码;
			}
			catch(异常类  变量) {
				异常处理代码;
			}
			...
			finally {
				一定会执行的代码;
					
			}
		可以有下面三种搭配形式:
			try...catch(...)
			try...finally
			try...catch(...)...finally            

抛出 throws throw   

throws:用于标识函数暴露出的异常。thorws用在函数上,后面跟异常类名(可以由多个,用,隔开)。

throw:用于抛出异常对象。throw用在函数内,后面跟异常对象。new Exception();

自定义异常

class MyException extends Exception{
	MyException(){}

	MyException(Stirng message){
		super(message); //将信息传递给父类,调用父类封装好的构造方法
	}
}

class Student {
	public void giveAge(int age) throws MyException {
		if(age>40 || age<16) {
			//throw new MyExcetpion("A");
			MyExcepiont my = new MyExcetpion("A");
			throw my;
		}
		else {
			System.out.println("B");
		}
	}
}

 Exception异常的分类
1,编译时被检测的异常,包括Exception子类RuntimeException以外的所有的异常,如果在函数上声明,调用时,没有处理方式,编译会报错,而且这种异常有针对性的处理方式,是可被处理的
2,编译时不被检测的异常:包括RuntimeException以及他的所有子类.该异常也称为运行时异常,如果功能声明了此异常,调用者可以不用任何处理方式.通过该异常不需声明,如果发生,就是需要程序停止,对代码进行修正

总结:

RuntimeException以及其子类如果在函数中被throw抛出,可以不用在函数上声明。
子类覆盖父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
如果父类抛出了多个异常,子类覆盖父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
如果被覆盖的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
当try对应多个catch时,最顶层的异常要放在最下面,反过来分析如果最顶层的异常放在第一行,那根据多态原理,后面的catch就没用了,一般面试的时候会这么问,开发的时候不会抛有继承关系的异常

原文地址:https://www.cnblogs.com/sooper/p/3417120.html