最近一直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异常

转载于:https://www.cnblogs.com/mengfanrong/p/4589705.html

JAVA 异常 throw 与 throws相关推荐

  1. java throw与throws_基于Java中throw和throws的区别(详解)

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

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

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

  3. java里throws详细讲解,基于Java中throw和throws的区别(详解)

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

  4. java中throw与throws的区别

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

  5. java的throw_浅谈Java的throw与throws

    浅谈Java异常 以前虽然知道一些异常的处理,也用过一些,但是对throw和throws区别还是有不太清楚.今天用实例测试一下 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被 ...

  6. Java中throw和throws的区别

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

  7. Java中throw和throws有什么区别?

    一.说明: 1.throw 在方法体内使用,throws 在方法声明上使用: 2.throw 后面接的是异常对象,只能接一个.throws 后面接的是异常类型,可以接多个,多个异常类型用逗号隔开: 3 ...

  8. Java之throw和throws的区别

    throw和throws的区别 共同点 区别 总结 共同点 两者在抛出异常时,抛出异常的方法并不负责处理,顾名思义,只管抛出,由调用者负责处理. 区别 (1)throws用于方法头,表示的只是异常的申 ...

  9. 教妹学 Java:throw 和 throws

    "二哥,你能告诉我 throw 和 throws 两个关键字的区别吗?"三妹问. "throw 关键字,用于主动地抛出异常:正常情况下,当除数为 0 的时候,程序会主动抛 ...

最新文章

  1. 关于时间差查询的一个小技巧
  2. kafka消费者如何读同一生产者消息_Kafka消费者生产者实例
  3. h5 socket.io java,从HTML5 WebSocket到Socket.io
  4. 使用Repository informaton system查找constant定义
  5. 生产上完成TopN统计流程
  6. Oracle11完全卸载方法
  7. Kafka测试1.0.0
  8. think php union,UNION -ThinkPHP3.2.3完全开发手册 | AnSpoon.Com
  9. bzoj3670 [Noi2014]动物园
  10. 【钟表识别】基于matlab GUI形态学钟表识别【含Matlab源码 1351期】
  11. Java程序员3个月从月薪6k涨到15k,你知道我是怎么过来的吗?
  12. React Native常用三方组件库大全
  13. 大唐长安人杜环在两河流域, 耶路撒冷和北非的行程
  14. P5.JS绘制动态图形
  15. 请注意:黑客开始用云隐藏IP地址
  16. python基础学习(九)——堡垒机案例
  17. 蚁群算法解决多峰函数优化问题
  18. 几种常用网络请求汇总
  19. IDEA中启动项目一直报错,找不到符号或 程序包不存在常见处理方式
  20. PXA270处理器PCMCIA/CF接口设计及WinCE 5.0驱动实现 ----eetchina.com

热门文章

  1. Js中Reflect对象
  2. java离职交接文档_定了!财会人离职不办这2项交接,要承担法律责任!后果非常严重...
  3. 如何检测过时的Kubernetes API
  4. 法语写信_为我们写信:我们最热门的19个主题
  5. aspell_如何使用Aspell在Linux命令行上检查拼写
  6. 我的新LulzBot Mini 3D打印机入门
  7. opensource项目_最佳Opensource.com:硬件
  8. 美国 otc 数字货币_美国数字公共图书馆的免费藏书量是第一年的三倍
  9. 让电脑说话代码_让您的代码为您说话
  10. HTTP1.0 、 HTTP1.1、HTTP2.0的主要区别