1.生活中的异常
如突发的疾病
2.Java中的异常
程序在自上而下执行的时候,发生了不可预期的事件,这个事件阻止了程序的正常运行,这就是异常。如数组下标越界,类转换异常。
Java提供了一个类Throwable,这是所有异常类的父类。
3.Throwable类
3.1构造方法及成员方法
构造方法 | 作用 |
---|---|
Throwable(); | 构造一个新的可抛出的异常对象,其详细信息为null |
Throwable(String message); | 构造一个新的可抛出的异常对象,其详细信息为指定的message |
成员方法 | 返回值类型 | 作用 |
---|---|---|
getMessage(); | String | 获取异常对象的详细信息 |
printStackTrace(); | void | 输出异常的详细信息 |
toString(); | String | 获取异常的简略信息 |
3.2代码示例:
public class Demo1 {
public static void main(String[] args) {
//构造一个异常对象1
Throwable throwable1 = new Throwable();
//输出异常的详细信息
System.out.println(throwable1.getMessage()); //null
//构造一个异常对象2
Throwable throwable2 = new Throwable("哈哈");
System.out.println(throwable2.getMessage());
/*
* java.lang.Throwable: 哈哈
at com.qfedu.b_trhowable.Demo1.main(Demo1.java:7)
*/
throwable2.printStackTrace(); //java.lang.Throwable: 哈哈
System.out.println(throwable2.toString()); //哈哈
}
}
4.错误Error和异常Exception
Throwable下面有两个子类,一个叫Error(错误),一个叫Exception(异常)。
Error:代表JVM本身的错误,程序员无法通过代码来解决。
Exception:代表程序运行过程中出现的不可预期的事件,可以通过Java代码解决问题。
异常分类:
编译时异常:如FileNotFoundException,SQLException,ClassNotFoundException,InterruptException等。
运行时异常:如 ArrayIndexOutOfBoundException,ClassCastException,NullPointerException等。
5.异常Exception
对于代码中出现的异常,Java给出了两种解决方案:
1.异常的捕捉
2.异常的抛出
5.1异常的捕捉
语法格式:
try {
//有可能出现异常的代码
} catch (Exception e) {
//针对异常的处理方式
}
执行流程:对于有可能出现异常的代码,如果确实出现异常情况,则执行catch语句体,同时代码继续向下执行;如果没有出现指定的异常,则代码正常执行。
异常参数是多态的运用。
代码示例:
public class Demo2 {
public static void main(String[] args) {
int[] arr = new int[2];//数组的容量是2
test(1, 0, arr);
}
public static void test (int a, int b, int[] arr) {
int ret = 0;
try {
//有可能出现的异常的代码
ret = a / b;
arr[2] = 89;
} catch (Exception e) {
System.out.println("123");
System.out.println(e.getMessage());
}
System.out.println(4 + 8);
}
}
【拓展】try-catch-finally
public class Demo3 {
public static void main(String[] args) {
int[] arr = new int[2];
test(1, 0, arr);
}
public static void test (int a, int b, int[] arr) {
int ret = 0;
try {
ret = a / b;
arr[2] = 89;
} catch (Exception e) {
System.out.println("123");
System.out.println(e.getMessage());
} finally {
//无论有没有异常,最终都要执行
System.out.println(4 + 8);
}
}
}
5.2异常的抛出
在代码出现异常的地方进行异常的抛出。
如果异常的抛出的话,一旦发生异常,从出现异常的地方会终止代码。
使用两个关键字:
throw: 在方法中自己创建一个异常对象并抛出给jvm虚拟机。
throws: 在方法的声明处书写,告知使用者当前方法可能存在异常的抛出。
代码示例:
import java.io.FileNotFoundException;
public class Demo4 {
public static void main(String[] args) throws Exception{
test(0);
Thread.sleep(1000);
}
//在方法声明处示意此方法可能存在异常的抛出
public static void test (int a) throws FileNotFoundException{
if (a == 0) {
//当a等于0时,抛出一个异常
throw new FileNotFoundException();
}
System.out.println("jvm xixi");
}
}
6.自定义异常
Java提供了很多的异常对象,但是有时还是满足不了现实生活的需求,因此可以自己通过继承类Exception创建异常对象。
案例:如果是单身,就抛出一个异常:单身异常类
//定义一个异常类继承Exception类
class SingleException extends Exception{
public SingleException () {}
public SingleException (String message) {
super(message);
}
}
public class Demo5 {
public static void main(String[] args) {
try {
buy(false);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void buy (boolean flag) throws Exception{
//true表示是单身 false表示不是单身
if (flag) {
throw new Exception("如果你是单身狗,就不卖给你戒指!!!");
}
System.out.println("情侣买一送一!!!!");
}
}