我们知道当程序遇到异常时除了用try-catch-finally来捕获异常外,还可以用throws和throw去抛出异常,使用异常处理可以定位问题所在处,方便修改程序代码:

例如利用try-catch-finally来捕获异常:

public class Test{public static void main(String[] args) {   try {System.out.println(1/0);} catch (Exception e) {e.printStackTrace();//输出异常}}
}
输出结果:
java.lang.ArithmeticException: / by zeroat com.jd.pao.Test.main(Test.java:5)

还可以使用throw关键字来抛出异常:

public class Test{public static void main(String[] args) {   throw new NullPointException("抛出一个空指针异常");}
}
输出结果:
Exception in thread "main" java.lang.NullPointerExceptionat com.jd.pao.Test.main(Test.java:4)

上述两种异常ArithmeticException(算数异常)、NullPointException(空指针异常)都属于RuntimeException(运行时异常),运行时异常比较容易掌握,检查时异常就需要用心记住了,它较运行时异常有点复杂,不过在详述检查时异常之前,我们首先要知道:一个异常如果直接或间接继承RuntimeException,该异常就属于运行时异常;如果是继承Exception,则该异常属于检查时异常,这两句话在自定义异常中也非常重要,例如:

用throw抛出一个由检查时异常创建的对象时有两种处理方式:
第一种是在方法参数列表括号的后面加上throws 异常类

public class Test {public static void main(String[] args) throws Exception { throw new Exception("抛出一个检查时异常");}
}
输出结果:
Exception in thread "main" java.lang.Exception: 抛出一个检查时异常at com.jd.pao.Test.main(Test.java:7)

另一种是用try-catch-finally来捕获检查时异常:

public class Test {public static void main(String[] args){   try {throw new Exception("用try-catch来捕获一个检查时异常");} catch (Exception e) {e.printStackTrace();}}
}
输出结果:
java.lang.Exception: 用try-catch来捕获一个检查时异常at com.jd.pao.Test.main(Test.java:8)

这两种方式有区别:
当使用throws时是将错误抛给别人,异常下面的代码不执行而使用try-catch-finally时是将错误抛给自己,异常下面的代码也会执行(笔者是这样记的,将错误抛给自己,自己选的路,死活也要走完),且要记住throw下面不能直接跟代码(就如return下面不能直接写代码一样),例如:

public class Test{public static void main(String[] args) throws Exception{if(true) {throw new Exception("此处用throws去抛出异常,所以下满代码不能执行");//后面不能直接写代码,否则报错}System.out.println("我就不执行");}
}
输出结果:
Exception in thread "main" java.lang.Exception: 此处用throws去抛出异常,所以下满代码不能执行at com.jd.pao.Test.main(Test.java:9)
public class Test{public static void main(String[] args){try {throw new Exception("此处用try-catch来捕获一个检查时异常,下面代码会执行");} catch (Exception e) {e.printStackTrace();}        System.out.println("我要执行喽!");}
}
输出结果:
java.lang.Exception: 此处用try-catch来捕获一个检查时异常,下面代码会执行
我要执行喽!at com.jd.pao.Test.main(Test.java:8)

下面我们来结合上面说说自定义异常,我们会发现有时已有的异常类并不能完全阐明错误的具体类型,这时就要我们自己定义一个异常类来具体阐明问题的根本:
自定义异常类要继承已有的异常类,通常继承RuntimeException(执行时异常)和Exception(检查时异常),

public void Custom extends RuntimeException{public Custom (String s){super(s);}
}
public void Custom extends Exception{public Custom (String s){super(s);}
}

上述两种自定义类的使用规则就和上面讲的一样,要区分是继承RuntimeException还是Exception!

下面是一个练习,想看的可以看一下,不看了也无所谓:

package com.jd.pao;public class Test {public static void div(int a,int b) throws Exception{//使用try-catch默认有throws,为便于理解,此处显示出来if(b==0) {try {throw new Exception("分母不能为0");//因为此处通过try-catch捕获了异常,} catch (Exception e) {System.out.println("分母为0时会执行");e.printStackTrace();}}else{System.out.println(a/b);}}public static void main(String[] args) {try {div(1,0);//也就相当于此处已无异常,所以当此处执行完毕后,不会跳到catch代码块里} catch (Exception e) {System.out.println("永远不会执行");}}
}
输出结果:
分母为0时会执行
java.lang.Exception: 分母不能为0at com.jd.pao.Test.div(Test.java:8)at com.jd.pao.Test.main(Test.java:20)
package com.jd.pao;public class Test {public static void div(int a,int b) throws Exception{//此处必须要显式使用throwsif(b==0) {    throw new Exception("分母不能为0");//因为此处将异常抛出,       }else {System.out.println(a/b);}}public static void main(String[] args) {try {div(1,0);//所以此处会报错,出现异常,会跳到catch代码块里} catch (Exception e) {System.out.println("异常时会执行");}}
}
输出结果:
异常时会执行

throws throw 自定义异常相关推荐

  1. 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)

    多态的概念: 多态性是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果. 多态存在的三个必要条件: ① 需要存在继承或实现关系 ② 同样的方法调用而执行不同的操作.运行不同代码(重写 ...

  2. 异常概念和处理机制,try-catch-finally,throw和throws,自定义异常

    异常概念和处理机制,try-catch-finally,throw和throws,自定义异常 参考文章: (1)异常概念和处理机制,try-catch-finally,throw和throws,自定义 ...

  3. Java 异常处理 try catch finally throws throw 的使用和解读(一)

    最近的一个内部表决系统开发过程中, 发现对异常处理还存在一些模棱两可的地方, 所以想着整理一下 主要涉及到: 1.try catch finally throws throw 的使用和解读 2.自定义 ...

  4. java异常处理机简答题,【简答题】JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义?...

    [简答题]JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义? 更多相关问题 用蒸汽进行设备管线吹扫时,应将被吹扫的设备管线,相应 ...

  5. Java面向对象之异常处理机制(try-catch-finally、throws、自定义异常)

    文章目录 一.异常与异常分类 二.异常处理机制 1.try-catch处理 2.try-catch-finally处理 3.throws可能抛异常(少用) 4.throw抛出异常(少用) 三.自定义异 ...

  6. throws,throw,try···catch···finally

    throws-声明异常 使用throws关键字对外声明该方法有可能发生异常 这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过. 格式为 返回值类型 方 ...

  7. java throws的作用_Java中throws..throw的使用与说明

    throws语句 throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常.对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型.如果异常的 ...

  8. Java异常处理throws/throw

    Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常). • Runtime异常:所有的RuntimeException类及其子类的实例: • Checked异常:不是Run ...

  9. JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally分别代表什么意义? 在try块中可以抛 出异常吗?...

    Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类, 并提供了良好的 接口.         在 Java中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例.当一个方 ...

最新文章

  1. 后端接口都测试什么?要怎么测?
  2. CASSINI源代码分析
  3. 4G EPS 的架构模型
  4. 若依微服务版后台服务通过jar包部署到Windows服务器
  5. python基础(二)字符串內建函数详解
  6. rabbitmq 不同的消费者消费同一个队列_RabbitMQ 消费端限流、TTL、死信队列
  7. [css] 如何实现换肤功能?
  8. 第三十四期:花了一个星期,我终于把RPC框架整明白了!
  9. 知方可补不足~数据库名称和数据库别名不同了怎么办
  10. 支持向量机(SVM)非线性数据切割
  11. python自定义函数的参数调用_python | 自定义函数
  12. python PIL生成字母验证图片
  13. 小程序调用百度api实现图像识别
  14. c语言读取广播星历程序,GPS广播星历计算卫星位置和速度.doc
  15. krpano JS动态切换旋转角
  16. Android Debug Bridge
  17. 你的网名OUT了吗?盘点那些曾经超in的网名
  18. 从零学习node爬虫
  19. 2021Q2产品团队绩效总结--管理日记
  20. 两种常见的周期性特征,时序必知强特

热门文章

  1. Docker将容器制作成镜像并提交到远程仓库
  2. 矢量图面层和线层相交得到相交后的线层文件(gis相交)
  3. SpringMVC学习手册(三)------EL和JSTL(上)
  4. switch和case的理解
  5. IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法
  6. js正则表达式的使用详解
  7. 对Android 开发者有益的 40 条优化建议(转)
  8. TCP/IP四层模型和OSI七层模型
  9. Golang反射机制的实现分析——reflect.Type类型名称
  10. 跨平台PHP调试器设计及使用方法——界面设计和实现