最近一直throw和throw new …… 获取头部罢工,要彻底生气清楚这件事,他对这个思想精华收集了很多网友。这里摘录.

throws全部异常信息
throw则是指抛出的一个详细的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息。而在方法(类)内部通过throw声明一个详细的异常信息。
throws通常不用显示的捕获异常,可由系统自己主动将全部捕获的异常信息抛给上级方法;
throw则须要用户自己捕获相关的异常,而后在对其进行相关包装,最后再将包装后的异常信息抛出。
对异常处理方式不同.throws对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最大范围,而cathch的范围又要大于throws的Exception的范围;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(…………);还有。连接数据库时会连接不上,你也不知道是驱动问题、电脑问题还是网络问题,发给用户。用户也看不懂,所以统统throws给catch,提示请与管理员联系。

。。

。。

。这就简单多了

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写在方法名的后面
throwkeyword的格式:throw new ArithmeticException(); 抛出一个异常。这些异常能够使unchecked exception(也就是RuntimeException),也能够是checked execption. throw必须有一个捕获该异常的try/catch语句
throwskeyword的格式
private void arrayMethod(int[] arr)
           throws ArrayIndexOutOfBoundsException,
                  ArithmeticException {
     //   Body
}
throws子句列出了方法可能抛出的异常类型。除了Error和RuntimeException异常,方法中可能抛出的异常必须在throws列表中声明,否则会有编译错误。

例如:如果方法可能引发IllegalAccessException(属于checked execption)你必须throws语句列表。

系统异常被抛出默认,要显示抛出一个自定义异常

其他的都只是一个图书馆的方法throw 无治疗,所以,表面上你看不到throw还catch异常

JAVA 异常 throw 与 throws的更多相关文章

  1. 【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析

    异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待,或死循环. 异常有两个过程,一个是抛出异常:一个是捕捉异常. 抛出异常 抛出异常有三种形式,一是throw, ...

  2. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  3. 再探Java基础——throw与throws

    http://blog.csdn.net/luoweifu/article/details/10721543 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待 ...

  4. 【Java基础】10、Java中throw和throws的区别

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

  5. java之throw和throws

    抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常.下面它们之间的异同. 一.系统自动抛异常 当程序语句出现一些逻辑错误.主义错误或类型转换错误时,系统会自动抛出异常:(举个 ...

  6. Java中throw和throws的区别【转】

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

  7. java中throw和throws的区别

    throw和throws的区别: throws 用在方法声明后面,跟的是异常类名 可以跟多个异常类名,用逗号隔开 表示抛出异常,由该方法的调用者来处理 throws表示出现异常的一种可能性,并不一定会 ...

  8. java中throw与throws

    类或函数声明,用throws表示,函数体中,可能抛出的错误,后接多个. 1.系统自动抛出的异常 系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常. 2.语句抛出的异常 用户程序自定义的异常和 ...

  9. java异常处理throw和throws的区别

    throws和throw区别 throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理. 而throw则是指抛出的一个具体的异常 ...

随机推荐

  1. SharePoint 2013 添加Ribbon菜单

    原文:SharePoint 2013 添加Ribbon菜单 前言:今天,我们尝试一下添加SharePoint2013的Ribbon菜单,这个Ribbon菜单是由XML定义,JavaScript脚本来实 ...

  2. VS2008让自己掌控的定义编译项目后,自己主动添加到工具箱

    在VS2008中,假设在项目里写了一个用户控件.编译后这个控件是不会自己主动出现到工具箱的.按例如以下设置就能够解决问题 工具=>选项=>Windows窗口设计器=>常规=>A ...

  3. Bootstrap(2)整体架构

    Bootstrap(2)整体架构 大多数Bootstrap的使用者都认为Bootstrap只提供了CSS组件 和JavaScript插件,其实CSS组件和JavaScript插件只是Bootstrap ...

  4. 文件类似的推理 -- 超级本征值(super feature)

         基于内容的变长分块(CDC)技术,能够用来对文件进行变长分块.而后用来进行反复性检測,广泛用于去重系统中.后来又出现了对相似数据块进行delta压缩,进一步节省存储开销. 所以就须要一种高效 ...

  5. 记2014“蓝桥杯全国软件大赛"决赛北京之行

    5月29,30日 最终到了这一天.晚上有数据结构课,10点多的火车,我们就没有去上课,下午在宿舍里收拾东西,晚上8点左右从南校出发,9点半多到达火车站和老师学长学姐们会和. 第一次去北京,第一次买的卧 ...

  6. Net 一个请求的处理流程

    Net 一个请求的处理流程   1.浏览器请求 请求-准备环境-->处理请求   2.Aspnet 环境的创建 客户请求 IIS区分静态文件还是动态文件,静态文件直接文件返回,动态文件通过asp ...

  7. 关于在同一母版页中使用多个CSS文件的解决方案

    原文:关于在同一母版页中使用多个CSS文件的解决方案 以前都用.NET1.1没遇到这问题,现在换了2.0开始学着使用母版,结果就遇到了这个问题,在百度上一搜索才发现有不少人提出这个问题,但没找到好的解 ...

  8. 银联+移动+三星PK微信、余额宝

    在不远的将来,你可以扔掉钱包,扔掉信用卡,揣着手机买东西. 银联.移动.三星这些不同的行业大佬,因为这个目标,被一款名叫NFC的支付技术连接在了一起. 这场游戏的参与者众多,一个合纵连横的时代正在到来 ...

  9. 怎样用OleDbDataAdapter来对数据库进行操作?

      请问怎样用OleDbDataAdapter来对数据库进行删除.改动和加入? OleDbDataAdapter是DataSet和数据源之间建立联系的重要纽带.用它我们能够对数据库进行删除.改动和加入 ...

  10. C语言移位运算符

    位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算.位移位运算符分为左移和右移两种,均为双目运算符.第一运算对象是移位对象,第二个运算对象是所移的二进制位数. 位移位运算符的运算对象 ...