`

throw、throws 对待异常的两种不同态度

    博客分类:
  • java
 
阅读更多

throws是用来声明一个方法可能抛出的所有异常信息
throw
则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws
通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw
则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后再将包装后的异常信息抛出。
对异常处理方式不同.throws对异常不处理,谁调用谁处理,throwsException的取值范围要大于方法内部异常的最大范围,cathch的范围又要大于throwsException的范围;throw 主动抛出自定义异常类对象. throws抛出的是类,throw抛出的是对象.

在方法定义中表示的是陈述语气,第三人称单数,throw 显然要加s(throws 一般用作方法定义的子句)
在函数体中要用throw,实际上是祈使句+强调,等价于DO throw ....,do +动词原形

throw 用于引发异常,可引发预定义异常和自定义异常。

I)异常中“throws”“throw”的区别:

throw 是个动词,紧接在try语句块之后。
throws 名词,用在函数方法名后 function A () throws Exception e {}
throw
用在程序中明确表示这里抛出一个异常。throws用在方法声明的地方,表示这个方法可能会抛出某异常。
throw
用来抛出实际的异常, 后面要跟一个异常对象(实例), 是一个实际的语句
throws
是用来声明的, 加在方法声明的后面, 后面跟一个异常类的名字, 表示一般性动作而不是特指某一个动作.

使用throws是来说明,当前的函数会抛出一个异常。
在一般的情况下,你调用的一些函数会抛出一些异常。但是你又不想在当前的context中去处理它,就可以声明该函数会抛出该异常,这样你就不用去try-catch它了。当出现该异常,该函数会抛出此异常,让上一层的函数去处理。throws也称异常规范
public static h() throws
{
     try
     {
         a.g();
     }
     catch(Exception e)
     {
         throw e;
     }
}
因为你没有对这个异常处理,而是简单的抛出了。
而单纯的声明
public static h() throws
{
     a.g();
}
也会抛出这个异常
II)try catch \throws \throw

throws如果发生了对应的错误后,下边的的确不会被执行;
try catch
的理解应该辩证点看:如果catch后没有再次throw出去,那会继续执行;要想不执行必须throw处理
throws  
抛出异常,解决不了再向上,直道碰到能解决这个异常的处理程序,就好像你的上司让你执行一项任务,中途你遇到问题不知道如何解决,你把问题返还给你的上司,认为既然是T分配的任务就该知道如何解决这个问题,你的上司无法解决同样把它送给经理解决,依次向上,直到有人能解决这个问题为止(不想自己另外写代码处理异常时非常有用)
try catch   
则是考虑到try包含这段代码可能会遇到这种异常,直接用catch捕获处理,catch包含的代码为处理代码

throws 只是把一个异常抛出去了,如果你的上层代码有处理方式,就由上层代码来处理这个异常。
try/catch对是清楚的知道该操作可能出现什么异常,同时在catch块中应该有处理的方法。
而且还有一种方式就是try/catch/finaly的方式。

Throws是把异常返回给调用者,由调用者处理,调用者还是要try/catch,跑不掉的
catch
中就一个简单的SYSTEM.OUT.PRINTLN…………);还有,连接数据库时会连接不上,你也不知道是驱动问题、电脑问题还是网络问题,发给用户,用户也看不懂,所以统统throwscatch,提示请与管理员联系。。。。。。这就简单多了

throws 写在方法签名后,
throw
写在方法体内,可以写在if()....
也可以catch住一个exception后立刻又把他throw 出去,什么处理也不做,还可以catch住后throw new 一个你自己定义的exception ....

throws 就是把异常抛出,但是在以后要不有个catch接受,要不就抛给主函数.就是逐级往上一级抛,直到有一个接受他的

Throws抛出异常交给调用该方法的方法 处理,即:
public class Test{
    public static void main(String[] args){
        Test2 test2 = new Test2();
        try{
           System.out.println("invoke the method begin!");
           test2.method();
           System.out.println("invoke the method end!");
        }catch(Exception e){
           System.out.println("catch Exception!");
        }
    }
}

class Test2{
    public void method() throws Exception{
        System.out.println("method begin!");
        int a = 10;
        int b = 0;
        int c = a/b;
        System.out.println("method end!");
    }
}

很明显,答案出来了:
invoke the method begin!
method begin!
catch Exception!

finally语句是任选的,try语句后至少要有一个catch或一个finally,finally语句为异常处理提供一个统一的出口,不论try代码块是否发生了异常事件,finally块中的语句都会被执行
在覆盖的方法中声明异常
在子类中,如果要覆盖父类的一个方法,或父类中的方法声明了throws异常,则子类的方法也可以抛出异常,但切记子类方法抛出的异常只能是父类方法抛出的异常的同类或子类。
如:
import java.io.*;
class A {
public void methodA()throws IOException{
.....
}
}
class B1 extends A {
public void methodA()throws FileNotFoundException{
....}
}
class B2 extends A {
public void methodA()throws Exception{//Error
....}
}


public void method() throws Exception {
try {
     
具体程序
} catch(Exception ex) {

}
}
如果具体程序出错的话,将处理下面程序体中catch的地方,这个时候throws Exception 其实是没有意义的。
public void method() throws Exception {
try {
     
具体程序
} catch(FileNotFoundException ex) {

}
}

如果具体程序出错的话,且是FileNotFoundException 的情况下,将处理下面程序体中catch的地方处理。
这个时候FileNotFoundException 以外的Exception 将通过 throws Exception throw到上一层。

throw写在方法体内, throws写在方法名的后面
throw
关键字的格式:throw new ArithmeticException(); 抛出一个异常,这些异常可以使unchecked exception(也就是RuntimeException),也可以是checked execption. throw必须有一个捕获该异常的try/catch语句
throws
关键字的格式
private void arrayMethod(int[] arr)
           throws ArrayIndexOutOfBoundsException,
                  ArithmeticException {
     //   Body
}
throws
子句列出了方法可能抛出的异常类型,除了ErrorRuntimeException异常,方法中可能抛出的异常必须在throws列表中声明,否则就会出现编译错误。
例如:假如方法中可能抛出IllegalAccessException(属于checked execption)则必须在throws列表中声明。

系统异常是默认抛出的,自己定义的异常要显示抛出

还有一些是库方法只throw 没有处理的,所以表面上你看到没有throwcatch到异常

 

分享到:
评论

相关推荐

    throws与throw的区别

    在Java编程中,throws和throw是兩個與异常处理相關的关键字,虽然它们都是用于处理异常的,但它们的使用场景和语法不同。下面我们将详细解释throws和throw的區別。 throws throws是方法抛出一个异常的声明,用于告...

    throws与throw区别

    本文将深入探讨“throws”与“throw”两个关键字的区别,以及它们在Java异常处理机制中的作用。 ### throws关键字 `throws`关键字主要用于方法签名中,用于声明一个方法可能会抛出的异常类型。当一个方法内部可能...

    java throws声明异常实例二

    `throws`关键字是Java中用于处理异常的一种方式,它被用来声明方法可能会抛出的异常。在这个“java throws声明异常实例二”中,我们将深入探讨`throws`关键字的使用以及它在实际编程中的应用。 首先,`throws`...

    java throws声明异常实例一

    在Java中,异常可以分为两大类:检查性异常(Checked Exceptions)和运行时异常(Unchecked Exceptions)。检查性异常如`FileNotFoundException`是必须处理的,因为它们是`java.lang.Exception`及其子类的一部分。...

    Java软件开发实战 Java基础与案例开发详解 10-4 使用throw和throws引发异常 共5页.pdf

    ### Java软件开发实战:使用...通过上述内容的学习,我们不仅掌握了`throw`和`throws`的基本用法,还了解了如何结合使用这两种语句来提高程序的健壮性和灵活性。这对于编写高质量、易于维护的Java应用程序至关重要。

    详解Java异常处理中throw与throws关键字的用法区别

    2. **异常处理方式**:`throws` 是一种异常处理的声明,表明方法可能抛出异常,但不处理;而 `throw` 是执行抛出,即明确地抛出一个已经创建好的异常实例。 3. **异常的确定性**:`throws` 表示异常可能是条件性的...

    java处理异常的机制关键字throw和throws使用解析

    Java处理异常的机制关键字throw和throws是Java语言中两个非常重要的机制关键字,它们都是用来处理异常的,但它们之间存在着明显的区别。下面我们将通过示例代码详细地介绍throw和throws的使用解析。 Throws关键字 ...

    21.javathrow抛出异常对象.zip

    21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21....

    简单了解Java关键字throw和throws的区别

    其中,throw和throws是两个重要的关键字,经常被用来处理异常情况。然而,许多初学者却对这两个关键字的区别感到困惑。下面,我们将通过实际示例代码,详细介绍throw和throws的区别,并讨论它们在编程实践中的应用。...

    Java中throws和throw的区别讲解.docx

    Java提供了多种方式来处理异常,其中`throw`和`throws`是最常用的两种。本文将详细介绍这两者的区别以及如何正确地使用它们。 #### 二、`throw`关键字 `throw`关键字用于在程序中明确地抛出一个异常对象。当程序...

    基于Java中throw和throws的区别(详解)

    在Java编程语言中,throw和throws是两个常用的关键字,用于处理异常和错误。但是,很多新手程序员对这两个关键字的区别不是很清楚。今天,小编将为大家详细解释throw和throws的区别。 throw关键字 throw关键字用于...

    java throw抛出异常实例二

    `throw`关键字在Java中被用来显式地抛出一个异常。当我们遇到一个预期之外的情况,或者某些条件不满足时,可以使用`throw`来中断当前的执行流程,并将控制权转移到能够处理这种情况的代码块。下面我们将详细讨论`...

    异常处理throws关键字

    ### 异常处理与`throws`关键字 在Java编程语言中,异常处理是软件开发过程中一个非常重要的概念,它能够帮助开发者有效地管理程序运行时可能出现的各种异常情况,从而确保程序的稳定性和健壮性。`throws`关键字是...

    throw和throws关键字的区别.xmind

    throw和throws关键字的区别

    Java throw和throws使用区别分析

    在Java编程语言中,`throw`和`throws`都是用于处理异常的重要关键字,但它们的用法和功能有所不同。理解这两个关键字的区别对于编写健壮的Java程序至关重要。 首先,我们来了解一下异常的基本概念。在Java中,异常...

    JAVA异常处理机制之throws/throw使用情况的区别

    在 Java 中,throws 和 throw 是两个常用的异常处理机制,但它们之间存在着一些区别。下面我们将通过示例代码和详细的解释来介绍 throws 和 throw 的使用情况和区别。 首先,throws 和 throw 的主要区别在于它们的...

    throw与throws(处理方案示例).md

    throw与throws(处理方案示例).md

    如何区分JAVA中的throws和throw

    Throws和throw是两个不同的概念,throws用来声明异常,而throw用来抛出异常。throws表示出现异常的一种可能性,并不一定会发生这些异常,而throw则是抛出了异常,执行throw则一定抛出了某种异常。 在方法中,我们...

    java throw抛出异常实例一

    `throw`关键字是Java中用于显式抛出异常的关键字。本实例将深入探讨如何使用`throw`来创建和处理自定义异常,以及它在实际编程中的应用。 首先,我们了解异常的基本概念。在Java中,异常是程序执行过程中遇到的不...

Global site tag (gtag.js) - Google Analytics