• 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抛出该方法可能抛出的异常,否则编译会报错。
  • 相关阅读:
    springMVC3学习(二)--ModelAndView对象
    springMVC3学习(一)--框架搭建
    JS作用域
    JS阻止事件冒泡
    Oracle常用函数
    Oracle中复制表结构和表数据
    转:JavaBean 、 Serverlet 总结
    form插件ajaxForm和ajaxSubmit方法传递对象参数说明
    http status 汇总
    浅谈HTTP中Get与Post的区别
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/4926106.html
Copyright © 2020-2023  润新知