注意:想在catch的参数里使用自定义的异常,则必须先将这个异常抛出才行。(throws是具有抛出异常的能力,并未抛出,throw new MyException是抛出异常,catch是捕获异常,只有抛出,才能被捕获) 
 
1 异常的抛出原理:
        java的错误其实也是一些类文件,它们之所以可以在程序出错时被抛出,是因为在你调用了某些方法的时候,为这些方法需要做一些预先的处理,比如你要调用一个对象的一个属性,如果你所调用的对象是空的话,那么程序是不可以执行的,但是又不能不告诉你,所以就用一个错误来提示你。
        异常被抛出,肯定是因为带有异常检查的方法被调用了,可以在构造方法,中进行指定,当别人调用这些方法的时候,并且没有通过检查,那么exception就会被抛出或者被捕获。而调用这个方法的方法,要么捕获要么继续抛出交给它的父类去处理。总之:只要是会出现异常的地方,只有两种处理方式,第一:使用try和catch进行捕获。第二:把错误交给父类去处理,就是throws exception。
        这些错误提示,或者在你所调用的方法里面有所定义,或者是在虚拟机JVM运行时候有所定义。在虚拟机运行时候抛出的异常就是 运行时异常,包括 NullPointExcetion,ClassCastException,IndexOutOfBoundsException。总之:它肯定是存在的,我们有时在想,我根本就没有在我自己定义类里面的方法上添加异常,可是它也会抛出异常,这是因为类在程序判断的时候,满足了某些条件,于是程序就自动实例化了一个错误的对象,然后把这个错误给抛了出来,比如说NullPointerException空指针异常,你可能会说这个错误的话,我找不到它定义在哪里啊?可是你要知道的是,你的方法终究是要运行的,当你运行的时候,虚拟机在执行方法的时候它是会进行检查的,它检查的时候当然也是调用方法了,而在调用之前,它会把对你将要调用的对象进行检查,如果有错就会实例化一个NullPointerException出来,检查是很容易理解的事情,就像你实例化了一个类,然后在运行的时候,对这个类的一些信息进行判断,只是jvm检查的比较复杂,但是思想肯定是一致的。
        
 2 异常的分析:
        在我们运行程序的时候,如果出现了,错误,那么异常信息会被打印出来,打印的时候的顺序是:先打印此类所在的继承链的父类的异常信息,之后再打印子类,以此类推。因为什么呢?因为对象实例化的过程也就是这个顺序,所以打印的时候顺序也是一样的,当然如果你已经对错误进行了处理的话,那么自然父类的错误就不会被打印出来了,所以说当出现异常的时候,那些最先打印出来的都是父类的信息,你出错的调用位置应该是在下边子类中。
     自定义异常:

上面的分析可以知道,如果要自己定义异常的话,只需要自己定义一个类,这个类只需要集继承Exception类,然后你可以为这个类指定构造方法,根据你自己的需求去打印出你想提示的信息,在抛出的时候,也就是在执行条件判断后throw new MyException的时候,你可以指定异常的ID,这完全是你自己可以操作的事情,比如你想要在打印错误的同时,把错误的种类也打印出来就可以把下面的那个MyException的构造函数修改为:

测试举例:

  1. <span style="font-size:14px;">package exception;
  2. public class MyException extends Exception {
  3. private static final long serialVersionUID = 1L;
  4. private int idNumber;
  5. public int getIdNumber() {
  6. return idNumber;
  7. }
  8. public MyException(String exception, int id) {
  9. super(exception);
  10. this.idNumber = id;
  11. }
  12. }</span>

测试自定义错误:

  1. package exception;
  2. public class TestMyExeption {
  3. public void regist(int num) throws MyException {
  4. if (num < 0) {
  5. throw new MyException("人数为负数不合理!", 1);
  6. }
  7. System.out.println("throw 之后的程序不能执行" + num);
  8. }
  9. /**
  10. * 把异常给抛出去,交给更高层处理
  11. *
  12. * @throws MyException
  13. */
  14. public void manager() throws MyException {
  15. regist(-100);
  16. }
  17. /**
  18. * 把异常给截获并处理
  19. */
  20. public void manager1() {
  21. try {
  22. regist(-1330);
  23. } catch (MyException e) {
  24. // 在处理错误的时候,可以根据自己的需要去打印错误的信息
  25. System.out.println("出错了,错误的编号:" + e.getIdNumber());
  26. }
  27. System.out.println("程序可以继续执行!");
  28. }
  29. public static void main(String[] args) throws MyException {
  30. new TestMyExeption().manager();
  31. //      new TestMyExeption().manager1();
  32. }
  33. }

