异常即是在代码运行期间,程序没有按照原本的计划执行,发生了错误,我们用异常对象表示。
在代码编写期间导致的代码编译错误,被称为编译错误,不是异常。
Throwable(所有异常的父类)
Exception(代码允许出现的不正常情况,可以给出解决方案)
...
...
Error(对于非常严重的问题,我们用Error来进行描述)
...
...
throw和throws
throw表示抛出一个异常,真正遇到了某个异常,使用该方法抛出异常。若异常没有被捕获,将抛出到控制台上,throw产生作用后,具有结束当前方法的效果。
throws用于声明在方法运行过程中可能存在的异常,当调用者使用该方法是,需要给出解决方案或同样抛出该方法中可能出现的异常,让下一个调用者去解决
public class TestException {
public void sum(int a,int b) throws OneException,TwoException {
System.out.println("准备执行");
if (a<0){
throw new OneException("变量一错误");
}
if(b<0){
throw new TwoException("变量二错误");
}
System.out.println(a+b);
}
}
在主方法中创建该对象并同样声明可能出现的异常不给出解决方案
public class Test01 {
public static void main(String[] args) throws TwoException, OneException {
TestException te = new TestException();
te.sum(-1,6);
}
}
try {
} catch () {
}finally {
}
try中一旦出现了异常,catch会对()指定的异常就行捕捉,成功捕捉后将不会在控制台抛出异常,没有异常则正常执行,try后可以跟多个catch进行异常的捕捉并给出解决方案,被捕捉异常的类型通常从小到大,finally表示最后。
在上述方法中,在主方法中创建对象后对可能出现的异常进行捕获并给出解决方案
public class Test01 {
public static void main(String[] args) throws TwoException, OneException {
TestException te = new TestException();
try {
te.sum(1,-2);
} catch (OneException e) {
System.out.println("1");
e.printStackTrace();
} catch (TwoException e){
System.out.println("2");
e.printStackTrace();
System.out.println("3");
}finally {
System.out.println("了解");
}
}
}
注意:
1、当方法只声明异常而不提供解决方法(即不捕捉异常),在程序的运行过程中遇到该异常会报错并返回code -1。
2、当对异常进行了捕获时,可以选择不在控制台打印异常信息。当使用了e.printStackTrace()进行打印时,异常的打印将被程序放在最后执行,并返回code 0。
当遇到相同类型的异常时,由于throw关键字的作用,该异常自会被抛出一次,并且在一个catch中只能捕捉一次。所以通常我们需要自定义异常。只需要继承Exception类并实现超类的构造方法即可。
public class OneException extends Exception{
public OneException() {
}
public OneException(String message) {
super(message);
}
public OneException(String message, Throwable cause) {
super(message, cause);
}
public OneException(Throwable cause) {
super(cause);
}
public OneException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
运行时异常。
1、一些程序在运行中出现的问题,不需要给出解决方案,调用者也不用声明该异常
2、遇到该异常时让程序自然报错