第09章 异常



  1 /*****************
  2 ***第09章 异常
  3 *******知识点:
  4 **************1.异常的基础知识
  5 **************2.异常类类图
  6 **************3.异常关键字
  7 **************4.异常处理机制
  8 **************5.异常继承
  9 **************6.异常小结
 10 */
 11
 12 /*
 13 *演示用的自定义异常类
 14 */
 15 class MyException extends Exception{
 16     private String msg;
 17     public MyException(String msg){
 18         super();
 19         this.msg = msg;
 20     }
 21     public String toString(){
 22         return ("异常信息:" + msg);
 23     }
 24 }
 25
 26 public class test9{
 27     public static void main(String[] args){
 28         showDemo("1.异常的基础知识");
 29         demoExceptionBasicKnowledge();//演示1.异常的基础知识
 30
 31         showDemo("2.异常类类图");
 32         demoExceptionClassView();//演示2.异常类类图
 33
 34         showDemo("3.异常关键字");
 35         demoExceptionKeyWord();//演示3.异常关键字
 36
 37         showDemo("4.异常处理机制");
 38         demoExceptionHandle();//演示4.异常处理机制
 39
 40         showDemo("5.异常继承");
 41         demoExceptionExtend();//演示5.异常继承
 42
 43         showDemo("6.异常小结");
 44         demoExceptionNote();//演示6.异常小结
 45     }
 46
 47     /*
 48     *1.异常的基础知识
 49     */
 50     public static void demoExceptionBasicKnowledge(){
 51         //异常————非正常情况,出现这样错误其实是程序上的错误。其中包括逻辑错误和系统错误
 52         //比如:数组下标越界、除数为0、内存溢出等
 53     }
 54
 55     /*
 56     *2.异常类类图
 57     */
 58     public static void demoExceptionClassView(){
 59         //异常类的根类————java.lang.Throwable  其中有两个子类分别为:Error、Exception
 60         // 1.Error类:无法处理的异常,也成为错误。如:操作系统错误、内存硬件损坏等(编程时无需关心这类异常)
 61         // 2.Exception类:可处理的异常。其中有两个子类分别为:RuntimeException和非RuntimeException
 62         //                                (有时也称为unchecked exception——非检查异常(RuntimeException) 和checked exception——检查异常)
 63         //        2.1RuntimeException:运行时异常或非检查异常。对于运行时异常,不要求必须捕获处理或抛出异常,由程序员自行决定
 64         //        2.2非RuntimeException:非运行时异常或检查异常。对于非运行时异常,要求必须捕获处理或抛出异常,如不捕获或抛出则编译不通过
 65     }
 66
 67     /*
 68     *3.异常关键字
 69     */
 70     public static void demoExceptionKeyWord(){
 71         //关键字有:try catch finally throw throws
 72         //1.try catch finally关键字
 73         //    1.1 try关键字    包围可能出现异常的逻辑代码,不能单独使用。必须配合catch/finally一同使用
 74                 //如:  try..catch..;    try..catch..finally..;  try..finally;  只能有一个try  可以有多个catch  finally可选
 75         //    1.2 catch关键字   用于捕获可能出现的异常  建议不要使用空catch块
 76         //  1.3    finally关键字   不管有没捕获到异常,finally代码均会执行,常用于释放资源操作
 77         //  三者的执行顺序为:try—>catch—>finally  但如果存在多个catch,一旦捕获到异常,后面的catch则不会执行,
 78         //  且finally在return前执行   建议不要在finally中使用return  不然返回值会被覆盖掉
 79         showDemo("演示try..catch");
 80         testTryCatch();
 81
 82         showDemo("演示try..catch..finally");
 83         testTryCatchFinaly();
 84         //2.throw throws
 85         //    2.1 throw关键字  抛出一个异常对象  只会出现在方法体内
 86         //    2.2 throws关键字  出现在方法的声明中,表示可能会抛出的异常,可允许后面跟着多个异常类型
 87         showDemo("演示throws");
 88         try{
 89             testThrows();//演示throws
 90         }catch(ArithmeticException e){
 91             System.out.println("除数都能为0?哥笑了!");
 92         }
 93
 94         showDemo("演示throw");
 95         try{
 96             testThrow();//演示throw
 97         }catch(ArithmeticException e){
 98             System.out.println("除数都能为0?大哥我笑了!");
 99         }
100     }
101
102     /*
103     *4.异常处理机制
104     */
105     public static void demoExceptionHandle(){
106         //1.对于可能出现异常的代码,处理方式有两种
107         //    1.1处理异常————使用try..catch语句对异常进行处理
108         //        如:  try{ ...} catch(异常类型1){} catch(异常类型2){} catch(异常类型3){} finally{}
109         //    1.2不处理异常————对于处理不了的异常或者需要转型的异常在方法声明处使用throws语句进行异常的抛出
110         //        如:public void testException() throws Exception{ if(...) { throw new Exception();}}
111
112         //2.使用异常类的方式有两种:
113         //    2.1使用java提供的已有异常类————如:IOException、SQLException
114         //    2.2使用自定义的异常————创建一个继承Exception/RuntimeException的子类
115
116         //3.异常的转译
117         //    3.1异常链————把原始的异常包装为心得异常类,并在新的异常类中封装原始异常类
118         //    3.2异常转型————相当于在捕获到异常后,将异常以新类型的异常抛出,使异常的信息更加直观
119         /*        如: public void test() throws MyException{
120                                 try{
121                                     ...
122                                 } catch(IOException e){
123                                     throw new MyException();
124                                     }
125                                 finally{
126                                     ...
127                                 }
128                             }
129         */
130         try{
131             testDefinedException();//演示自定义异常类和异常转译
132         }catch(MyException e){
133             System.out.println("演示自定义异常类:" + e.toString());
134         }
135     }
136
137     /*
138     *5.异常继承
139     */
140     public static void demoExceptionExtend(){
141         //1.父类的方法没有声明异常,子类在重写该方法时不能声明异常
142         //2.如果父类方法声明一个异常A,则子类在重写该方法时声明的异常不能是A的父类
143         //3.如果父类的方法声明的异常类型只有非运行时异常(运行时异常),则子类在重写该方法时声明的异常也只能是非运行时异常(运行时异常)
144         /*
145         总结就是:父类方法声明了什么异常,那么子类在重写该方法时只能是一样声明该异常或者该异常的子类
146         */
147     }
148
149     /*
150     *6.异常小结
151     */
152     public static void demoExceptionNote(){
153         //根据度娘和工作经验得出异常的小结:
154         /*
155         1.只有在必要的时候才使用异常,因为捕获异常的代价是非常非常非常高的(没错,重要的词语要说三次)
156         2.不要用异常去控制程序的流程
157         3.不要使用空catch块
158         4.try块尽可能过小。保持一个try块对应一个或者多个异常
159         5.尽可能细化异常,别动不动就来个catch(Exception e)
160         6.catch块要保持一个块对应一类异常
161         7.不要把自己能处理的异常抛出
162         8.尽可能将检查异常转为非检查异常,然后交给上层处理
163         */
164     }
165
166     /**演示TryCatch关键字**/
167     public static void testTryCatch(){
168         int a[] ={1,2,3};
169         try{
170             for(int i = 0;;i++){
171                 System.out.println("获取数组值:" + a[i]);
172             }
173         }catch(ArrayIndexOutOfBoundsException e){
174             System.out.println("Catch语句:" + "数组访问越界了");
175         }
176     }
177
178     /**演示TryCatchFinaly关键字**/
179     public static void testTryCatchFinaly(){
180         int i = 0;
181         try{
182             int k = 1/i;
183         }catch(ArithmeticException e){
184             System.out.println("Catch语句:" + "除数为0");
185         }finally{
186             System.out.println("Finally语句:"+"除数都能为0?呵呵!");
187         }
188     }
189
190     /**演示Throws关键字**/
191     public static void testThrows() throws ArithmeticException{
192         int i = 0;
193         int k = 1/i;
194     }
195
196     /**演示Throw关键字**/
197     public static void testThrow(){
198         int i = 0;
199         int k = 1/i;
200         if( i==0){
201             throw new ArithmeticException();
202         }
203     }
204
205     /**演示自定义异常类**/
206     public static void testDefinedException() throws MyException{
207         int i = 0;
208         try{
209             int k = 1/i;
210         }catch(ArithmeticException e){
211             throw new MyException("除数为0");
212         }
213     }
214
215
216     /*
217     *    抽取打印演示函数  用于打印演示功能提示
218     */
219     public static void showDemo(String demoStr){
220         System.out.println("演示:" + demoStr);
221     }
222 }

 
时间: 2024-10-13 23:14:34

