`
lunaedge
  • 浏览: 32237 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

throws和throw有什么区别?

    博客分类:
  • Java
Go 
阅读更多
 

throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。

通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。

throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。

如果在方法中会有异常被抛出而你又不希望在这个方法体内对此异常进行处理,可以使用throws在声明方法的时候同时声明他可能会跑出的异常。比如:

public void go() throws SQLException{
      ...
      Connection conn = ds.getConnection();
      ...
}
 
本来ds.getConnection()将可能会抛出SQLException,但现在使用throws 在方法名处声明了,所以在方法体中就不需要 try/catch 块来处理SQLException 了

throws语句
throws用来标明一个成员函数可能抛出的各种"异常"。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的"异常"的类型。如果"异常"的类型是Error或RuntimeException,或它们的子类,这个规则不起作用,因为这copy;在程序 的正常部分中是不期待出现的。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。这就重新定义了成员函数的定义语法:type method-name(arg-list) throws exception-list { }下面是一段程序,它抛出了一个"异常", 但既没有捕捉它,也没有用throws来声明。这在编译时将不会通过。

class ThrowsDemo1 { 
        static void procedure( ) {

        System.out.println("inside procedure"); 
        throw new IllegalAccessException("demo");
       } 
        public static void main(String args[]) { 
        procedure( ); 
       } 
}
 

为了让这个例子编译过去,我们需要声明成员函数procedure抛出了
IllegalAccessException,并且在调用它的成员函数main里捕捉它。下面是正确的例 子:
class ThrowsDemo{ 

   static void procedure( ) throws IllegalAccessException { 
        System.out.println("inside procedure"); 
        throw new IllegalAccessException("demo"); 
      } 

  public static void main(String args[]) { 
      try  { 
            procedure( ); 
      }
      catch (IllegalAccessException e) { 
            System.out.println("caught " + e); 
      } 
  } 
} 
 

下面是输出结果: C:\>java ThrowsDemo inside procedure caught
java.lang.IllegalAccessException: demo

1.两者位置不同.
2.对异常处理方式不同.throws对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最大范围,而cathch的范围又要大于throws的Exception的范围;throw 主动抛出自定义异常类对象.
3.throws抛出的是类,throw抛出的是对象.

分享到:
评论
3 楼 无心流泪wan 2012-08-16  
讲的很真切!  [size=large]
2 楼 wpf523 2012-08-06  
赞赞赞,真的讲的不错!
“对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的"异常"的类型。如果"异常"的类型是Error或RuntimeException,或它们的子类,这个规则不起作用,因为这copy;在程序 的正常部分中是不期待出现的。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。”
就是上面这句话 不太理解
1 楼 jianwokaixin 2009-11-17  
恩  看来是终于是找到一个说的比较清楚的了

相关推荐

    throws与throw的区别

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

    throws与throw区别

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

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

    Java关键字throw和throws的区别 Java是一种面向对象的编程语言,具有强大且灵活的特性。其中,throw和throws是两个重要的关键字,经常被用来处理异常情况。然而,许多初学者却对这两个关键字的区别感到困惑。下面,...

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

    ### Java中throws与throw的区别详解 #### 一、概述 在Java编程语言中,异常处理是一种重要的机制,用于处理程序运行过程中可能出现的各种错误情况。Java提供了多种方式来处理异常,其中`throw`和`throws`是最常用...

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

    下面我们将通过示例代码和详细的解释来介绍 throws 和 throw 的使用情况和区别。 首先,throws 和 throw 的主要区别在于它们的使用位置和作用。throws通常出现在方法函数头,而 throw 则出现在函数体中。throws ...

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

    以下是 `throw` 和 `throws` 的一些关键区别: 1. **位置不同**:`throws` 关键字通常出现在方法签名后面,声明该方法可能抛出的异常;而 `throw` 关键字出现在方法体内,用于实际抛出异常。 2. **异常处理方式**...

    如何区分JAVA中的throws和throw

    Throws和throw是Java中两个非常重要的异常处理机制,但它们之间的区别却经常让新手感到困惑。下面,我们将详细介绍如何区分JAVA中的throws和throw。 Throws Throws是Java中的一种异常声明机制,它用来声明一个...

    简单讲解java中throws与throw的区别

    Java 中的异常处理是 Java 编程中非常重要的一部分,throws 和 throw 语句是 Java 异常处理中两个最重要的语句,但许多人容易混淆它们的使用场景和区别。下面我们就来详细讲解 Java 中 throws 与 throw 的区别。 一...

    throw和throws关键字的区别.xmind

    throw和throws关键字的区别

    Java throw和throws使用区别分析

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

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

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

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

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

    throws与throw关键字.md

    异处理中的两个相近的关键字

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

    ### Java软件开发实战:使用throw和throws引发异常 #### 1. Java异常处理基础 在Java编程中,异常处理是一项非常重要的技术,用于处理程序运行过程中可能出现的各种异常情况。异常处理主要包括异常的捕获、处理...

    Java的throw和return

    ### Java的throw和return 在Java编程语言中,`throw`和`return`是两个非常重要的关键字,它们分别用于处理异常和返回方法的结果。本文将详细介绍这两个关键字的用法、特点以及它们与`finally`块之间的关系。 #### ...

    Java中throws用法总结

    在Java中,异常处理主要依赖于以下五个关键字:`try`, `catch`, `throw`, `throws`, 和 `finally`。其中,`throws`用于声明一个方法可能抛出的异常类型,从而让调用者能够做好相应的准备或者处理这些异常。 #### `...

    异常处理throws关键字

    总之,`throws`关键字是Java异常处理机制中一个非常实用的功能,它可以帮助开发者更好地管理和控制异常情况,从而使程序更加健壮和易于维护。在实际开发中,合理地使用`throws`关键字不仅可以提高代码的质量,还可以...

    200个Java经典面试题总结附带答案.docx

    16. `throw` 和 `throws` 的区别?(`throw` 用于抛出异常,`throws` 用于声明异常) 17. `final`、`finally`、`finalize` 有什么区别?(`final` 修饰变量、方法、类,`finally` 用于异常处理,`finalize` 用于垃圾...

Global site tag (gtag.js) - Google Analytics