java中的异常处理

来源:互联网 发布:360软件客服电话 编辑:程序博客网 时间:2024/06/03 13:52

异常的体系:

4.1Throwable

类 Throwable Throwable 类是 Java 语言中所有错误或异常的超类
直接已知子类:
Error, Exception
Error:
通常出现重大问题如:运行的类不存在或者内存溢出等。(OutOfMemoryError内存溢出)
不编写针对代码对其处理
Exception :
在运行时运行出现的情况,可以通过try catch finally
异常的由来是java对不正常情况进行描述后的对象体现。
Exception和Error的子类名,都是以父类名作为后缀。
RuntimeException Runtime异常
java.lang.ArithmeticException: 数学计算异常
IndexOutOfBoundsException 角标越界异常
NullPointerException 空指针异常
4.2 异常的处理:
java语句提供了特有的语句进行处理
try
{
需要被检测的代码;
}
catch(异常类 变量)
{
处理异常的代码;(处理方式)

}
finnally
{
一定会执行的语句;

}
注意:Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。

class Demo
{
{public int div(int x, int y)
return x / y; // 当虚拟机执行到此处时,会产生 new ArithmeticException() 异常对象 然后抛给main函数
}
}

public class ExceptionDemo {
public static void main(String[] args) {
Demo d = new Demo();
try {
int a = d.div(5, 0);
System.out.println(a);

    }     catch (Exception e)       // 主函数中的catch捕获到异常开始处理  Exception e = new ArithmeticException();    {           System.out.println("除零了");    }    System.out.println("over");      //  运行结果是  除零了   over}

}

对捕获的异常对象常见的方法操作:
String getMessage() 获取异常的信息。 e. getMessage();
printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
toString() 获取异常类名和异常信息,返回字符串。

4.3 throws和throw
throws用于标识函数暴露出的异常。
throw用于抛出异常对象。
throws与throw的区别:
throws用在函数上,后面跟异常类名。
throw用在函数内,后面跟异常对象。
对于throws声明的异常常见有两种操作一是捕捉异常,二是声明异常以便抛出。

第一种是对于声明的异常,直接抛出。

class Demo {    public int div(int x, int y )   throws Exception            //在功能上用throws声明该功能可能出现的问题。    {        return x / y;     }}public class ExceptionDemo {    public static void main(String[] args)    throws Exception    {        Demo d = new Demo();            int a = d.div(5, 1);            System.out.println(a);    }     }

异常声明的第二种处理方式:try catch 处理

class Demo {    public int div(int x, int y)  throws Exception     {        return x / y;    }}public class ExceptionDemo {    public static void main(String[] args) {        Demo d = new Demo();        try {            int a = d.div(5, 1);            System.out.println(a);        }         catch (Exception e)    //此处的异常类是根据上面抛出的是什么异常类然后捕捉        {             System.out.println(e.toString());            //toString()   获取异常类名和异常信息,返回字符串。        }    }}

4.4自定义异常
自定义类继承Exception或者其子类
通过构造函数定义异常信息。
通过throw将自定义异常抛出。(throw抛出的是异常对象) throw new DemoException();
例:

Class DemoException extends Exception{    DemoException(String message)    {        super(message);    }}

当在函数内出现throw抛出异常对象,就要给出对应的处理。
要么try catch处理
要么在函数上声明让调用者处理。
一般情况下函数内出现异常需要在函数上声明异常。

class FuShuException extends Exception{}class Demo{    public  int div(int x, int y) throws FuShuException   //  此处不抛出异常,会编译失败。    {                                                          //函数内出现异常,函数上抛出throws  异常类        if (y<0)         throw new FuShuException();     //throw抛出的是异常对象        return x/y;    }}public class SelfDefineDemo {    public static void main(String[] args) //throws FuShuException    {        Demo d = new Demo();        try{           int  b = d.div(5, 1);           System.out.println(b);        }        catch(FuShuException  e)        {          System.out.println(e.toString());            //com.zh.exceptiondemo.FuShuException             System.out.println("除数为负数了");  //包名.类名 (类名的全称)  toString() 获取异常类名和异常信息,返回字符串。        }    }}

如何定义异常信息?
因为父类已经把对异常信息的操作都操作做完了,所以子类在构造时通过super语句直接将异常信息传递给父类利用父类的构造方法就可以完成信息传递,利用getMessage就可以获取自定义的异常信息、、、
自定义异常需注意:
必须是自定义类要继承(extends)Exception.
异常体系有一个特点:异常类和异常对象都可以被抛出,他们具备可抛性。这个是异常体系独有的特点,
只有这个体系的类和对象才可以被 throws 和 throw 操作。
4.4.1多异常处理:
异常处理时需要注意异常不会同时发生。
当一个类中同时发生多个异常时,需要逐个处理。另外需要注意异常
定义异常时建议声明更为具体的异常。这样处理更为具体。
2,对方声明几个异常,要对应多个catch块,不要定义多的catch块。
实际开发时一般异常处理方式不会采用简单的输出语句,会采用硬盘文件方式记录异常信息称为异常日志文件。

4.5异常细节
RuntimeException(运行时异常)以及其子类如果在函数中被throw抛出,可以不用在函数上声明。也可以不用进行处理编译一样通过
如果父类抛出多个异常,那么重写(覆盖)方法必须抛出那些异常的一个子集,不能抛出新的异常。
一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。
5、包 package
对类文件进行分类管理。
给类提供多层命名空间。
写在程序文件的第一行。
类名的全称的是 包名.类名。
包也是一种封装形式。
5.1包之间的访问
被访问的包中的类权限必须是public的。
类中的成员权限:public或者protected
protected是为其他包中的子类提供的一种权限
四种权限
public protected default private
同一类中 √ √ √ √
同一包中 √ √ √
子类 √ √
不同包中 √
java中的访问控制权限
类的访问范围
A、public修饰类,表示该类在所有包中可见
B、(default)修饰类,表示该类仅在同一个包中可见
不能用protected和private修饰类

成员变量及成员方法的访问范围
A、public 包内、包外,所有类中可见
B、protected 包内所有类可见,包外有继承关系的子类可见
(子类对象可调用)
C、(default)表示默认,不仅本类访问,而且是同包可见。
D、private 仅在同一类中可见
5.2import
用来导包中的类,不导入包中的包。
import mypack.Demo
5.3Jar包
java的压缩包
方便项目的携带。
方便于使用,只要在classpath设置jar路径即可。
数据库驱动,SSH框架等都是以jar包体现的.
Jar包的操作
通过jar.exe工具对jar的操作。
创建jar包
jar -cvf mypack.jar packa packb
查看jar包
jar -tvf mypack.jar [>定向文件]
解压缩
jar -xvf mypack.jar
自定义jar包的清单文件
jar –cvfm mypack.jar mf.txt packa packb

0 0