抛出 Exception:

  1. package exception;
  2. import java.util.Scanner;
  3. public class TestThrow {
  4. public static void main(String[] args) {
  5. TestThrow t = new TestThrow();
  6. System.out.print("请输入您的年龄:");
  7. System.out.println("您的年龄:" + t.inputAge());
  8. }
  9. public int inputAge() {
  10. int result = -1;
  11. Scanner scan = new Scanner(System.in);
  12. while (true) {
  13. try {
  14. result = scan.nextInt();
  15. if (result < 0 || result > 130) {
  16. Exception me = new Exception("年龄超出合理范围!");
  17. throw me;
  18. }
  19. break;
  20. } catch (Exception e1) {
  21. System.out.print(e1.getMessage() + "请重新输入:");
  22. continue;
  23. }
  24. }
  25. return result;
  26. }
  27. }
 参考来源:http://blog.csdn.net/tengdazhang770960436/article/details/7037190

java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)的更多相关文章

  1. java异常处理之throw, throws,try和catch

    转自 http://blog.csdn.net/zhouyong80/article/details/1907799  程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...

  2. java异常处理及自定义异常的使用

    1. 异常介绍 异常机制可以提高程序的健壮性和容错性. Throwable:Throwable是java语言所有错误或异常的超类. 有两个子类Error和Exception. 1.1 编译期异常 编译 ...

  3. 75.Java异常处理机制-自定义异常

    package testDate; //自定义异常 public class MyException extends Exception{ public MyException(){ } public ...

  4. java异常处理机制

    本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...

  5. 深入探索 高效的Java异常处理框架

    转载自:http://www.sunwei.org/archives/196 摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Sprin ...

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

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

  7. JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

    JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...

  8. Java异常处理的两种方式以及自定义异常的使用方法

    异常 就是程序出现了不正常的情况 Error:严重问题,不需要处理 Exception:称为异常类,他表示程序本身可以处理的问题 RuntimeException:在编译期是不检查的,出现问题后,需要 ...

  9. “崩溃了?不可能,我全 Catch 住了” | Java 异常处理

    前言 今天我们来讨论一下,程序中的错误处理. 在任何一个稳定的程序中,都会有大量的代码在处理错误,有一些业务错误,我们可以通过主动检查判断来规避,可对于一些不能主动判断的错误,例如 RuntimeEx ...

随机推荐

  1. Java中String类的常用方法

    判断功能的方法 public boolean equals (Object anObject) :将此字符串与指定对象进行比较. public boolean equalsIgnoreCase (St ...

  2. springboot:基础学习一 linux下后台启动springboot项目

    我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn package”进行打包时,会打包成一个可以直接 ...

  3. 【转载】InputStreamReader和OutputStreamWriter 的区别和用法

    一.InputStreamReader 用于将一个字节流中的字节解码成字符 , 用法如下: @Test public void Test19() throws Exception { InputStr ...

  4. vue 中获取到数据点击失效

    // var data = Object.assign([],ret.t); //动态创建dom后点击 元素不添加背景色 Object.assign(复制下)

  5. eas之日期控件

    日期选择框能进行日期和时间的编辑,默认情况下只能进行日期选择“××××年××月××日”,可通过调用用函数setTimeEnabled(boolean)来设置是否也有时间编辑.对日期进行编辑时,可手工直 ...

  6. Linux基础知识和命令

    1,用户登录:    root(管理员),权限最大.安全生产必要时再使用.    普通用户:权限有限.2,    终端终端设备终端:输入和输出设备,如:键盘鼠标显示器;     图形终端:虚拟机进入窗 ...

  7. layui 导出excel复杂表头

    众所周知 layui的导出功能很好用,但是今天我要给大家推荐一个更好用的 大家来到这里想必也是因为layui无法满足 [导出Excle复杂表头] 的业务需求而来,这里废话不多说但还是强调一点,如果你是 ...

  8. 域名和ip、端口的关系

    背景:新建一个项目,属于RPC服务,调用时需要ip+端口. 在工单系统里走流程,强制填写域名.之前也操作过,感觉域名不重要.我本来需要填写ip+端口,你给整个域名,那我端口往哪写?(一直以为域名=ip ...

  9. SpringCloud Config 分布式配置中心

    一.分布式系统面临的问题---配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的 ...

  10. JavaSE 学习笔记之Java语法基础(二)

    1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名,函数名.包含 0-9. ...