1.异常
异常概述
Throwable类是Java语言中所有错误和异常的超类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。 对于异常,编译时检查的目的Throwable和任何子类Throwable ,是不是也无论是子类RuntimeException或者Error被视为检查的异常。
两个子类的实例Error和异常通常用于表示出现异常情况。 通常,这些实例是在特殊情况的上下文中新创建的,以便包括相关信息(如堆栈跟踪数据)。
Error:
一个Error是的子类Throwable表示严重的问题,合理的应用程序不应该试图捕获。 大多数这样的错误是异常情况。 ThreadDeath错误,虽然是“正常”条件,也是Error一个子类,因为大多数应用程序不应该试图抓住它。
一个方法不需要在其throws子句中声明在执行方法期间可能抛出的Error子类,但是没有被捕获,因为这些错误是不应该发生的异常条件。 也就是说, Error及其子类被视为未经检查的异常,用于编译时检查异常。
异常:
异常及其子类是Throwable的形式,表示合理应用程序可能想要捕获的条件。
异常类和不是RuntimeException的子类的任何子类都是检查异常 。 检查的异常需要在方法或构造函数的throws子句中声明,如果它们可以通过执行方法或构造函数抛出,并在方法或构造函数边界之外传播。
RuntimeException:
RuntimeException是在Java虚拟机的正常操作期间可以抛出的异常的超类。
RuntimeException及其子类是未经检查的异常(编译期间不需要检查) 。 unchecked异常不需要在方法或构造函数的拟申报throws条款,如果他们可以通过该方法或构造函数的执行被抛出和方法或构造边界之外传播。
public class ExceptionDemo01 {
public static void main(String[] args) {
method();
}
public static void method() {
int[] arr = {1, 2, 3};
// System.out.println(arr[1]);
// System.out.println(arr[3]); //ArrayIndexOutOfBoundsException,RuntimeException
System.out.println(arr[2]);
}
}
JVM的默认处理方案
try…catch
Throwable的成员方法
编译时异常和运行时异常区别
public class ExceptionDemo03 {
public static void main(String[] args) {
// method();
method2();
}
//编译时异常
public static void method2() {
try {
String s = "2048-08-09";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s);
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
}
//运行时异常
public static void method() {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
}
}
异常出来之throws
public class ExceptionDemo {
public static void main(String[] args) {
System.out.println("开始");
// method();
try {
method2();
}catch (ParseException e) {
e.printStackTrace();
}
System.out.println("结束");
}
//编译时异常
public static void method2() throws ParseException {
String s = "2048-08-09";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s);
System.out.println(d);
}
//运行时异常
public static void method() throws ArrayIndexOutOfBoundsException {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
}
}
自定义异常
ScoreException
public class ScoreException extends Exception {
public ScoreException() {}
public ScoreException(String message) {
super(message);
}
}
Teacher
public class Teacher {
//由于父类是Exception,所以必须显示抛出ScoreException
public void checkScore(int score) throws ScoreException {
if(score<0 || score>100) {
// throw new ScoreException();
throw new ScoreException("你给的分数有误,分数应该在0-100之间");
} else {
System.out.println("成绩正常");
}
}
}
Demo
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入分数:");
int score = sc.nextInt();
Teacher t = new Teacher();
try {
t.checkScore(score);
} catch (ScoreException e) {
e.printStackTrace();
}
}
}
throws和throw区别