Java中的异常机制:

Throwable类是 Java 语言中所有错误或异常的超类。主要包括两个子类: Error和Exception.

一般中要处理的异常是Exception.

Java中最常见的处理方式是try catch finally.格式为:

try

{

  需要被检测的异常.

}

catch(异常类 变量)

{

  处理异常的代码()处理方式

}

finally

{

  一定会被执行的代码语句

}

一个简单的异常处理代码及有关函数的应用:

 1 /*
 2 异常:Exception.
 3 处理异常的方式:
 4 try
 5 {
 6     需要被检测的代码.
 7 }
 8 catch(异常类 变量)
 9 {
10     处理异常的代码,处理方式.
11
12 }
13 finally
14 {
15     一定会被执行的语句.
16 }
17 */
18 class ExceptionDemo
19 {
20     public static void main(String args [])
21     {
22         Demo d = new Demo();
23         //int a = d.div(4,1);
24         try
25         {
26             int a = d.div(4,0);
27             System.out.println("a = "+a);
28         }
29         catch(Exception e) //Exception类型的引用对象  Exception e = new ArithmeticException();
30         {
31             System.out.println("除以零了.");
32             System.out.println(e.getMessage()); //打印出异常信息. /by zero
33             System.out.println(e.toString()); // 异常名称 异常信息
34
35             e.printStackTrace(); //JVM默认的就是调用printStackTrace方法获取异常处理,并打印出在堆栈中的跟踪信息.
36
37         }
38         finally
39         {
40             System.out.println("It's over.");
41         }
42     }
43 }
44
45 class Demo
46 {
47     int div(int a,int b)throws Exception //throws Exception 声明了该方法可能会出现问题.
48     {
49         return a/b;
50 }    }

用try catch finally也处理捕捉多个异常,在声明异常时,应该声明更具体的异常.

当出现了多个catch时,声明了多个异常时,父类异常块应该放在代码的最下面,如果放在最上面会导致子类异常永远无法执行到.

异常的声明:用关键字 throws.在java中可以用throws和throws来抛出异常.

throw和throws的区别在于:

throws:使用在函数上(所谓函数上就是在函数名的小括号与大括号之间),后面跟异常类,可以有多个异常类,用","(逗号)隔开即可.

throw:使用在函数内(在大括号之内),后面跟的是异常对象,格式例如: throw new 异常类名();

在实际应用中,可以自定义异常,自定义异常需要继承一个异常类,可以是Error类,Exception类,或者它们的根类:Throwable类.

格式:(例如声明一个自定义的Exception异常类)

class  自定义异常类名(一般写成xxxException) extends Exception

{

  xxxException(String message)

  {

    super(message);

  }

}

上面的自定义异常类,因为java已经在父类中已经把异常类的信息都完成了,子类异常类在构造时,

将异常的信息传递给父类,通过super语句,就可以直接调用getMessage()获取异常信息.(有关父类的方法可以查阅Java API)

自定义异常类只能手动抛出,是无法自动抛出的.

相关的例子代码:

 1 class ExceptionDemo2
 2 {
 3     public static void main(String args [])
 4     {
 5         Demo d = new Demo();
 6         try
 7         {
 8             int a = d.div(4,-9);
 9             System.out.println("a = "+a);
10         }
11         catch(FuShuException e)
12         {
13             System.out.println(e.toString());
14             //System.out.println("出现了负数.");
15             System.out.println("错误的负数是:"+e.getValue());
16         }
17         System.out.println("It's over.");
18
19     }
20 }
21
22 class FuShuException extends Exception
23 {
24     private int value;
25     /*
26     private String msg;
27     FuShuException(String msg)
28     {
29         this.msg = msg;
30     }
31     public String getMessage()
32     {
33         return msg;
34     }
35     */
36     FuShuException(String msg,int value)
37     {
38         super(msg);
39         this.value = value;
40     }
41
42     public int getValue()
43     {
44         return value;
45     }
46 }
47
48 class Demo
49 {
50     int div(int a,int b)throws FuShuException  //throws 使用在函数上.
51     {
52         if(b<0)
53             throw new FuShuException("出现了除数是负数的情况",b); //throw 使用在函数内.
54         return a/b;
55 }    }

Java中有一种特别的异常类:RuntimeException

1.该异常如果在函数内抛出了,在函数上不声明,编译也是可以通过的,(其他Exception等类是在函数内抛出了必须在函数上声明的)

2.如果在函数上声明了该类异常,调用者可以不进行处理.

因此使用自定义异常的时候,如果该异常的发生,无法继续进行运算,那么就可以让该自定义异常继承RuntimeException.

