`

java 中 try catch finally的事儿

阅读更多
  1. class  A1 {  
  2.     public   static   void  main(String[] args) {  
  3.         System.out.printf("x:%d______testt():%d_____x:%d\n"  ,x,testt(),x);  
  4.     }  
  5.       
  6.     static   int  x = 99;  
  7.     public   static   int  testt() {  
  8.         try  {  
  9.             return  x;  
  10.         } catch  (Exception e) {  
  11.         } finally {  
  12.             x = 8;  
  13.         }  
  14.         return  x;  
  15.     }  

Throws:  Lists the exceptions a method could throw.
Throw:   Transfers control of the method to the exception handler.

首先记录一下:

throws 是在方法后面,例出该方法可能抛出的异常

throw 是在catch语句块里主动抛出的异常

 

下面的代码是测试try catch finally的顺序和对变量的影响

 

public class TestReturnFinally {
	public static void main(String[] args) {
		TestReturnFinally test = new TestReturnFinally();
		int a = test.testReturnFinally();
		System.out.println(a + "\n");
		a = test.test2();
		System.out.println(a + "\n");
		a = test.test3();
		System.out.println(a);
	}

	/**
	 * yes b>25 : 111 finally
	 */
	public int testReturnFinally() {
		int b = 23;
		try {
			System.out.println("yes");
			return b += 88;
		} catch (Exception e) {
			System.out.println("error      :      " + e);
		} finally {
			if (b > 25) {
				System.out.println("b>25      :      " + b);
			}
			System.out.println("finally");
		}
		System.out.println("out return");
		return b;
	}

	/**
	 * finally的return覆盖原return 返回100
	 * 
	 * @return
	 */
	@SuppressWarnings("finally")
	public int test2() {
		int b = 23;
		try {
			System.out.println("yes");
			return b += 88;
		} catch (Exception e) {
			System.out.println("error      :      " + e);
		} finally {
			if (b > 25) {
				System.out.println("b>25      :      " + b);
			}
			System.out.println("finally");

			return 100;
		}
	}

	/**
	 * 返回23,<br/>
	 * 如果finally语句中没有返回语句覆盖的话, <br/>
	 * 那么原来的返回值就不会变,不管你是不是改变了要返回的那个变量
	 * 
	 * @return
	 */
	public int test3() {
		int b = 23;
		try {
			System.out.println("yes");
			return b;
		} catch (Exception e) {
			System.out.println("error      :      " + e);
		} finally {
			if (b > 25) {
				System.out.println("b>25      :      " + b);
			}
			System.out.println("finally");
			b = 100;
		}
		return -1;
	}
}
 

运行代码的结果是:

yes
b>25      :      111
finally
111

yes
b>25      :      111
finally
100

yes
finally
23
 

由上述结果可以总结:

return 语句会把运算先进行完成,不真正的返回

若有异常抛出则进行catch语句的代码

在return真正执行之前,会执行finally语句,

若finally语句有对返回变量的修改,则原返回变量不会变

若finally有把原return 语句的覆盖,则会覆盖原return 语句。

 

 

更详细的解析可以参考:http://blog.csdn.net/exsuns/archive/2010/01/20/5217669.aspx

 

其中讲解的部分是:

 

    class A1 {  
        public static void main(String[] args) {  
            System.out.printf("x:%d______testt():%d_____x:%d\n" ,x,testt(),x);  
        }  
         
        static int x = 99;  
        public static int testt() {  
            try {  
               return x;  
           } catch (Exception e) {  
           } finally {  
               x = 8;  
           }  
           return x;  
       }  
    } 
 

执行结果是:

x:99______testt():99_____x:8

 

分析一下结果,刚开始X的值是99

->执行testt()方法

->进入方法的try语句

->执行return  x;  //这时x被JVM存在了栈区的局部变量栈区里

->然后执行finally里的x=8 //这句更新了全局变量里的static int x,

最后testt方法执行完 JVM会把 try里的这句return的局部变量load到操作数栈.所以结果就清楚了

 

 

 

分享到:
评论

相关推荐

    17.javatry…catch…finally语句.zip

    17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...

    try 与 catch finally关键字

    Java的 try 与 catch finally关键字的使用

    java中try catch的用法

    ### Java中try-catch的用法详解 #### 一、基本概念 在Java编程语言中,`try-catch`结构是一种用于处理程序运行时可能出现的异常情况的重要机制。通过使用`try-catch`块,开发者可以更加精细地控制程序的行为,并...

    java try…catch嵌套捕获异常的实例

    总结来说,`try-catch`嵌套在Java中用于更精细化的异常处理,允许我们针对不同类型的异常执行不同的恢复策略。通过这种方式,我们可以编写更健壮、更易维护的代码,确保程序在面对错误时能够优雅地处理并继续运行。

    try_catch_finally异常处理java

    本文将深入探讨Java中的`try-catch-finally`语句块,以及它们在异常处理中的作用。 首先,`try`块是异常处理的起点。在这个代码段中,我们通常会放置可能会抛出异常的代码。当Java执行到可能抛出异常的代码行时,...

    Java try catch finally异常处理组合详解

    try catch组合是Java中最基本的异常处理方式。其工作原理是,在try块中执行可能会抛出异常的语句,然后在catch块中捕获并处理异常。try catch组合的语法结构如下: ```java try { // 可能会抛出异常的语句 } catch...

    使用try-catch-finally处理异常

    如果系统提供的异常类无法满足需求,开发者可以创建自己的异常类,继承自系统提供的异常类(如Java中的`Exception`类),添加额外的信息或功能。 8. **异常的最佳实践** - 应尽量避免在`catch`块中只简单地忽略...

    java try…catch捕获异常的实例

    总的来说,`try-catch`机制是Java中异常处理的核心,它提供了对程序运行时错误的优雅处理方式,帮助开发者编写更加健壮的代码。通过合理地使用`try-catch`,我们可以确保程序在遇到问题时不会无端崩溃,而是能够适当...

    Jungle68#-#[Java] try catch finally,try里有return,finally还执行么?1

    Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据

    java try…catch…finally捕获异常的实例

    总结来说,`try-catch-finally`结构是Java中处理异常的关键工具,它允许开发者优雅地处理错误,保持程序的健壮性,同时确保必要的清理工作得以执行。通过正确使用这些结构,可以提高代码的可读性和可维护性。

    try-catch-finally捕获异常

    try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try...

    VB.NET Try Catch Finally用法演示源码.rar

    VB.NET 演示带Finally的Try Catch 异常处理用法...使用Finally的好处是,把资源释放或状态还原的代码放到finally块中,可以保证在try和catch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。

    19.java嵌套的try…catch语句.zip

    19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的...

    Java异常处理之try...catch...finally详解

    在Java中,try…catch…finally语句块是异常处理的主要形式。Try块中可以包含多个语句,catch块中可以包含多个异常类型,finally块中可以包含资源的释放代码。通过try…catch…finally语句块,我们可以轻松地处理...

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return 执行顺序的规则和特点。 首先,我们需要了解 try...

    Springboot全局异常捕获及try catch区别解析

    当代码执行到try语句块中时,如果出现了异常,Java虚拟机会将其捕获并抛出到catch子句中,在catch子句中可以进行异常处理和错误信息的返回。try catch语句可以捕获到各种类型的异常,包括运行时异常和检查异常。 而...

    java.try-catch-finally(处理方案示例).md

    java.try-catch-finally(处理方案示例).md

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    trycatch.zip

    本示例中的"trycatch.zip"文件内容就是展示了如何在Golang中模拟`try...catch`和`try...catch...finally`。 Golang的核心错误处理方式是通过返回错误值。通常,函数会返回一个错误值,如果在执行过程中遇到问题,就...

    C#中的try catch finally用法分析

    `try-catch-finally`语句块是C#中用于捕获和处理异常的关键结构。下面我们将详细解析这个语句块的用法,并通过实例来展示其功能。 1. `try`块: `try`块包含可能抛出异常的代码。当在`try`块内的代码执行过程中...

Global site tag (gtag.js) - Google Analytics