• java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)


    注意:想在catch的参数里使用自定义的异常,则必须先将这个异常抛出才行。(throws是具有抛出异常的能力,并未抛出,throw new MyException是抛出异常,catch是捕获异常,只有抛出,才能被捕获) 
     
    1 异常的抛出原理:
            java的错误其实也是一些类文件,它们之所以可以在程序出错时被抛出,是因为在你调用了某些方法的时候,为这些方法需要做一些预先的处理,比如你要调用一个对象的一个属性,如果你所调用的对象是空的话,那么程序是不可以执行的,但是又不能不告诉你,所以就用一个错误来提示你。
            异常被抛出,肯定是因为带有异常检查的方法被调用了,可以在构造方法,中进行指定,当别人调用这些方法的时候,并且没有通过检查,那么exception就会被抛出或者被捕获。而调用这个方法的方法,要么捕获要么继续抛出交给它的父类去处理。总之:只要是会出现异常的地方,只有两种处理方式,第一:使用try和catch进行捕获。第二:把错误交给父类去处理,就是throws exception。
            这些错误提示,或者在你所调用的方法里面有所定义,或者是在虚拟机JVM运行时候有所定义。在虚拟机运行时候抛出的异常就是 运行时异常,包括 NullPointExcetion,ClassCastException,IndexOutOfBoundsException。总之:它肯定是存在的,我们有时在想,我根本就没有在我自己定义类里面的方法上添加异常,可是它也会抛出异常,这是因为类在程序判断的时候,满足了某些条件,于是程序就自动实例化了一个错误的对象,然后把这个错误给抛了出来,比如说NullPointerException空指针异常,你可能会说这个错误的话,我找不到它定义在哪里啊?可是你要知道的是,你的方法终究是要运行的,当你运行的时候,虚拟机在执行方法的时候它是会进行检查的,它检查的时候当然也是调用方法了,而在调用之前,它会把对你将要调用的对象进行检查,如果有错就会实例化一个NullPointerException出来,检查是很容易理解的事情,就像你实例化了一个类,然后在运行的时候,对这个类的一些信息进行判断,只是jvm检查的比较复杂,但是思想肯定是一致的。
            
     2 异常的分析:
            在我们运行程序的时候,如果出现了,错误,那么异常信息会被打印出来,打印的时候的顺序是:先打印此类所在的继承链的父类的异常信息,之后再打印子类,以此类推。因为什么呢?因为对象实例化的过程也就是这个顺序,所以打印的时候顺序也是一样的,当然如果你已经对错误进行了处理的话,那么自然父类的错误就不会被打印出来了,所以说当出现异常的时候,那些最先打印出来的都是父类的信息,你出错的调用位置应该是在下边子类中。
         自定义异常:

     上面的分析可以知道,如果要自己定义异常的话,只需要自己定义一个类,这个类只需要集继承Exception类,然后你可以为这个类指定构造方法,根据你自己的需求去打印出你想提示的信息,在抛出的时候,也就是在执行条件判断后throw new MyException的时候,你可以指定异常的ID,这完全是你自己可以操作的事情,比如你想要在打印错误的同时,把错误的种类也打印出来就可以把下面的那个MyException的构造函数修改为:

    测试举例:

     
    1. <span style="font-size:14px;">package exception;  
    2.   
    3. public class MyException extends Exception {  
    4.   
    5.     private static final long serialVersionUID = 1L;  
    6.   
    7.     private int idNumber;  
    8.   
    9.     public int getIdNumber() {  
    10.         return idNumber;  
    11.   
    12.     }  
    13.   
    14.     public MyException(String exception, int id) {  
    15.         super(exception);  
    16.         this.idNumber = id;  
    17.     }  
    18.   
    19. }</span>  

    测试自定义错误:
     
    1. package exception;  
    2.   
    3. public class TestMyExeption {  
    4.     public void regist(int num) throws MyException {  
    5.         if (num < 0) {  
    6.             throw new MyException("人数为负数不合理!", 1);  
    7.         }  
    8.         System.out.println("throw 之后的程序不能执行" + num);  
    9.     }  
    10.   
    11.     /** 
    12.      * 把异常给抛出去,交给更高层处理 
    13.      *  
    14.      * @throws MyException 
    15.      */  
    16.     public void manager() throws MyException {  
    17.         regist(-100);  
    18.     }  
    19.   
    20.     /** 
    21.      * 把异常给截获并处理 
    22.      */  
    23.     public void manager1() {  
    24.         try {  
    25.             regist(-1330);  
    26.         } catch (MyException e) {  
    27.             // 在处理错误的时候,可以根据自己的需要去打印错误的信息  
    28.             System.out.println("出错了,错误的编号:" + e.getIdNumber());  
    29.         }  
    30.         System.out.println("程序可以继续执行!");  
    31.     }  
    32.   
    33.     public static void main(String[] args) throws MyException {  
    34.         new TestMyExeption().manager();  
    35. //      new TestMyExeption().manager1();  
    36.     }  
    37.   
    38. }  

    抛出 Exception:
     
    1. package exception;  
    2.   
    3. import java.util.Scanner;  
    4.   
    5. public class TestThrow {  
    6.     public static void main(String[] args) {  
    7.         TestThrow t = new TestThrow();  
    8.         System.out.print("请输入您的年龄:");  
    9.         System.out.println("您的年龄:" + t.inputAge());  
    10.     }  
    11.   
    12.     public int inputAge() {  
    13.         int result = -1;  
    14.         Scanner scan = new Scanner(System.in);  
    15.         while (true) {  
    16.             try {  
    17.                 result = scan.nextInt();  
    18.                 if (result < 0 || result > 130) {  
    19.                     Exception me = new Exception("年龄超出合理范围!");  
    20.                     throw me;  
    21.                 }  
    22.                 break;  
    23.             } catch (Exception e1) {  
    24.                 System.out.print(e1.getMessage() + "请重新输入:");  
    25.                 continue;  
    26.             }  
    27.         }  
    28.         return result;  
    29.     }  
    30. }  
     参考来源:http://blog.csdn.net/tengdazhang770960436/article/details/7037190
  • 相关阅读:
    论文总结
    尝试为有限元模拟加入场的控制
    关于maya动力学系统的一些总结
    实现了与maya场交互的能力
    selenium 3.0鼠标事件 (java代码)
    selenium 常用浏览器操作API
    selenium 3.0与2.0 打开火狐浏览器的区别
    testng+IEDriverServer+yum+tomcat下载软件包
    yum,httpd,php环境搭建方法
    PHP文件环境搭建—EcShop环境搭建
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/6738200.html
Copyright © 2020-2023  润新知