• throws和throw抛出异常的使用规则


    一直对java中的throws和throw不太理解。最近一直在查这两个方面的资料,算是能明白一点吧。如果我下面的观点哪有不对,希望指出来,我加以改进。

        
       throw:(针对对象的做法)
       抛出一个异常,可以是系统定义的,也可以是自己定义的。下面举两个例子:
       
    抛出Java中的一个系统异常:
    public class One {
    public void yichang(){
    NumberFormatException e = new NumberFormatException();
    throw e;
    }
    public static void main(String[] args){
    One test = new One();
    try{
    test.yichang();
    }catch(NumberFormatException e){
    System.out.println(e.getMessage());
    }
    }
    }
     
    抛出一个自定义的异常:
     
    public class People {
     public static int check(String strage) throws MyException{
     int age = Integer.parseInt(strage);
     if(age < 0){
     throw new MyException("年龄不能为负数!");
     }
     return age;
     }
     public static void main(String[] args){
     try{
     int myage = check("-101");
     System.out.println(myage);
     }catch(NumberFormatException e){
     System.out.println("数据格式错误");
     System.out.println("原因:" + e.getMessage());
     }catch(MyException e){
     System.out.println("数据逻辑错误");
     System.out.println("原因:" + e.getMessage());
     }
     }
    }
    public class MyException extends Exception{
     private static final long serialVersionUID = 1L;
     private String name;
     public MyException(String name){
     this.name = name;
     }
     public String getMessage(){
     return this.name;
     }
    }
     
        throws:(针对一个方法抛出的异常)
        抛出一个异常,可以是系统定义的,也可以是自己定义的。
     
    抛出java中的一个系统异常:
    public class One {
    public void yichang() throws NumberFormatException{
    int a = Integer.parseInt("10L");
    }
    public static void main(String[] args){
    One test = new One();
    try{
    test.yichang();
    }catch(NumberFormatException e){
    System.out.println(e.getMessage());
    }
    }
    }
     
    抛出一个自定义异常:
     
    public class People {
    public static int check(String strage) throws MyException{
    int age = Integer.parseInt(strage);
    if(age < 0){
    throw new MyException("年龄不能为负数!");
    }
    return age;
    }
    public static void main(String[] args){
    try{
    int myage = check("-101");
    System.out.println(myage);
    }catch(NumberFormatException e){
    System.out.println("数据格式错误");
    System.out.println("原因:" + e.getMessage());
    }catch(MyException e){
    System.out.println("数据逻辑错误");
    System.out.println("原因:" + e.getMessage());
    }
    }
    }
     
    public class MyException extends Exception{
    private static final long serialVersionUID = 1L;
    private String name;
    public MyException(String name){
    this.name = name;
    }
    public String getMessage(){
    return this.name;
    }
    }
     
    那么下面我要说究竟什么时候用哪种:
     
     如果是系统异常的话可以什么都不用做,也可以针对方法抛出一个异常,因为系统异常是可以被系统自动捕获的,所以这个异常究竟是要在方法内部解决还是交给上层函数去解决其实效果是一样的。但是我查了很多资料,即使会抛出异常能被系统所捕获的话还是建议针对方法写一个throws,因为这样在完成一个大型任务的时候可以让别的程序员知道这里会出现什么异常。
     
    如果是自己定义的异常,则必须要用throws抛出该方法可能抛出的异常,否则编译会报错。
  • 相关阅读:
    spark集群安装部署
    CentOS7 下安装GUI图形界面GNOME
    Wininet请求包装类简稿
    Wininet下载类初稿
    MAC 编制计划任务
    弹出式窗口管理单元备忘
    rc资源文件的中英文应用备忘
    自备工具库
    界面方面的备忘
    多屏开发的备忘
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/4926106.html
Copyright © 2020-2023  润新知