JAVA复习笔记--------类(六)异常




    记得有人说过,世界上不存在没有BUG的软件。一个好的异常处理体系可以增强软件的健壮性。所谓异常,就是程序在运行时出现的不正常的情况。异常就好比生活中的问题。问题时现实生活中的一个具体事物,无法忽视,而Java自然也不会对异常置之不理,Java通过类的形式把异常封装成对象,也是Java对不正常情况进行描述后的对象体现。

Java中对问题有两种划分,一种是严重的问题,一种是非严重问题, 对于严重的,java通过Error类进行描述。对于Error一般不编写针对性的代码对其进行处理。对与非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。无论Error或者Exception都具有一些共性内容,比如:不正常情况的信息,引发原因等。因此,就把这些共性的东西抽取出来封装成一个父类Throwable,该类下面有两个子类:Error通常出现重大问题如:运行的类不存在或者内存溢出等不编写针对代码对其处理Exception在运行时运行出现的一起情况,可以通过try catch finally,具体的格式如下:

try{

需要被检测的代码;

}catch(异常类 变量){

处理异常的代码;(处理方式)。

}finally{

定会执行的语句;

}//注意:Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0),即return;Exception和Error的子类名都是以父类名作为后缀。我们遇到的try,cactch,finnally给事可能与三种:第一个格式:

try{

}catch (){

}

第二个格式:

try{

}catch (){

}finally{

}

第三个格式:

try{

}finally{

}

记住一点:catch是用于处理异常。如果没有catch就代表异常没有被处理过,如果该异常是检测时异常。那么必须声明。
    对捕获到的异常对象进行常见方法操作一般在Throwable中的方法,主要有:
    getMessage( )获取异常信息,返回字符串。
l  toString( )获取异常类名和异常信息,返回字符串。
l  printStackTrace( )获取异常类名和异常信息,以及异常出现在程序中的位置返回值void。这是Java的默认的异常处理机制:打印异常的堆栈的跟踪信息。
    printStackTrace( PrintStream s )通常用该方法将异常内容保存在日志文件中,以便查阅。
在异常处理体系中有throws和throw啷个关键字。throws用于标识函数暴露出的异常,这样便于提高安全性,让调用处进行处理,不处理的话就会编译失败。throw用于抛出异常对象。throws与throw的两者之间有一定的区别:thorws用在函数上,后面跟异常类名,可以跟多个,用逗号隔开即可。throw用在函数内,后面跟异常对象,即在功能上通过throws关键字声明该功能可能会出现的问题在处理异常的时候,我们应该对异常的处理歇息些,这样的话可以使得处理更为具体。具体的处理部分在ccatch部分,仅仅打印根本上没什么大的意义。

    项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对于这些特有的问题可以按照java的对问题封装的思想。将特有的问题。进行自定义的异常封装。一般而言自定义类继承Exception或者其子类通过构造函数定义异常信息,原因是异常体系有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。只有这个体系中的类和对象才可以被throws和throw操作。
Class DemoExceptionextends Exception {
    DemoException(String message){
        super(message);
    }

    Exceptoin中有一个特殊的子类异常RuntimeException(运行时异常)。如果在函数内抛出该异常,函数上可以不用声明,编译一样通过。如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过。之所以不用在函数声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。

对于异常分两种:编译时被检测的异常;编译时不被检测的异常(运行时异常。RuntimeException以及其子类),RuntimeException以及其子类如果在函数中被throw抛出,可以不用在函数上声明。一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。
如果父类抛出多个异常,那么重写(覆盖)方法必须抛出那些异常
的一个子集,不能抛出新的异常。如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。

至此类的部分就大部分结束了,这里还有几个小概念需要解决下。

包(package)对类文件进行分类管理给类提供多层命名空间。 写在程序文件的第一行类名的全称的是包名. 类名包也是一种封装形式。被访问的包中的类权限必须是public的。类中的成员权限:public或者protected。其中protected是为其他包中的子类提供的一种权限。这里一共有四中权限,具体如下: 

 

public 

 protected

Default默认

private

同一个类中

ok 

ok

 ok 

ok

同一个包中  

ok 

ok  

 ok

 

子类  

ok 

ok

 

 

不同包中  

ok 

 

 

 

Java一些常用的包有:

java.lang : java的核心包 jdk1.2版本以后,该包中的类自动导入。

java.awt: 用于制作图形界面。

java.io:input output  用于操作设备上的数据。

java.util : 这里定义是java的工具类。集合,日期。

java.net:用于网络通讯的。

java.applet:  application let,server let(servlet)      java server page(jsp)。  

classpath给JVM提供的一个环境变量指定类或者包所在的路径classpath变量值的最后有分号与无分号的区别:若末尾加上了分号,则在环境变量中寻找,若没有则在当前目录中寻找,若末尾没有分号则仅仅在环境变量中寻找,一般建议不要加分号.import可以简化类名。一个程序文件中只有一个package,可以有多个
import。用来导包中的类,不导入包中的包。通常写import mypack.Demo;而不写import mypack.*是为了加快效率。
Jar包Java的压缩包,他的作用是方便项目的携带方便于使用,只要在classpath设置jar路径即可,她是数据库驱动,SSH框架等都是以jar包体现的。Jar包的操作通过jar.exe工具对jar的操作。创建jar包jar -cvf mypack.jar packa packb查看jar包jar -tvf mypack.jar [>定向文件]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值