黑马程序员———异常,包的总结

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


 

异常: 就是程序中出现的不正常情况。
     异常由来:问题是现实生活中的一个事物,也可以通过java的类的形式
       进行描述,并封装成对象。
 
     异常的体系Throwable--
       Throwable:
               Error:
                    通过出现重大问题如:运行的类不存在或者内存溢出。
                    不编写针对代码对其处理。
     Exception:
    
       在运行时运行出现的异常情况,可以通过 try catch finally 解决。

Exception和Error的子类名都是以父类名作为后缀起名的。
       无论Error还是Exception都有共性内容,比如:引发原因,不正常情况的信息等。


2 异常的处理:
try{
       需要被检测的语句;
}catch(异常类   变量) {
     处理异常的代码(处理方式)
}finally {
     一定会执行的语句;
}


3 对捕获到的对象进行常见方法操作:
String getMessage();
String toString();
e.printStackTrace();
其实虚拟机默认的异常处理机制就在调用e.printStackTrace();

在函数上声明异常:
     便于提高安全性,让调用者进行处理。不处理编译失败。


对多异常的处理:
     1.声明异常时,建议声明更为具体的异常,这样处理的可以更具体。
     2.对方声明几个异常,就对应有几个catch块。不要定义多余的catch块
          如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

建议在进行catch处理时,catch中一定要定义具体处理方式。
                不要简单定义一句:e.ptintStachTrace(),也不要就书写一条输出语句。

实际开发,当出现问题时,会把问题以日志的形式体现,称为异常日志



因为项目中会出现特有的问题。而这些问题并未被java所描述并封装成对象。
所以对于这些特有的问题可以按照java对问题封装的思想,将特有的问题进行自定义的异常封装。

自定义异常:
     需求:在本程序中,对于除数为负数的情况,视为错误,无法进行运算。
     所以需要对这个问题进行自定义的描述。
    
当在函数内部出现了throw抛出异常对象,那么必须要给对应的处理动作。
要么在内部try  catch处理。
要么在函数上声明让调用者处理。

一般情况,在函数内出现异常,函数上也需要声明。


               发现打印的结果只有异常的名称,却没有异常的信息。因为自定义的异常没有定义信息。
                那如何定义异常信息呢?
     因为父类中已经把异常信息的操作都完成了。
     所以子类只要在构造时,将异常信息传递给父类通过super()语句。
     那么就可以直接通过getMessage方法获取自定义的异常信息。
    
自定义异常:必须是自定义类继承Exception
     继承Exception原因:
     异常体系有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中国独有特点。
     只有这个体系中的类和对象才可以被throws和throw操作。
    

  • throw和throws的区别:
       throws使用在函数上
     throw使用在函数内
    
     throws后面跟的是异常类,可以跟多个,用逗号隔开。
     throw后面跟的是异常对象。


     Exception中有一个特殊的子类异常RuntimeException 运行时异常。

如果在函数内抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过
之所以不用再函数声明,是因为不需要调用者处理。
当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。

  • 自定义异常时:如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException

  • 对于异常分两种:
1.编译时被检测的异常。
2.编译时不被检测的异常(运行时异常,RuntimeException及其子类)

  • finally代码块:一定会执行的语句,
           通常用于关闭资源(如数据库的关闭)

 

------------------------------------

 

包(package)
对类文件进行分类管理

给类提供多层命名空间

写在程序文件的第一行。

类名的全称的是   包名.类名

包也是一种 封装形式。

包名的定义: 所有的字母小写


javac -d . PackageDemo.java//当前目录
javac -d c:\myclass PackageDemo.java//指定目录
set classpath = c:\myclass    //不用设置到pack目录下。
java pack.PackageDemo


总结:
       包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。

     不同包中的子类还可以直接访问父类中被protected权限修饰的成员。

     包与包之间可以使用的权限只有两种:public   protected



          public      protected      default      private
同一个类中     T         T             T          T
同一个包中     T          T             T         
子类          T         T           
不同包中     T        


导包:为了简化类名的书写,使用一个关键字import
import:导入的是包中的类。
通常在开发中,用到哪个类就导入哪个类,因为写通配符*,太占内存。

写包名可以方便管理,也可以避免类重名。
建议定义包名不要重复,可以使用url来完成定义,url是唯一的。
www.itcast.cn
package cn.itcast.demo
package cn.itcast.test



Jar包:
java的压缩包。
1.方便项目的携带。
2.方便于使用,只要在classpath设置jar路径即可。
3.数据库驱动,SSH框架等都是以jar包体现的。

打包成jar包:实例1:将两个类文件归档到一个名为classes.jar的归档文件中。
          jar cvf classes.jar  Foo.class  Bar.class
          实例2:使用现有的清单文件“mymanifest”归档到“classes.jar”中,
          jar cvfm classes.jar  mymanifest  -C  foo/.

          jar -cf  haha.jar  packa pack 


JDK中的工具:jar.exe
把jar包放到classpath路径下,就能使用包中的数据。
rt.jar是java的类库。
编译工具所属的类在tools.jar中。

把某个文件或者dos命令行中的界面存到硬盘中的一个文件中,可以使用:
jar -tf rt.jar > c:\rt.txt  (把rt.jar中的数据存到rt.txt中)


Object中:
public class Object{
     private static native void registerNatives();
     static{
          registerNatives();
     }
//本地注册。 关键字native就是调用系统中的虚拟机。虚拟机找windows。

public native int hashCode();//用相应系统中的hashCode方法。

native走的就是本地方法区,底层的东西看不着。



 

 

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值