美文网首页
八、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