第09章 异常的相关文章

第09章:集合

第09章:集合总结: 1:Set集合(理解) (1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法:hashCode()和equals() 执行顺序: 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回false:直接把元素添加到集合 不同:就直接把元素添加到集合 C:如何保证元素唯一性的呢? 由hashCode()和equals()保证的 D:开发的时

第十一章 异常,日志,断言和调试

第十一章 异常,日志,断言,调试 由于程序的错误或一些外部环境的影响造成用户数据的丢失,用户就有可能不再使用这个程序了.为了避免,应该做到以下几点: 向用户通告错误 保存所有的操作结果 允许用户以适当的形式退出程序. 11.1 处理异常 当由于出现错误而使得某些操作没有完成,程序应该: 返回到一种安全状态,并能够让用户执行一些其他命令:或者 允许用户保存所有操作的结果,以适当的方式终止程序 异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种错误的处理器.程序中可能出现的错误和问题: 用

计算机系统:第8章 异常控制流

参考材料:深入理解计算机系统,第8章 1控制流的种类 -->对由"程序内部"变量表示的内部状态的变化作出反应的.简单来说,就是我在运行这段程序,在"程序"中明确指明了下条运行的指令,如顺序下一条,while,跳转等 -->对一些系统状态的变化作出反应,这些系统状态"不是由这段程序内的变量"捕获的.简单来说,就是我在运行这段程序,运行着运行着,突然从本段程序外部来了一个刺激要我作出反应. -->对于第二种控制流,系统通过ECF(E

JavaScript权威指南第09章 类和模块

类和模块 类的实现是基于继承机制的,如果两个类继承同一个原型对象,那么也就是说,也就意味着使用同一个构造函数来实例化,它们是同一个类的实例. 9.1类和原型 在javascript中,类的实例都是从同一个原型对象上继承属性,所以原型对象是类的核心. 9.2类和构造函数 构造函数是初始化新创建对象的函数. 构造函数的prototype属性被用作新对象的原型,因此,同一个构造函数的实例化的对象都继承自同一个对象. 9.3javasript中的java式的类继承 实例字段 实例方法 类字段 类方法 9

第09章 红黑树

红黑树 红黑树是一种二进制查找树,但在每个节点上增加一个存储位表示节点的颜色,可以是red或black.通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的. 树中灭个节点包含五个域,color,key,left,right 和p.如果某及诶但没有一个子节点或父节点,则该节点响应的指针域包含值NIL.我们将把这些NIL指向二叉查找树的外节点(叶子)指针,而把带关键字的节点,视为树的内节点. 一棵二进制查找树如果满足以下性质,则说明是

[core java学习笔记][第十一章异常断言日志调试]

第11章 异常,断言,日志,调试 处理错误 捕获异常 使用异常机制的技巧 使用断言 日志 測试技巧 GUI程序排错技巧 使用调试器 11.1 处理错误 11.1.1异常分类 都继承自Throwable类 分成Error和Exception Error类 描写叙述了Java运行时系统的内部错误和资源耗尽错误. 应用程序不应该抛出此种类型的错误.假设出现了这样的内部错误.除了通告给用户,并尽力使程序安全地终止外,再也无能为力 Exception层次结构:最需关注的 RuntimeException

《深入Java虚拟机学习笔记》- 第17章 异常

<深入Java虚拟机学习笔记>- 第17章 异常

20190901 On Java8 第十五章 异常

第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的. 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pascal). 基本异常 异常参数 所有标准异常类都有两个构造器:一个是无参构造器:另一个是接受字符串作为参数,以便能把相关信息放入异常对象的构造器. Throwable 是异常类型的根类. 自定义异常 对异常来说,最重要的部分就是类名. 异常与记录日志 对于异常类来说,getMessage() 方法有点

java oop第09章_JDBC02(CRUD操作)

第09章_JDBC02(CRUD操作) CRUD(CREATE . RETIVE . UPDATE . DELETE)增删改查. DAO中会提供一些CRUD操作方法,调用者可以通过调用这些方法完成相应操作,本章讨论DAO中需要提供一些什么方法? 一.     Dao常用的方法 1.     增加的方法: 通常需要传入实体对象携带所有属性值,作为插入的数据:返回的是受影响的行数(int类型). 如:insertDept(Dept dept) 2.     删除的方法:通常需要传入id(指的是数据表