最后是一个异常的相关练习代码:

 1 class BlueScreen extends Exception
 2 {
 3     BlueScreen(String message)
 4     {
 5         super(message);
 6     }
 7 }
 8 class Smoke extends Exception
 9 {
10     Smoke(String message)
11     {
12         super(message);
13     }
14 }
15
16 class NoPlanException extends Exception
17 {
18     NoPlanException(String message)
19     {
20         super(message);
21     }
22 }
23
24 class Computer
25 {
26     private int state = 3;
27
28     public void run()throws BlueScreen,Smoke
29     {
30         if(state==2)
31             throw new BlueScreen("电脑蓝屏了");
32         if(state==3)
33             throw new Smoke("电脑冒烟了");
34         System.out.println("电脑运行");
35     }
36     public void reset()
37     {
38         state = 1;
39         System.out.println("电脑重启");
40     }
41 }
42
43 class Teacher
44 {
45     private String name;
46     private Computer comp;
47     Teacher(String name)
48     {
49         this.name = name;
50         comp = new Computer();
51     }
52     public void prelect()throws NoPlanException
53     {
54         try
55         {
56             comp.run();
57         }
58         catch(BlueScreen e)
59         {
60             test();
61             comp.reset();
62         }
63         catch(Smoke e)
64         {
65             throw new NoPlanException("课时无法继续."+e.getMessage());
66         }
67         System.out.println("老师讲课");
68     }
69     public void test()
70     {
71         System.out.println("练习");
72     }
73 }
74
75
76 class ExceptionTest
77 {
78     public static void main(String args[])
79     {
80         Teacher t = new Teacher("张老师");
81         try
82         {
83             t.prelect();
84         }
85         catch(NoPlanException e)
86         {
87             System.out.println(e.toString());
88             System.out.println("换老师或者电脑,不行就放假.");
89         }
90     }
91 }

  

转载于:https://www.cnblogs.com/jerryho/p/4518456.html

Java基础笔记-异常相关推荐

  1. Java基础笔记6——File、流、枚举、断言

    Java基础笔记6 十一.File 代表文件或目录的类. 所表示的文件或目录在计算机中不一定真实存在. 绝对路径:以盘符或者/开头的路径--不以当前路径为基准,直接跳转到指定的位置 相对路径:不以盘符 ...

  2. Java基础知识——异常Throwable和Exception

    Java基础知识--异常Throwable和Exception Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员(你和我!).当然了,这种方法是比较优雅的,让我们确切的知道是 ...

  3. Java基础笔记 – 枚举类型的使用介绍和静态导入

    Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...

  4. 【CXY】JAVA基础 之 异常概述

    概述: 1.异常给初学者的感觉(笔者当时就是这个感觉,不知道其他人是否有共鸣?) 1.异常是个什么东西?理解不了 2.很复杂 3.异常很"简陋",没什么用 4.我保证我写的程序正确 ...

  5. 【CXY】JAVA基础 之 异常

    讲述: 1.五个关键字 1.try:尝试捕获异常,具体的下面讲述 2.catch:当try捕获到异常了,系统会自动生成一个异常信息,这个异常信息就给catch,形象的说我抓住了这个异常. 3.thro ...

  6. Java基础笔记23-集合练习题

    Java基础笔记23-集合练习题 定义一个集合,实现去重复的功能 定义一个数组,数组中存放的是图片的后缀,给一个文件的名字,判断是否是图片 定义一个带有数字和字符串的集合,使用迭代器进行迭代,只输出字 ...

  7. Java基础笔记(2)——HashMap的源码,实现原理,底层结构是怎么样的

    Java基础笔记(2)--HashMap的源码,实现原理,底层结构是怎么样的 HashMap的源码,实现原理,底层结构 1.HashMap: HashMap是基于哈希表的 Map 接口的实现.此实现提 ...

  8. Java基础笔记(14)—— Java的基础类型和字节大小

    Java基础笔记(14)-- Java的基础类型和字节大小 Java基础笔记(14)-- Java的基础类型和字节大小 Java语言提供了八种基本类型.六种数字类型(四个整数型(默认是int 型),两 ...

  9. Java基础笔记(4w字长文警告)

    Java核心笔记 提示:点击右上角关注博主,收获共同话题 下面是我的个人学习Java的笔记,现在分享给广大友友: 文章目录 Java核心笔记 0.导论 标柱注释: 学习方法: 1 java概述 1.1 ...

最新文章

  1. 超越对手之四、五、六
  2. 数据结构思维 第六章 树的遍历
  3. Asp中隐藏下载地址
  4. 原创 | OpenAPI 标准规范
  5. 解决vs2010下不能创建项目及文件的问题
  6. PHP PDO函数库详解
  7. Struts1 处理接收参数插入到数据库之后呈乱码的问题解决
  8. UE4异步编程专题 - TFunction
  9. 搜索引擎技术之网络爬虫
  10. linux 双网卡 debian,Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)
  11. 怎样将Redis以本地服务方式进行启动?
  12. 牛客SQL22 统计各个部门的工资记录数
  13. ubuntu下的项目管理工具dia, planner
  14. 当下OA系统的使用缺陷以及相关解决方案
  15. seo从入门到精通_SEO入门书籍推荐:从入门到精通,新人必看的3本书
  16. 解决:用MyEclipse启动tomcat 报错cannot not find the main class
  17. 语音生成视频论文:Audio-driven Talking Face Video Generation with Learning-based Personalized Head Pose
  18. 命令行中运行jar包(cmd)
  19. 下载种子成forum.php,forum.php
  20. 计算机网络--边缘和核心部分,三种数据交换方式

热门文章

  1. “榕树下·那年”移动app ( hybrid ) 开发总结
  2. 邮件系统常见错误代码解释 --邮件服务器端(MTA)错误代码解释
  3. Dart语言--基础内容
  4. C# 泛型可能导致的装箱操作陷阱
  5. Python 3.x标准模块库目录
  6. DEV express 对Gridview某行的元素赋值
  7. 【Linux开发】linux设备驱动归纳总结(四):5.多处理器下的竞态和并发
  8. 使用FIR.im发布自己的移动端APP
  9. SPOJ 2713 线段树(sqrt)
  10. C语言-数组名真的不是指针