黑马程序员_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包体现的
原文地址:https://www.cnblogs.com/Rebecca-gg/p/4464709.html