`
gengu
  • 浏览: 86742 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java的异常处理机制

    博客分类:
  • java
阅读更多

       异常机制已经成为很多语言的一种判断其成熟度的标准,除了C之外,其他的主流编程语言比如java,C#,Ruby等都提供了成熟的异常处理机制,异常机制可以使得程序中异常处理代码和正常业务代码的分离,保证程序代码更加优雅,并可以提高程序的健壮性。

 

网上关于java异常处理机制的文章有很多,我只写一下我觉得可能需要注意的地方。

 

1:在java中处理异常主要有五个关键字:try catch finally throw throws。

throw与throws的区别是前者可以可以直接抛出一个异常,可以当做单独的语句使用,后者主要是在方法签名中使用,用于申明该方法可能抛出的异常。

 

2:java将异常分为两种 ①:checked异常②:Runtime异常,java认为Checked异常都是可以在编译阶段被处理的异常,所以强制程序程序处理所有的Checked异常,常见的Checked异常比如IOException,SqlException。所有的异常都继承自Exception类,在异常中很少有接口。Exception和Error类又继承自Throwable类。

 

3:程序捕获异常和不捕获异常的区别是这样的,如果捕获该异常并且在catch块中处理那么程序将从捕获的地方继续向下执行,如果不捕获而程序在运行时遇到异常,程序就会从运行时环境终止。请看下面的程序,模拟了一次异常的处理。

package testException;
public class test1 {
	public void test(){
		System.out.println("方法开始执行!");
		//try {
			throw new NullPointerException();
		//} catch (Exception e) {
			//System.out.println("遇到异常了");
		//}
	}
	public static void main(String[] args) {
		new test1().test();
		System.out.println("方法执行结束");
	}
}

上面的程序的输出是:

 

 

说明程序没有执行到结束就终止了,如果我们去掉注释那么程序的输出是:

 

 

       上面这个例子很好的解释了捕获异常的意义,捕获异常的意义很重大,它能保证我们的程序更加健壮,比如有这样一种程序需要输入一个整数才能正常运行,否则抛出异常,那么客户在不知道的情况下输入了一个负数,那么我们是再给其一次机会还是直接让程序退出呢?很显然我们捕获异常然后告诉客户正确的输入方式,然后再让其输入是最好的。

 

4:try catch finally 通常是一起出现的,如果有try那么在catch和finally必定有且至少有一个。finally必须放在所有的catch之后。使用finally回收资源是大部分人会做的事情,因为垃圾回收不会回收任何的物理资源比如数据库的连接等。

       在try中执行了return语句或者throw语句之后程序还是会执行finally中的代码这就是它存在的价值,当程序在try或者catch中遇到return或者throw,这两个语句都会导致该方法立即结束,但是系统并不会立即执行它们,而是去寻找该处理是不是包含finally块,如果没有,马上执行,如果有,就先执行finally块,然后跳回来执行return和throw。

那么我想如果finally中遇到了return和throw,会出现什么呢?

package testException;

public class test2 {
	public String test(){
		try {
			return "try";
		} catch (Exception e) {
			return "catch";
		}finally{
			return "finally";
		}
	}
	public static void main(String[] args) {
		System.out.println(new test2().test());
	}
}

 程序输出的是finally,说明在这里程序就退出了,恩,以后这里要谨慎了。

 

 

5:关于throws声明爆出异常,它的思路是:当前方法方法不知道该如何处理这种类型的异常,该异常应该由上一级调用者处理,如果main方法也不知道应该如何处理这种类型的异常,也可以使用Throws声明抛出异常,该异常将交给JVM处理,JVM对异常的处理方法是:打印异常跟踪信息,并终止程序运行。

       如果某段代码调用了一个throws申明的方法,该方法抛出了Checked异常,这表明该方法希望它的调用者来出来该异常,也就是说着段代码要么放在try块中显示的捕获该异常,要么代码处于另一个带throws申明抛出的方法中。

       使用throws声明抛出异常有一个限制,①子类方法中声明抛出的异常类型应该是父类方法抛出的异常类型的子类或相同②子类方法中不允许比父类方法声明抛出更多异常。

 

 

6:我们经常会看到形如这样的一些堆栈信息,其实在java中,Throwable这个超类是有方法的,其中比较重要的有

public String getMessage() 
/**比如如果是空指针异常那么返回就是这个信息
     而不会是打印出跟踪栈信息
*/

public void printStackTrace();
/**
     这个方法很复杂,在源代码中,可以看到很多类似的方法,
     但无一例外的都有递归等的出现
*/
 public void printStackTrace(PrintStream s);
 private void printStackTraceAsCause(PrintStream s, StackTraceElement[] causedTrace);
 public void printStackTrace(PrintWriter s) ;
 

 那么我们知道了程序在打印错误信息的时候并没有那么简单。

现在看下面一个程序

 

package testException;

public class test3 {

	public static void main(String[] args) throws SelfException{
		firstMethod();
	}
	public static void firstMethod()throws SelfException{
		secondMethod();
	}
	public static void secondMethod()throws SelfException{
		thirdMethod();
	}
	public static void thirdMethod()throws SelfException{
		throw new SelfException("自定义异常信息");
	}
}

class SelfException extends Exception{
	private static final long serialVersionUID = 1L;
	public SelfException() {}
	SelfException(String msg){
		super(msg);
	}
}

 程序的处理结果是这样的

 

可以看到,在最初的程序是从15行开始抛出,然后交给12行,然后到第九行,然后到第6行,在main方法终止,这个过程就是java的异常跟踪栈,它清楚的记录了应用程序中执行停止的各个点,跟踪栈总是最内部的被调用方法逐渐上传,知道最外部业务炒作的起点,通常就是程序的入口main方法或者Thread类的run方法。

 

 

0
2
分享到:
评论

相关推荐

    浅析JAVA异常处理机制.pdf

    ### 浅析JAVA异常处理机制 #### 一、Java异常处理机制概述 异常处理是Java语言中的一个重要机制,它能够确保程序在遇到不可预料的情况时仍能维持稳定运行。异常处理主要包括三个方面:捕获异常、控制程序流程以及...

    14.java异常处理机制.zip

    14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理...

    深入理解java异常处理机制

    ### 深入理解Java异常处理机制 #### 引言 异常处理机制是任何现代编程语言不可或缺的一部分,尤其是在像Java这样的面向对象的语言中更是如此。Java的异常处理机制旨在帮助开发者编写更健壮、更易于维护的代码。...

    java异常处理机制

    java异常处理机制,异常的概念,发生的原因,throwable,捕获异常的简单思维导图

    Java异常处理机制及应用.pdf

    Java 异常处理机制及应用 Java 异常处理机制是一种重要的技术,它能够帮助开发者处理 Java 语言中的错误和异常,从而提高程序的可靠性和稳定性。本文将从 Java 异常处理机制的原理、分类、抛出和捕获机制、原则等...

    Java异常处理机制及应用研究.pdf

    Java 异常处理机制及应用研究 Java 异常处理机制是 Java 程序设计的一大难点,也是使用 Java 进行软件开发时不容忽视的问题之一。是否进行异常处理直接关系到开发出的软件的稳定性和健壮性。对 Java 异常处理机制有...

    Java异常处理机制及其在项目中的应用.pdf

    Java 异常处理机制及其在项目中的应用 Java 异常处理机制是 Java 语言中的一种错误捕获机制,用于处理程序中的错误和异常。Java 异常处理机制可以分为两大类:Checked Exception 和 Unchecked Exception。Checked ...

    基于Java异常处理机制的分析.pdf

    "基于Java异常处理机制的分析" 本文主要讨论了Java异常处理机制的原理和应用。Java是一种面向对象的编程语言,对异常处理的支持非常出色。Java通过类来封装异常,并使用“try/ catch/finally”机制来处理异常,最后...

    Java异常处理机制应用研究.pdf

    "Java 异常处理机制应用研究" Java 异常处理机制是 Java 程序设计中的一个重要方面,正确使用异常处理的策略和方法,能够确保 Java 程序结构的清晰性、易读性和健壮性。本文将详细介绍 Java 异常处理机制的应用研究...

    高效java异常处理机制

    通过遵循上述最佳实践,开发者可以编写出更健壮、可维护的Java代码,有效地利用Java异常处理机制来提高程序的稳定性。同时,阅读并理解"Effective Java Exceptions"文档可以帮助进一步深化对Java异常处理的理解。

    深入理解java异常处理机制Java开发Java经验技巧共

    Java异常处理机制是Java编程中不可或缺的一部分,它提供了一种有序地处理程序错误和异常情况的方法。这篇19页的PDF文档《深入理解java异常处理机制Java开发Java经验技巧共》可能涵盖了Java异常处理的基本概念、最佳...

    java异常处理机制示例(java抛出异常、捕获、断言)

    Java异常处理机制是Java编程中不可或缺的一部分,它用于处理程序运行过程中可能出现的错误或异常情况。这个机制通过五个关键字:try、catch、throw、throws、finally来实现。 1. **try** 关键字:用于包围可能抛出...

    Java异常处理机制与常见面试题解析

    内容概要:本文详细介绍了Java异常处理机制,包括异常的基本概念、异常架构(如 Throwable、Error、Exception)、异常关键字(如 try、catch、finally、throw、throws)及其使用方法。此外,文章还涵盖了常见的Java...

    Java异常处理机制的静态编译实现与优化

    异常处理机制是面向对象语言普遍支持的提高软件可靠性的方法。作为两款被广泛使用的面向对象语言,C++和Java语言都支持异常处理机制...该算法可以同时支持C++和Java异常处理机制,并有效提高了抛出异常较多的程序的性能。

    论文研究-基于Java异常处理机制的研究 .pdf

    Java异常处理机制研究的知识点涵盖了异常处理的基本概念、分类、原则以及实际应用等方面。 1. 异常处理概念 异常处理是Java语言中用于处理程序运行时遇到的错误和异常情况的一种机制。它通过异常类的层次结构来实现...

    浅析Java异常处理机制.pdf

    浅析Java异常处理机制 在 Java 编程中,异常处理机制是非常重要的一部分。任何一种程序设计语言编写的程序,在运行期间都有可能会出现一个不可能执行的操作,该操作的结果会导致程序运行错误。我们可以使用异常处理...

    JAVA异常处理机制——经验与技巧.pdf

    本文将围绕Java异常处理机制展开,探讨其核心概念、分类、处理技巧,并简述自定义异常类的创建方法,以帮助读者在实际开发中更有效地进行异常处理。 一、什么是异常? 异常是Java程序在运行过程中发生的不正常事件...

    关于Java异常处理机制的深入理解.doc

    Java异常处理机制是Java编程中一个至关重要的概念,它提供了对程序运行时错误的优雅处理方式。在Java中,异常是程序执行过程中发生的错误,这些错误可能会中断正常的流程。异常处理通过`try-catch-finally`块来实现...

Global site tag (gtag.js) - Google Analytics