zoukankan      html  css  js  c++  java
  • Java 错误结果Throw/Throws

    目录

        java处理异常方式
        throw的作用
        throws的作用
        方法原理
        举例
        总结

        个人实例

    1.java处理异常方式

    在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出,比如:

    int i= 1;  
    int j = 0;  
    int res = 0;  
    res = i/j;//除0错误  
    System.out.println(res);
    

     这5句代码运行到第四句会中断,因为jvm抛出了异常

    2.throw的作用

    手动抛出异常但是有时候有些错误在jvm看来不是错误,比如说
    int age = 0;  
    age = -100;  
    System.out.println(age);
    

     很正常的整形变量赋值,但是在我们眼中看来就不正常,谁的年龄会是负的呢。所以我们需要自己手动引发异常,这就是throw的作用

    int num1=10;
    int num2=0;
    int rest=num1/num2;    
    if(num2=0){  
    throw new ArithmeticException("年龄不能是负数!");//创建异常对象 ,抛出异常。ArithmeticException是除数为0出现异常
    }  
    System.out.println(age);

     3.throws的作用

    声明方法可能回避的异常有异常被抛出了,就要做处理,所以java中有try-catch可是有时候一个方法中产生了异常,但是不知道该怎么处理它,那么就放着不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。这个有点像下属处理不了的问题就交到上司手里一样,这种情况称为回避异常但是这使得调用这个方法就有了危险,因为谁也不知道这个方法什么时候会丢一个什么样的异常给调用者,所以在定义方法时,就需要在方法头部分使用throws来声明这个方法可能回避的异常

    void fun()throws IOException,SQLException  
    {  
    ...  
    }
    

     这表示 fun方法可能会丢两个异常出来,那么在调用fun的时候就会做好准备,比如可以这样

        try  
        {  
        fun();  
        }catch(IOException e)  
        {  
        }catch(SQLException e)  
        {  
        }  
    

    4.方法原理

    系统自动抛出的异常

    所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。

    语句抛出的异常  用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。

    throw是语句抛出一个异常。 语法:throw (异常对象);          throw e;

    throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常) 语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}             public void doA(int a) throws Exception1,Exception3{......}

    5.举例:

    throws E1,E2,E3只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常E1,E2,E3可能是该函数体产生的。 throw则是明确了这个地方要抛出这个异常。

    void doA(int a) throws Exception1,Exception3{  
               try{  
                     ......  
               }catch(Exception1 e){  
                  throw e;  
               }catch(Exception2 e){  
                  System.out.println("出错了!");  
               }  
               if(a!=b)  
                  throw new  Exception3("自定义异常");  
    }
    

     代码块中可能会产生3个异常,(Exception1,Exception2,Exception3)。如果产生Exception1异常,则捕获之后再抛出,由该方法的调用者去处理。如果产生Exception2异常,则该方法自己处理了(即

    System.out.println("出错  了!");)。所以该方法就不会再向外抛出Exception2异常了,void doA() throws Exception1,Exception3 里面的Exception2也就不用写了。而Exception3异常是该方法的

    某段逻辑出错,程序员自己做了处理,在该段逻辑错误的情况下抛出异常Exception3,则该方法的调用者也要处理此异常。

        throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。

        throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。throw是具体向外抛异常的动作,所以它是抛出一个异常实例。

        throws说明你有那个可能,倾向。throw的话,那就是你把那个倾向变成真实的了。

    6.总结

    1、throws出现在方法函数头;而throw出现在函数体。

    2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。

    3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

    7.个人实例

  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/jiangxifanzhouyudu/p/6663502.html
Copyright © 2011-2022 走看看