• 黑马程序员_Java学习日记num7


    ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

    学习内容:异常体系;一个经典的异常处理例子;包

     
    一、异常体系
    1,异常概念
    异常是对问题的描述,根据java的面向对象思想将问题进行对象的封装
     
    2,异常体系
    异常的大哥是Throwable,下面有两个小弟分别是Error和Exception。对于Error是一种严重的错误,一般不编写针对性的代码对其进行处理。另外一种是Exception,非严重性的错误,一般要编写针对性的处理代码。在Exception的小大哥下,还有一个小弟弟RuntimeExceptin(运行时异常),这个小异常体系中的异常,可以不抛出,不声明,不处理,程序照样编译通过,照样正常执行,很特殊吧,哈哈。
     
    3,异常体系的特点
    异常体系中的所有类以及建立的对象都具备可抛性,也就是说可以被throw和throws关键字所操作,只有异常体系具备这个特点。
     
    4,throw和throws关键字的用法和区别
    throw定义在函数内部,用于抛出异常对象。
    throws定义在函数上,用于抛出异常类,可以抛出多个,中间使用逗号隔开。
    当函数内有throw抛出的异常对象,并未进行处理,那么必须要在函数上声明,否则编译失败,但是RuntimeException这个特殊异常例外,也就是说,函数内部抛出了RuntimeException异常,函数上可以不声明。如果函数上声明了异常,调用者必须由相应的处理方式,要么抛给上一层调用者,或者自己在内部自己处理。
     
    5,异常的处理语句
    try
    {
       需要被检测异常的代码;
    }
    catch()
    {
    处理异常的代码
    }
    finally
    {
    一定会执行的代码
    }
     
    6,异常语句的几种结合格式
    try              try          try
    { }                { }         {  }
    catch             finally      catch()
    {   }              {    }       {  }
                                    finally
                                     {  }
     
    7,自定义异常
    定义异常类继承Exception或者RuntimeException
    1),为了让该类具备可抛性
    2),让该类具备操作异常的共性方法
     
    8,异常的处理原则
    1),异常有两种处理方式,一种是自己处理try 或者 抛出去 throws让调用者处理
    2),调用到抛出异常的功能时,抛出几个,就处理几个,一个try可以对应多个catch
    3),多个catch,父类的catch放在最下面
    4),catch内,需要定义针对性的处理方法,不要简单的定义输出语句,也不要不处理而把问题隐藏。
     
    9,一个很重要的异常处理思想
    当捕获到异常,本功能处理不了,可以继续在catch中抛出。
    如果捕获的异常处理不了,但并不属于该功能的异常,可以将异常转换后,再抛出和该功能相关的异常。或者异常可以处理,当需要将异常产生和本功能相关的问题提供出去,让调用者知道并处理,也可以将捕获到的异常处理后,转换新的异常。
     
    10,在子父类覆盖时,异常的处理原则
    1),子类抛出的异常,必须是父类的异常的子类或者子集。
    2),如果父类或者接口没有异常抛出,自理覆盖出现异常,只能自己处理,也就是try处理,绝对不能抛出
     
    11,一个注意事项
    throw以及return下面的语句不会被执行,并且这种情况下会编译失败。
     
    二、一个经典的异常处理例子
    需求:以老师讲课使用电脑,而电脑可能出现各种各样的故障,例如,蓝屏,或者硬件损坏等等,蓝屏的话,老师可以自己处理,重启电脑就行了,如果是硬件损坏,则老师无法处理,但是这个异常与老师调用讲课的方法无关,但是他可以转换为自己的异常然后抛出,让高层解决。
    class BlueScreenException extends Exception
    {
    BlueScreenException(String msg)
    {
    super(msg);
    }
    }
    class SmokingException extends Exception
    {
    SmokingException(String msg)
    {
    super(msg);
    }
    }
    class NoPlanException extends Exception
    {
    NoPlanException(String msg)
    {
    super(msg);
    }
    }
    class Computer
    {
    private int state=3;
    public void run()throws BlueScreenException,SmokingException
    {
    if (state==2)
    {
    throw new BlueScreenException("blue screen");
    }
    if (state==3)
    {
    throw new SmokingException("computer is smoking");
    }
    System.out.println("computer is running");
    }
    public void reset()
    {
    state=1;
    System.out.println("电脑已经重启完毕");
    }
    }
    class Teacher
    {
    public void teach() throws NoPlanException
    {
    Computer cmpt=new Computer();
    try
    {
    cmpt.run();
    System.out.println("讲课");
    }
    catch (BlueScreenException e)
    {
    cmpt.reset();
    System.out.println("讲课");
    //cmpt.run();
    }
    catch (SmokingException e)
    {    
                test();
    throw new NoPlanException("由于电脑坏了,课时无法继续");
    }
    }
    public void test()
    {
    System.out.println("练习");
    }
    }
    class TestException
    {
    public static void main(String[] args)
    {
    Teacher t=new Teacher();
    try
    {
    t.teach();
    }
    catch (NoPlanException e)
    {
    System.out.println(e.toString());
    System.out.println("放假活着联系");
    }
    }
    }
     
    三、包
     
    1,包的概述
     1)对类文件进行分类管理
     2)给类提供多层的命名空间
     3)写在程序文件的第一行
     4)类名的全称就变成了   包名.类名
     5)包也是一种封装形式。
     
    2,包的出现访问特点
    1)包与包之间进行访问,被访问的包中的类以及类中的成员需要public修饰
    2)不同包中的类可以直接访问父类中被protected权限修饰的成员
    3)包与包之间可以使用的权限只有两种:public 和protected
     
    3,import关键字
    当包出现后,包与包之间的类的访问需要使用类的全称,也就是包名.类名,这时候为了简化书写,就引入了import关键字。import导入程序中是该包中的类,而没有包中的子包。在import导入时,不要使用*通配符,需要用到包中的那个类,就导入那个类,因为使用通配符,太占用内存。如果两个保重有重名的类,那样在使用类时类名前加包名。
     
    4,jar包
    jar包是java的一种压缩包
    方便项目的携带
    方便于使用,只要在classpath下设置jar路径即可
    数据库驱动 SSH框架都是以jar包体现的
  • 相关阅读:
    Django~1
    Python 正则表达式入门(初级篇)
    pytho占位符
    django之基于cookie和装饰器实现用户认证
    form error
    Python之路【第十七篇】:Django【进阶篇 】
    djangoform详解
    django自定义form验证error
    Django CRM客户关系管理系统
    ulimit
  • 原文地址:https://www.cnblogs.com/Rebecca-gg/p/4464709.html
Copyright © 2020-2023  润新知