【JAVA基础教程】java中异常机制总结
【JAVA基础教程】java中异常机制总结
潭州学院 发表于3年前
【JAVA基础教程】java中异常机制总结
  • 发表于 3年前
  • 阅读 19
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: Java 异常处理是使用 Java 语言进行软件开发和测试脚本开发时不容忽视的问题之一,是否进行异常处理直接关系到开发出的软件的稳定性和健壮性。那么我们来具体了解一下JAVA异常方面的内容

 Java 异常处理是使用 Java 语言进行软件开发和测试脚本开发时不容忽视的问题之一,是否进行异常处理直接关系到开发出的软件的稳定性和健壮性。那么我们来具体了解一下JAVA异常方面的内容。

一、什么是异常。 
  导致程序非正常结束,或导致程序可能出错(中断运行的原因)可谓异常。比如说我们常用的qq有时候会因为某种原因自动关闭了,这可以理解是一种异常。 
二、异常的种类 
  我们常见的异常可以分为两大类 
1.运行时异常 
比如: 
  (1)空指针异常 
当一个对象没有实例化拿过来用时会出现这样的异常,这种异常在运行时会抛出“java.lang.NullPointerException”这样的异常。 
如下代码:

package net.java.t;

/*

 * 测试类

 */

public class Test {

//声明Test对象属性

private static Test t;


/**

主函数

*/

public static void main(String[] args) {

t.play();

}

public void play(){}

}

便会产生这样的异常。 


(2)数组下标越界 
这种异常是我们做练习中经常遇到的,因为当你定义了一个数组后,这个数组的大小就是固定的。 
比如我们定义了这样一个数组int array[]=new int [8]; 
那么这个数组下边大小就只能从0到7当下标不在这个范围之内便产生异常。 
如上面我们创建的数组当我们再输入这样的代码array[8]=89;时,便会抛出“java.lang.ArrayIndexOutOfBoundsException: 8”并指出下标8出现越界错误。 

(3)栈溢出 
当程序陷入死递归,死循环都会出现栈溢出,这也是一种常见的运行时异常,该异常会抛出“java.lang.StackOverflowError”这样的异常。 

(4)类型转化错误 
我们知道当两个类有继承关系,当要实例化父类对象时,可以用子类来new 一个,这种便是类型的自动转化,当子类要转化成父类类型时就必须强制转化。 
如下: 

public class A extends B{

}


B b=new A();

这样是正确的,但是当我们用两个没有任何关系的类这样做时,假设上面所得A类和B类没有继承关系,当程序运行时便会抛出“java.lang.ClassCastException: net.java.t.B cannot be cast to net.java.t.A”这样的异常。 
从上面几个例子中,抛出的异常前面是异常的类型如java.lang.StackOverflowError 
java.lang.ClassCastException等等,而后面的是异常根据你代码的一些提示,这个能让你更好的去发现出现的异常在什么地方,如上面例子中的“8”和“B cannot be cast to net.java.t.A”。 


2.强制异常 
强制异常便涉及到了try{}catch(){}异常处理机制。 
所谓强制异常,便是出现异常,强制要你去处理这个异常,比如调用的方法中有未处理的异常(即方法中使用了throws异常类名),就要求我们必须去捕获这个异常并处理或者将这个异常再抛出,这也可以理解是对异常处理的一种方法。 
比如我们实例化一个文件类对象f并调用创建新文件的方法如下: 
File f=new File(); 
f.createNewFile(); 
第二句代码便是一个可能产生异常的语句(只是可能),因为当我们去创建一个新文件时要去指定它的路径,要是该路径不存在或者另外的原因使新文件不能产生,那么这样就会出现错误,所以在定义createNewFile()方法时便考虑到了这一点,所以在定义这个方法时用了throws异常类名下面是该方法定义代码: 

public boolean createNewFile() throws IOException {

SecurityManager security = System.getSecurityManager();

if (security != null) security.checkWrite(path);

return fs.createFileExclusively(path);

    }

可能我们会想这个异常从哪里来呢?在这里我们就很容易想到这也是自定义的一个东西果然在createNewFile()方法的返回值fs.createFileExclusively(path)调用的方法定义中我们可以看到这样的语句; 
下面是这个方法的定义: 

 public abstract boolean createFileExclusively(String pathname)

throws IOException;

该方法继续抛出异常,我们可以找到后面一个自定义异常对象。 
即throw 实例化的一个异常对象 
throws是将异常抛出。 
比如我们去定义这样一个方法: 

public void test() throws Exception{

int index = 8;

int array[]=new int [8];

array[index]=10;

if(index>=8||index<0){

throw new Exception("数组越界");

}

当你去调用这个方法时便会提醒你是要用try{}catch(){}去捕获异常并处理还是把异常再抛出即add throws declaration or surround with try/catch 
现在知道异常怎么来了吧。 

3.关于try{}catch(){}finally{}的运用 
这个语句用来发现异常并处理异常 
try{}大括号中用来放可能出现的代码语句,若有异常catch(){}会去铺货该异常,并在{}中去处理 
那要是try{}中有多个可能的异常存在呢? 
catch(){}中的小括号有带异常类对象参数当有多个异常时我们可以用多个catch(){}并给catch小括号参数分别设置可能的对应的异常类对象参数。或者将该参数设置成Exception e 该异常类是所有异常类的父类,这这边会实现父类子类对象间的自动转型。 
注意点:try()catch(){}语句,他只会执行捕获的第一个出现异常的代码语句,当第一个语句出现异常,它会去发现并捕获和处理,第二句代码就不会去执行。 
而finally{}是都会去执行的代码语句块,不管是否出现了异常在finally中的代码都会被执行。 


三.异常信息分析和程序调式 
上面讲了java中的异常种类举了不少例子,也可以看出java中出现异常都会给我们一些提示信息,这会大大方便了我们去寻找错误。 
一般异常信息分析和程序调式步骤可以如下: 

          1.根据异常类,来确定异常的类型(JDK的API) 
2.异常的提示信息 
3.找到出错的行(位置)【第一个类名是否是你定义的,如果不是,则再看下一行】 
4.分析问题(System.out.println();) 
5.修改代码 

          System.out.println();输出语句功能非常强大,是我们去调式程序的第一选择,比如上面例子的数组下标出现越界问题时,我们根据异常类java.lang.ArrayIndexOutOfBoundsException 
知道它是数组下标越界异常,利用输出语句将数组长度输出并根据异常提示信息数字8,知道是下标8出现了错误,在去找到改行代码,分析为什么会出现这样的错误,发现了原来我们定义的这个数组长为8但数组下标从0开始所以最大只能到7,这样我们就很快很改正这个错误了。。 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 13
博文 23
码字总数 38387
×
潭州学院
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: