目录
- java.lang.Throwable
- |-----java.lang.Error:一般不编写针对性的代码进行处理。
- |-----java.lang.Exception:可以进行异常的处理
- |------编译时异常(checked)
- |-----IOException
- |-----FileNotFoundException
- |-----ClassNotFoundException
- |------运行时异常(unchecked,RuntimeException)
- |-----NullPointerException
- |-----ArrayIndexOutOfBoundsException
- |-----ClassCastException
- |-----NumberFormatException
- |-----InputMismatchException
- |-----ArithmeticException
编译时异常:执行javac.exe命令时,可能出现的异常
运行时异常:执行java.exe命令时,出现的异常
- //******************以下是运行时异常***************************
- //ArithmeticException 出现异常的运算条件
- @Test
- public void test6(){
- int a = 10;
- int b = 0;
- System.out.println(a / b);
- }
-
- //InputMismatchException
- @Test
- public void test5(){
- Scanner scanner = new Scanner(System.in);
- int score = scanner.nextInt();
- System.out.println(score);
-
- scanner.close();
- }
-
- //NumberFormatException
- @Test
- public void test4(){
-
- String str = "123";
- str = "abc";
- int num = Integer.parseInt(str);
-
-
-
- }
-
- //ClassCastException
- @Test
- public void test3(){
- Object obj = new Date();
- String str = (String)obj;
- }
-
- //IndexOutOfBoundsException
- @Test
- public void test2(){
- //ArrayIndexOutOfBoundsException
- // int[] arr = new int[10];
- // System.out.println(arr[10]);
- //StringIndexOutOfBoundsException
- String str = "abc";
- System.out.println(str.charAt(3));
- }
-
- //NullPointerException
- @Test
- public void test1(){
-
- // int[] arr = null;
- // System.out.println(arr[3]);
-
- String str = "abc";
- str = null;
- System.out.println(str.charAt(0));
-
- }
-
- //******************以下是编译时异常***************************
- @Test
- public void test7(){
- File file = new File("hello.txt");
- FileInputStream fis = new FileInputStream(file);
-
- int data = fis.read();
- while(data != -1){
- System.out.print((char)data);
- data = fis.read();
- }
-
- fis.close();
-
- }
过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出。 一旦抛出对象以后,其后的代码就不再执行。
关于异常对象的产生:
过程二:"抓":可以理解为异常的处理方式:① try-catch-finally ② throws
- try{
- //可能出现异常的代码
-
- }catch(异常类型1 变量名1){
- //处理异常的方式1
- }catch(异常类型2 变量名2){
- //处理异常的方式2
- }catch(异常类型3 变量名3){
- //处理异常的方式3
- }
- ....
- finally{
- //一定会执行的代码
- }
-
使用说明:
常用的异常对象处理的方式: ① String getMessage() ② printStackTrace()
总结:如何看待代码中的编译时异常和运行时异常?
finally的再说明:
"thros + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后的异常类型时,就会被抛出。异常代码后续的代码,就不再执行!
方法重写的规则之一:子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
在程序执行中,除了自动抛出异常对象的情况之外,我们还可以手动的throw一个异常类的对象。
- class Student{
-
- private int id;
-
- public void regist(int id) throws Exception {
- if(id > 0){
- this.id = id;
- }else{
- //手动抛出异常对象
- throw new RuntimeException("您输入的数据非法!");
- }
-
- }
-
- @Override
- public String toString() {
- return "Student [id=" + id + "]";
- }
- }
- public class MyException extends Exception{
-
- static final long serialVersionUID = -7034897193246939L;
-
- public MyException(){
-
- }
-
- public MyException(String msg){
- super(msg);
- }
- }