美文网首页
八、Java语言基础8(异常和包)

八、Java语言基础8(异常和包)

作者: SkyFireDragon | 来源:发表于2019-04-12 10:47 被阅读0次

这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)

一、异常

 1、程序的异常
    <1>概念:异常是程序运行时候出现的不正常的情况,是java对不正常现象进行描述后的对象体现。
    <2>java中对问题划分为两类:
       对于严重的问题,java通过Errror类进行描述。
       对于非严重性问题:java通过Exception类进行描述。
       异常体系:
           Throwable
            |---Error
                |---Exception
                           |-----RuntimeException

   <3>异常的特点:异常体系中的所有类以及建立的对象都具有可抛性。也就是可以被 throw和throws 关键字所有操作。只有异常体系具备该特性。
   <4>throws和throw区别:
    1、throws使用在函数上,throws后面跟的是异常类,可以跟多个,用逗号隔开。
    2、throw使用在函数内,throw后跟的是异常对象。

2、异常的处理
    <1>异常处理的基本格式
        try
        {
            异常检测代码;
        }
        catch(Exception e)
        {
            异常输出语句;
        }
        finally
        {
            一定会执行的语句,一般释放资源时使用finally代码块
        (例如:数据库资源、系统资源);
        }

    <2>异常处理的原理:
        1.try中的代码,在异常出现时新建一个对象:new AritchmeticException()。
        2.将该对象传给catch函数,打印异常输出信息。

    <3>对异常对象的常见操作
        String getMessage();     //打印异常对象输出信息
        String toString();        //将异常对象转换为String类型
        void printStackTrace();   //打印堆中异常对象
        *注意:其实jvm默认的异常处理机制,是调用的printStractTrace方法,打印异常的堆栈中的跟踪信息。  
   

    <4>异常声明的两种处理方式
        1.继续抛出(关键字throws、相当于未处理)
        2.使用异常处理的结构进行处理。
        try{}
        catch(Exception e){}
        finally{}

    <5>多异常的处理
        1、当一段功能代码抛出多种异常时,可用多个catch代码块捕获相应异常。
        2、对方声明几个异常,就对应有几个catch块。
        如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

    <6>自定义异常处理
        1、当在函数的内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
           要么在内部try catch处理;要么在函数上声明让调用者处理。
        2、自定义异常信息
       当要定义自定义异常的信息时,可以使用父类已定义好的功能。
       异常信息传递给父类的构造函数。
        class MyException extends Exception
        {
            MyException(String message)
            {
                super(message);
            }
        }
        3、自定义异常的好处:
            1.将问题进行封装。
            2.将正常流程代码和问题处理代码相分离,方便阅读。

    <7>运行时异常:RuntimeException
        1、特殊的异常RuntimeException
            如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
            如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
            原因:之所以不用在函数上声明,是因为不需要调用者处理。
                  当该异常发生,希望程序停止。因为在运行时,出现了
                  无法继续运算的情况,希望停止程序后,对代码进行修正。 
        2、两种常见的异常:
            1.编译时被检测异常
                该异常在编译时没有处理(try或抛出),编译失败。
                该异常被标识,代表着可以被处理。
            2.运行时异常(编译时不需要检测)
                在编译时,不需要处理,编译器不检查。
                该异常的发生,建议不处理,让程序停止,需要对代码进行修正。

    <8>异常处理的常用格式:
        1.第一种格式:
            try{}catch(){}finally{}
        2.第二种格式:
            try{}catch(){}
        3.第三种格式
            try
            {
                不属于本模块的异常,抛出到别的模块
            }
            finally
            {}
    *注意:
        1、释放资源时使用finally代码块
        2、finally只有一种情况不会执行。当执行到System.exit(0);finally不会执行。

    <9>异常在子父类覆盖中的体现
        1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
        2、如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
        3、如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
           如果子类方法发生了异常,就必须要进行try处理。绝对不能抛出异常。

    <10>异常的练习(异常在子父类覆盖中的体现,RuntimeException和Exception的区别)
        需求:计算圆形、正方形的面积(抛出异常的练习)

        class AException extends RuntimeException
        {
            AException(String message)
            {
                super(message);
            }
        } 

        class BException extends AException
        {
            BException(String message)
            {
                super(message);
            }
        }

        class CException extends Exception
        {
            CException(String message)
            {
                super(message);
            }
        }

        class Shape
        {
            void getArea()throws AException
            {
                throw new AException("输入的数据不符合规范!");
            }
        }

        class Rec extends Shape
        {
            private double len;
            private double ;
            Rec(double len,double wid)//throws BException 
            {
                if(len <= 0 || wid <= 0)
                    throw new BException("输入的数据不符合规范!");
                this.len = len;
                this.wid = wid;
            }

            void getArea()
            {
                System.out.println("Area = " len*wid);
            }
        }

        class Cricle extends Shape
        {
            private double r;
            private final double PI = 3.14; 
            Cricle(double r)
            {
                this.r = r;
            }

            void getArea()
            {
                System.out.println("Area = " r*r*PI);
            }
        }

        class ExceptionDemo1
        {
            public static void main(String[]  args)
            {
                Rec r1 = new Rec(-2,3);
                r1.getArea();
            }
        }

二、包(package)

1、包的作用:对类文件进行分类管理,给类提供多层命名空间,写在程序的第一行。
     总结:1.包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
         2.不同包中的子类还可以直接访问父类中被protected权限修饰的成员。
         3.包与包之间可以使用的权限只有两种,public和protected。 

   访问权限总结:
                       public   protected   default   private 
        同一类中:  ok       ok         ok         ok
        同一包中:  ok       ok         ok
        子类:         ok       ok
        不同包中:  ok

二、import关键字

1、import导入包注意事项:
    导入其他包中的类(只导入了包中的类,没有导入包中的子包)。
    建议,不要写通配符,使用那个类,就导入那个类。因为不同的包中有可能重名的类。 
2、包名的定义规范:
    建立包名不要重复,可以使用URL来完成定义,URL是唯一的。
    例如:www.itcast.com
          package cn.incast.test1;

相关文章

网友评论

      本文标题:八、Java语言基础8(异常和包)

      本文链接:https://www.haomeiwen.com/subject/ugyqwqtx.html