java04四 、异常
1.异常
1.1.1 异常的体系结构
|
Throwable |
Error |
|
|
Exception |
RuntimeException |
|
|
非RuntimeException |
Error严重错误不需要处理
Exception称为异常类,表示程序本身可以处理的问题
RuntimeException:运行时异常
非RuntimeException:编译时异常。编译不通过,必须处理
1.1.2 常见的编译时异常
1.FileNotFoundException
2.ClassNotFoundException
3.SQLException
4.NoSuchFieldException
5.NoSuchMethodException
6.ParseException
1.1.3 常见的运行时异常
1.NullPointerException
2.ArithmeticException
3.ClassCastException
4.ArrayIndexOutOfBoundsException
5.StringIndexOutOfBoundsException
1.2 JVM默认处理异常的方式
如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
(1)把异常的名称,错误原因及异常出现的位置等信息输出在了控制台。
(2)程序停止执行
1.3 异常的处理方案一:try catch
定义格式:
try { 可能出现异常的代码;}
catch(异常类名 变量名) { 异常的处理代码;}
执行流程:
程序从 try 里面的代码开始执行,出现异常,就会跳转到对应的 catch 里面去执行,执行完毕之后,主程序还可以继续往下执行
示例:
public class ExceptionDemo01 {
public static void main(String[] args){
System.out.println("开始");
method();
//method方法出现异常,处理之后回到主程序继续执行
System.out.println("结束");
}
public static void method() {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
System.out.println("这里能够访问到吗");
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("数组索引不存在,请回去修改"); e.printStackTrace();
}
}}
1.4 异常的处理方案二:Throws
(一)定义格式:
public void 方法() throws 异常类名 { }
(二)注意事项:
(1)编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理
(2)运行时异常可以不处理,出现问题后,需要我们回来修改代码
(三)示例代码
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]);
}}
1.5 自定义异常
格式:
public class 异常类名 extends Exception{}
1.6 throws和throw的区别
throws
用在方法声明后,跟异常类名;
表示抛出异常,由方法的调用者处理;
不一定抛出异常。
throw:
用在方法体内;
表示抛出异常,由方法体内的语句处理;
一定抛出异常。
示例代码:
public class Teacher {
public void checkScore(int score) throws ScoreException {
if(score<0 || score>100) {
throw new ScoreException("分数应在0-100之间");
}
}}
浙公网安备 33010602011771号