异常处理的设计和重构学习二

【一】

Exception异常--->意思是例外。
一:异常处理机制代码和程序源代码放一块坏处1)-->逻辑代码和错误处理代码放在一起,降低程序的可读性
                                                                     2)--->程序员在编写程序时考虑的例外情况多,对程序员本身要求高
二:异常机制-->当程序出现错误,程序如何安全退出的机制。
                                java的异常机制就是JDK中以Throwable类为父类所有可能出现的意外情况
三:java中采用面向对象的方式来处理异常---过程--->1)抛出异常:执行代码,发生异常,产生代表该异常的对象,并停止当前代码,并把异常交予jre处理(jvm)
                                                                         ------->2)捕获异常:jre得到异常后,寻找相应代码处理。
四:异常分类
       
                      --->Error(UnCheckedException)java运行系统内部错误或资源耗尽。例如Jvm崩溃,断电。程序员不能处理
Throwable《                        
                     --->Exception--->1)RuntimeException(UnCheckedException)编译时不报错,运行时报错。例:除数为0
                                                                                       
                                             
                                            --->2)非RuntimeException(CheckedException)编译时报错,★[需要运用异常机制处理异常]
运行时异常(Run异常处理机制代码和程序源代码放一块坏处1)-->逻辑代码和错误处理代码放在一起,降低程序的可读性timeException)[UnCheckedException]--->程序员自己逻辑出现错误,可以通过修改代码处理异常。强制停止程序运行,便于程序员修改,增强程序【安全性】
非运行时异常,编译异常[CheckedException]--->需要通过异常机制去处理的异常,增强代码的【健壮性】
处理异常和有用代码放在一起的坏处
1逻辑混乱
2对程序员自身要求高
java处理异常的方法
1:抛出异常。
2:捕获异常。

【二】

第一种办法:抛出异常,捕获异常(try catch)
【格式】
try{
     //可能产生异常的源代码
    }catch(Exception e){
                       //处理异常方法
                       }finally{
                                       //释放资源                
                               }
语法特点1)一个try语句必须至少带有一个catch{}或finally{}块
            2)catch(对象)如果存在多个catch,那么对象从上往下的对象 ---> 【 小(子类)在上,大(父类)在下 】
            3 ) 一个try语句可以产生多个catch,一个catch语句只能捕获一个异常对象
            4)catch块中的常用方法 --->a)  toString()-->显示异常类的类名和产生异常的原因
                                               ---->b)  GetMessage()-->只显示产生异常的原因,不显示异常类名
                                               ---->c)  printStackTrace()-->显示异常类类名,产生异常原因,打印栈堆信息(常用)

【三】

第二种办法:自动抛出异常--->throws子句
格式:
方法名+ throws 异常类 (){
               //可能出现异常的源代码
}
自动抛出异常的特点--->1)当编译时异常( CheckedExcption )出现时,不一定处理它,可以把异常向上抛出,让调用它的方法处理。可以不断向上抛出,在main方法中处理,即程序运行时处理。
                               --->2)如果一个方法体内抛出多个异常,那么异常类在方法名后用【,】隔开
方法重写中声明异常的原则(1)-->父类方法没有声明异常,子类重写方法不能声明异常
                                       (2)-->重写方法抛出的异常类,与被重写方法抛出的异常类关系。子类<=父类 (继承父子)
                                         (3)--->子类抛出异常类的数目,不可多余父类抛出异常类的数目 (不是指个数,指的是类型)

【四】

手动抛出异常类throw
步骤:1)找一个合适的异常类
          2)创建该类的对象
          3)将对象手动抛出
          4)throw后的代码不执行。
