一. 异常(Exception)的分类
- 编译时期的异常:checked异常,在编译时期,就会检查,如果没有处理异常则编译失败.
- 运行时期异常:runtime异常,在运行时期,检查异常,在编译时期,运行异常不会编译报器检测
(不报错).运行异常:在编译时期:可处理,可不处理.
二. 返回错误结果throw
- 一般的,当一个方法出现不正常的情况的时候,我们不知道该方法应该返回一个什么,此时候
- 就返回一个错误,在catch语句块继续向上抛出异常.
return 是返回一个值,throw是返回一个错误,返回给该方法的调用者.
运用于方法内部,用于给调用者返回一个异常对象,和return一样会结束当前方法.
新建ThrowDemo.java
public class ThrowDemo {
public static void main(String[] args) {
try {
int num = 10;
int num1 = 5;
System.out.println(throwDemo(num,num1));
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
private static int throwDemo(int num, int num1) {
if (num1 == 0) {
throw new ArithmeticException("除数不能为零");
}
try {
return num / num1;
}catch(Exception e) {
System.out.println("异常");
}
return 0;
}
}
三. 声明抛出异常
-
thows:运用于方法声明之上,用于表达当前方法处理异常,而是提醒该方法的调用者来处理异常(抛出异常)
-
如果每一个方法都放弃处理异常都直接通过throws声明抛出,最后异常会抛到main方法,如果此时main
方法不处理,继续抛给JVM,底层的处理机制就是打印异常的跟踪栈信息. -
方法的覆盖(Override):
- 一同:方法的签名必须相同.
- 两小:
- 子类方法返回类型和父类方法返回类型相同,或是其子类
- 子类方法不能声明抛出新的异常
- 一大:子类方法的访问权限必须大于等于父类方法的访问权限.
新建ThrowsDemo.java
public class ThrowsDemo {
public static void main(String[] args) {
int num = 10;
int num1 = 0;
try {
System.out.println(throwsDemo(num,num1));
}catch(Exception e) {
e.printStackTrace();
}
}
//表示在本方法中不处理某种类型的异常,提醒调用者需要来处理异常
private static int throwsDemo(int num, int num1) throws Exception {
if (num1 == 0) {
throw new Exception("除数不能为零");
}
try {
return num / num1;
}catch(Exception e) {
System.out.println("异常");
}
return 0;
}
}