Java中的异常处理

异常就是抛出和捕获的过程,也就是try和catch,当保护代码块try中出现异常时,catch中的内容就会被检查。以下内容为参考了一些博客后加上自己理解的一些记录。

一、:什么是异常

《Think in java》中是这样定义异常的: 异常情形是指阻止当前方法或者作用域继续执行的问题 。异常包括错误,但是不仅仅是错误,比如使用0做除数时就会产生异常,打开一个没有的文件的时候也会产生异常。 那么什么时候才会出现异常呢?只有在你当前的环境下程序无法正常运行下去,这时它所就会从当前环境中跳出,并抛出异常。
其实异常就是你的程序无法正常执行了。

二、:java中异常的分类

Java中的异常是有很多的,不过可大体上分为三类:

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个

在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

        运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

        错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误

发生了,它们在编译也检查不到的。


所有的异常类是从java.lang.Exception类继承的子类。Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error 。Java程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。

异常类有两个主要的子类:IOException类和RuntimeException类。

Exception它又分为两种CheckedException(受捡异常),UncheckedException(不受检异常)。其中CheckException发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。而不受检测的异常发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。IOException是编译异常,RuntimeException是运行异常

三、:throw和throws

对于我这样的初学者而言,这两个有点傻傻分不清,那就来从原理和使用方式上来辨析一下
throws是向上抛出异常,通常用在方法的末尾,表示的是程序即将抛出异常,我们可以将其理解为声明的作用,也就是声明将要抛出何种类型的异常,是向上抛出的,最终由其方法的调用者来处理异常。
throw是真实的抛出异常,是一个真实的抛出异常的语句,通常不单独使用,与try。。catch或者throws来配合使用。
package TwoWeek;
public class Exception1 {
	public static void main(String args[]){
		try{
	        System.out.println(9/0);  
		}
		catch(Exception e){
			System.out.println(e.toString());
		}
		finally{
			System.out.println("继续执行");
		}
	}
}
输出结果:java.lang.ArithmeticException: / by zero
<span style="white-space:pre">	</span>  继续执行

四、:自定义异常

Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表现程序中可能会遇到的特定问题,总之就是一句话:我们不必拘泥于Java中已有的异常类型。

所有异常都必须是Throwable的子类。

如果希望写一个检查性异常类,则需要继承Exception类。

如果你想写一个运行时异常类,那么需要继承RuntimeException 类。

Java自定义异常的使用要经历如下四个步骤:

       1、定义一个类继承Throwable或其子类。

       2、添加构造方法(当然也可以不用添加,使用默认构造方法)。

       3、在某个方法类抛出该异常。

       4、捕捉该异常。 

package TwoWeek;
class MyException extends Exception{
	public MyException(String str){
		// 将异常的信息上传了
		super(str);
	}
	
	public void display(){
		System.out.println("哈哈");
	}
}

public class ExceptionSelf{
	public static void main(String args[]){
		ExceptionSelf test = new ExceptionSelf();
		try {  
	      test.display(0);   
      	} catch (MyException e) {  
    	  System.out.println(e.toString()); 
      	} 
	}
	
	public void display(int i) throws MyException{
        if(i == 0){  
            throw new MyException("这里有异常了");  
        }  
        else{  
            System.out.println(9/i);  
        }  
	}
}

五、:异常方法

下面的列表是Throwable 类的主要方法:也就是其子类中都可以使用的。

1、public String getMessage() 返回发生异常的详细信息。

2、public Throwable getCause() 返回异常的原因。

3、public String toString() 返回类的串级名字。

4、public Stack printStackTrance() 打印错误输出流。

六、:总结

1、尽量减少try块,不能使用一个来包含所有的异常

2、充分利用所有的finally关键字,保证所有的资源都被释放

3、catch语言应该尽量指定具体的异常类型

4、要对捕获的异常做处理,不能简单的打印。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值