例子--->在方法体内抛出异常。throw
public static int sum( int a, int b) {
                if(b==0){
                       throw new MyzeioException();
               } else {
                        int sum=0;
                       sum=a/b;
                        return sum;
               }
例子--->
public static void main(String[] args ) {
                sdf ();
               System. err .println( "sxf" ); // 不运行
       }
   
    public static void sdf(){
           System. out .println( "PaymentRequestServiceImpl.sdf()" ); // 运行
            int a =1/0;
           System. err .println( "tt" ); // 不运行
   }
例子--->
  public static void main(String[] args ) {
                try {
                        sdf ();
               } catch (Exception e ) {
                        // TODO Auto-generated catch block
                        e .printStackTrace();
               }
               System. out .println( "PaymentRequestServiceImpl.main(sxf)" ); // 运行
       }
   
    public static void sdf() throws Exception{
           System. out .println( "PaymentRequestServiceImpl.sdf()" ); // 运行
            if ( true ){
                    throw new Exception();
           } else {
                   System. out .println( "PaymentRequestServiceImpl.sdf(dddd)" ); // 不运行
           }
            System. out .println( "PaymentRequestServiceImpl.sdf(stttt)" ) ; // 不运行
   }

【五】

第四种办法:--->自定义异常类
什么时候自定义异常类--->当jdk中的异常机制里的异常类 不能满足程序员编写代码可能产生的异常时 ,需自建异常类
* 第四种实现方法   自定义异常
         * 当系统提供 Exception 不能满足 我们自身
         * 个性话的 需要的时候
         * 1 、创建一个异常的子类
         * 2 、创建两个构造器
         * 3 、有参数的构造器可以借助
         *     super( 参数 ) 去调用父类中的
         *     含有参数参数的构造器  
1、一般情况下 继承Exception或下面的子类(除了RuntimeException)  ---》在编译时候 需要处理  MyCheckException (大多数自定义异常类继承Exception)
2、继承RuntimeException类  =======》在运行时候处理  RuntimeException (少之又少)
例子:
//自定义的异常类
public class MyzeioException extends Exception {
        public MyzeioException (){}
       
        public MyzeioException(String str){
                super (str);
       }
}
// 测试类
public class Test{
       public static void main(String args){
               try{
                       sum(2,0);
                 }catch(MyzeioException e){
                       e.printStackTack();
               }
}
public static int sum( int a, int b) throws MyzeioException {
                if (b==0){
                        throw new MyzeioException();
               } else {
                        int sum=0;
                       sum=a/b;
                        return sum;
               }
}

时间: 2024-10-11 09:43:33

异常处理的设计和重构学习二的相关文章

异常处理的设计和重构学习一

程序的两个衡量标准:--->正确性(程序员的代码能实现正确的功能)--->健壮性(当发生意外状况[参数错误,停电等],程序能安全,准确的退出,不会产生意想不到的结果) 影响程序健壮性的坏蛋--->缺陷(物理缺陷[硬件],代码缺陷[代码漏洞])--->错误(代码bug)--->失效,失败(方法不能达到目的)--->异常,例外(错误的运行参数或错误的运行环境) 面向对象的语言中设计异常处理机制需要考虑的是个因素--->表达:如何表达异常?--->声明:往外传递的

异常处理的设计与重构 pdf

网上没找到pdf文件,自己买了一本.需要pdf的留言,当天有空会发给你,免费. 目录: Part1异常处理的现状 Chapter01你对异常处理的了解有多少? 02异常处理的重要性 03"种花"电信,我真是猜不透你啊! 04HTCOneX--发现一个Bug 05HTCOneX--我只是想打通电话呀! 06HTCOnex--拍照的错误消息描述 07可靠性可以是一门生意 ColumnA.倒霉的人很适合当神秘客 Part2异常处理的基本观念 Chapter08强健性大战首部曲--魅影危机 C

HT图形组件设计之道(二)

上一篇我们自定义CPU和内存的展示界面效果,这篇我们将继续采用HT完成一个新任务:实现一个能进行展开和合并切换动作的刀闸控件.对于电力SCADA和工业控制等领域的人机交互界面常需要预定义一堆的行业标准控件,以便用户能做可视化编辑器里,通过拖拽方式快速搭建具体电力网络或工控环境的场景,并设置好设备对应后台编号等参数信息,将拓扑图形与图元信息一并保存到后台,实际运行环境中将打开编辑好的网络拓扑图信息,连接后台实时数据库,接下来就是接受实时数据库发送过来的采集信息进行界面实时动态刷新,包括用户通过客户

C#重构学习2

转帖重构学习 重构?代码坏味道?看到这两个疑问,也许就知道本期的话题是关于“重构”的,重构无处不在,重构可大可小,重构随时随地.让重构时刻记在脑海,使自己的代码变的优美.就让这本“重构艺术”手册带你走进重构的世界,亲密接触重构,如欣赏艺术般,体会重构的魅力. 文章下载地址:http://files.cnblogs.com/xia520pi/C_Sharp_Refactoring.rar 文章的目录: 1.代码重构 1.1.版权声明 1.2.内容详情 2.项目重构方案设计 2.1.版权声明 2.2

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

java异常处理和设计

在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻找出错的根源?但是如果一个项目异常处理设计地过多,又会严重影响到代码质量以及程序的性能.因此,如何高效简洁地设计异常处理是一门艺术,本文下面先讲述Java异常机制最基础的知识,然后给出在进行Java异常处理设计时的几个建议. 若有不正之处,请多多谅解和指正,不胜感激. 请尊重作者劳动成果,转载请标明

Java中异常处理和设计(转)

在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻找出错的根源?但是如果一个项目异常处理设计地过多,又会严重影响到代码质量以及程序的性能.因此,如何高效简洁地设计异常处理是一门艺术,本文下面先讲述Java异常机制最基础的知识,然后给出在进行Java异常处理设计时的几个建议. 若有不正之处,请多多谅解和指正,不胜感激. 请尊重作者劳动成果,转载请标明

Java异常处理和设计【转】

Java异常处理和设计 在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻找出错的根源?但是如果一个项目异常处理设计地过多,又会严重影响到代码质量以及程序的性能.因此,如何高效简洁地设计异常处理是一门艺术,本文下面先讲述Java异常机制最基础的知识,然后给出在进行Java异常处理设计时的几个建议. 若有不正之处,请多多谅解和指正,不胜感激. 请尊重

设计模式中的六大设计原则之一,二

最近在学习设计模式方面的知识,首先接触到的是设计模式中的六大设计原则: 1.单一职责原则: 2.里氏替换原则:3.依赖倒置原则:4.接口隔离原则:5.迪米特法则:开闭原则.下面我来讲讲我对这六大设计自己的理解,如有欠缺地地方,请大家及时指出啊...   1.单一职责原则:应该有且仅有一个原因引起类的变更.通俗的说,即一个类只负责一项职责.下面我们举一个具体的例子来说明一下什么是单一职责原则.电话通话的时候有4个过程发生:拨号,通话,回应,挂机,首先看下面这样一个借口,如图1所示: 图1. 我们来