黑马程序员-异常

来源:互联网 发布:月经期饮食知乎 编辑:程序博客网 时间:2024/06/05 18:32

------- android培训、java培训、期待与您交流! ----------

异常:就是程序在运行时出现的不正常情况

异常由来:问题是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况进行描述后的对象体现

 

异常的体系

Throwable

-----Error 出现重大问题,运行的类不存在或者内存溢出。

                   不编写代码对其处理

-----Exception 在运行时出现的一些情况

                   可以通过try   catch  finally 进行处理

Exception和Error的子类名都是以父类名作为后缀

 

异常的处理

try{

         需要被检测的代码

}catch(异常类 变量) {

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

Finally{

         一定会执行的语句

}

 

对异常对象进行常见方法操作

String getMessage() 获取异常的信息

String toString()  //异常名称:异常信息

void printStackTrace() 打印堆栈中的跟踪信息  //异常名称:异常信息;异常出现的位置

 

自定义异常

自定义的异常java不认识,只能手动抛出

 

当在函数内部出现了throw抛出异常对象那么就必须要给对应的处理动作

要么在内部try catch处理

要么在函数上声明让调用者处理

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

 

自定义除数我负数的异常

class FushuExceptionextends Exception{

    private Stringmsg;

    FushuException(String msg) {

       this.msg = msg;

    }

   

    public String getMessage(){

       returnmsg;      

    }  

}

 

class Demo {

    int div(int a,int b)throws FushuException{

       if(b<0)

           throw new FushuException("除数为负数");

       return a/b;      

    }

}

 

public class AutoBox {

 

    /**

     * @param args

     * @throws FushuException

     */

    public static void main(String[] args)throws FushuException {

       // TODO Auto-generatedmethod stub

       Demo d = new Demo();

       int di = d.div(4, -1);

       System.out.println(di);

    }

}

但上面的异常信息定义的过于麻烦

如何定义异常信息呢?

因为父类中已经把异常信息的操作都完成了

所以子类只要在构造时,将异常信息传递给父类通过super语句

那么就可以直接通过getMessage方法获取自定义的异常信息

class FushuExceptionextends Exception{

 

    FushuException(String msg) {

       super(msg);

    }

}

自定义异常类,必须继承Exception 因为exception有个特点,就是异常类和异常对象都要抛出。他们都具备可抛性,这个可抛性是throwable这个体系中独有的特点

 

 

 

throws和throw的区别

throws 使用在函数上  throw使用在函数内

throws后面跟的异常类,可以跟多个  用逗号隔开

throw 后面跟的异常对象

 

当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败。注意:RuntimeException除外,也就是

RuntimeException在函数内抛出了,函数上不用声明

如果在函数上声明了该异常,调用者可以不用进行处理

 

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

如果函数声明了异常,调用者需要进行处理,处理方式可throws可以try

 

异常有两种

         编译时被检测异常

                   该异常在编译时,如果没有处理,编译失败。该异常被标识,代表这可以处理

         运行时异常

                   该异常的发生建议不处理,让程序停止,好对代码修改

 

异常在子父类覆盖中的体现:

1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类

如:

class A extends Exception{}

class B extends A

class FU(){ void show()throws A   }

classZI(){ void show() 只能throws A或者B }

2.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子类

 

 

异常的好处:

 

将问题进行封装。

将正常流程代码和问题处理代码相分离,方便于阅读。

 

异常的处理原则:

1 处理方式有两种:try 或者throws。

2 调用到抛出异常的功能时,抛出几个,就处理几个。一个try对应多个catch。

3 多个catch,父类的catch放到最下面。

4 catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句,也不要不写。

当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。

 

 

 

 

 

用来对类文件进行分类管理的

给类文件提供了多层命名空间

写在程序的第一行

类名的全称是   包名.类名

 

 

如果原文件带着包的话也就是package  需要加参数

Javac –d 文件位置原文件名 

 

包与包之间访问

常见问题

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

2.      Packa包不在当前目录下: 需要设置classpa,告诉jvm去哪里找知道的packa包

3.      权限不够,需要将权限设置为public

 

总结:

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

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

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

public     protected      default     private

同一个类中       可以              可以                     可以              可以

同一个包中       可以              可以                     可以

子类                     可以              可以

不同包中           可以

 

Jar包

Java的压缩包

方便于项目的携带

方便于使用,只能在classpath设置jar路径即可

 

 

 

 

 

 

 

 

 

 

 

 

 

 


原创粉丝点击