`

finally解析

    博客分类:
  • java
阅读更多
一.finally 中的语句什么时候会不执行
package com.util.finallyTest;

/**
 * finally 中的语句什么时候会不执行??
 * @author chenxiaobing
 *
 */
public class Test
{

	/**
	 * 1.当在try之前代码便报错或在try之前便使用return 返回,则finally中的语句不会执行	 
           * @return
	 */
	public static int test()
	{
		int i = 1;
		// if(i == 1)  return 0; //若去掉改行的注释,则下面的语句均不会执行

		System.out.println("the previous statement of try block");
		i = i / 0;

		try
		{
			System.out.println("try block");
			return i;
		}
		finally
		{
			System.out.println("finally block");
		}
	}

	/**
	 * 2.当在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行,则finally中的语句不会执行
	 * @return
	 */
	public static int test1()
	{
		int i = 1;
		try
		{
			System.out.println("try block");
			System.exit(0);
			return i;
		}
		finally
		{
			System.out.println("finally block");
		} 
	}
	/**
	 * 3.当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)或者被终止(killed),与其相对应的 finally 语句块可能不会执行。
	 * 还有更极端的情况,就是在线程运行 try 语句块或者 catch 语句块时,突然死机或者断电,finally 语句块肯定不会执行了
	 * 
	 */
	
	
	
	public static void main(String[] args)
	{
		//System.out.println("return value of test(): " + test());
		System.out.println("return value of test(): " + test1());
	}
}



二.finally 中语句的执行顺序
package com.util.finallyTest;

/**
 * 
 * @author chenxiaobing
 *
 */
public class Test1
{
	/**
	 * finally 语句块是在 try 或者 catch 中的 return 语句之前执行的
	 * 输出:
	 *  try block 
 		exception block 
 		finally block 
 		reture value of test() : 2 
	 * @return
	 */
	public static int test()
	{
		int i = 1;

		try
		{
			System.out.println("try block");
			i = 1 / 0;
			return 1;
		}
		catch (Exception e)
		{
			System.out.println("exception block");
			return 2;
		}
		finally
		{
			System.out.println("finally block");
		}
	}
	
   /**
    * finally 语句块是在 try 或者 catch 中的 return 语句之前执行的。 
    * 由此 finally 中的 return 1;语句要在 try 中的 return 0;语句之前执行
    * @return 1 返回值为 1;
    */
   public static int getValue()
	{
		try
		{
			return 0;
		}
		finally
		{
			return 1;
		}
	}

    /**
     * 关于 Java 虚拟机是如何编译 finally 语句块的问题,有兴趣的读者可以参考《 The JavaTM Virtual Machine Specification, Second Edition 》中 7.13 节
     *  Compiling finally。那里详细介绍了 Java 虚拟机是如何编译 finally 语句块。实际上,Java 虚拟机会把 finally 语句块作为 subroutine
     *  (对于这个 subroutine 不知该如何翻译为好,干脆就不翻译了,免得产生歧义和误解。)直接插入到 try 语句块或者 catch 语句块的控制转移语句之前。
     *  但是,还有另外一个不可忽视的因素,那就是在执行 subroutine(也就是 finally 语句块)之前,try 或者 catch 语句块会保留其返回值到本地变量表(Local Variable Table)中。
     *  待 subroutine 执行完毕之后,再恢复保留的返回值到操作数栈中,然后通过 return 或者 throw 语句将其返回给该方法的调用者(invoker)。
     *  请注意,前文中我们曾经提到过 return、throw 和 break、continue 的区别,对于这条规则(保留返回值),
     *  只适用于 return 和 throw 语句,不适用于 break 和 continue 语句,因为它们根本就没有返回值。
     * @return  1 返回1
     */
	public static int getValue1()
	{
		int i = 1;
		try
		{
			return i;
		}
		finally
		{
			i++;
		}
	} 

	 /**
	  * 
	  * @return 5  返回值为5
	  */
	 public static int getValue2() { 
	        int i = 1; 
	        try { 
	                 i = 4; 
	        } finally { 
	                 i++; 
	                 return i; 
	        } 
	 } 

	 /**
	  * 
	  * @return 5  返回值为5
	  */
	 public static int getValue3() { 
	        int i = 1; 
	        try { 
	                 i = 4; 
	        } finally { 
	                 i++; 
	        } 
	        return i; 
	 } 
	public static void main(String[] args)
	{
		System.out.println("reture value of test() : " + test());
		System.out.println("return value of getValue(): " + getValue()); 

	}
}
分享到:
评论

相关推荐

    Google地图反向地址解析

    } finally { return addr; } } } ``` #### 四、注意事项 1. **API限制**:需要注意的是,Google地图API对每个IP地址每天的地址解析请求次数有限制,如果在24小时内收到来自一个IP地址超过15,000个地址解析请求...

    Java中finally和return的关系实例解析

    Java中finally和return的关系实例解析 Java中finally和return的关系实例解析是Java编程语言中一个重要的知识点。finally语句是Java语言中的一种特殊语句,它用于释放资源、关闭文件、关闭网络连接等操作。return...

    Java解析大数据量Excel,可解析1048576行excel

    } finally { workbook.dispose(); // 关闭流并释放资源 } ``` 在实际应用中,根据硬件配置和数据处理需求,可能需要调整上述策略,以达到最佳性能。在测试环境中,对于1048576行的Excel文件,219秒的解析时间已经...

    Java异常处理的四大金刚:try、catch、finally和throw的深度解析

    ### Java异常处理的四大金刚:try、catch、finally和throw的深度解析 #### Java异常处理概述 异常处理机制是程序设计中的一个重要组成部分,它能够帮助程序员有效地管理程序运行过程中可能出现的各种错误情况。...

    java解析zip文档,解决解析zip中解析xml和html文档流断的方法.pdf

    } finally { try { zipis.close(); } catch (IOException e) { e.printStackTrace(); } } return 0; } private void parseFile(CustomInputStream is, StringBuffer text) throws IOException { // 使用is...

    基于java实现了对698报文部分数据项的解析,学习之作,仅供参考.zip

    Java的异常处理机制(try-catch-finally语句)可以确保程序在出现错误时能够优雅地恢复,避免程序崩溃。 6. **测试与调试**:为了确保解析的准确性,开发者需要编写测试用例,使用JUnit或其他测试框架对解析功能...

    完整实现ftp上传与下载并解析csv文件

    对于错误处理,Java的异常处理机制(try-catch-finally)是基础,可以捕获并处理各种可能的异常。日志记录是系统监控的重要部分,可以使用log4j、SLF4J或Java内置的`java.util.logging`框架。通过设置不同级别的日志...

    JAVA解析配置文件

    } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 5. **访问配置**:`ConfigFile.java`可能提供了一些方法,允许其他类访问解析后的配置数据,如...

    finally分析

    #### 四、示例解析 假设有一个简单的示例,其中使用了终止处理程序来避免内存泄漏: ```cpp char *p = NULL; __try { p = new char[256]; return; } __finally { delete[] p; p = NULL; } ``` 在这个例子中,...

    完全解析Java编程中finally语句的执行原理

    在Java编程中,`finally`语句块是一个关键的组成部分,尤其在异常处理中起到至关重要的作用。然而,关于`finally`的执行原理,并非所有程序员都对其有深入的理解。`finally`的主要功能是在程序执行过程中确保某些...

    DNS域名解析,delphi xe8,windows、android、ios亲测可用

    在开发过程中,掌握DNS解析机制对于跨平台应用,如在Windows、Android和iOS上的应用尤其关键。Delphi XE8是一款强大的集成开发环境(IDE),支持多种平台的应用程序开发,包括桌面系统和移动设备。 首先,理解DNS...

    Delphi XE7中解析JSON

    在Delphi XE7中,解析JSON(JavaScript Object Notation)数据是一项常见的任务,尤其是在与Web服务、API接口交互时。JSON作为一种轻量级的数据交换格式,因其易于阅读和编写,同时也易于机器解析和生成,因此被广泛...

    httpClient采集jsoup解析

    例如,以下代码展示了如何用Jsoup解析一个网页并获取标题: ```java Document doc = Jsoup.connect("http://example.com").get(); Element title = doc.select("title").first(); System.out.println(title.text())...

    java抛出异常与finally实例解析

    Java 异常处理机制与 Finally 块的使用详解 Java 异常处理机制是 Java 语言中的一种错误处理机制,用于处理程序执行过程中的意外情况,例如网络连接失败、文件不存在、算术溢出等。Java 异常处理机制通过 try-catch...

    疯狂JAVA讲义课后习题解析

    异常处理是JAVA中的一个重要概念,习题解析详细介绍了try-catch-finally语句块的使用,以及如何自定义异常。通过解决习题,读者可以学会如何正确地捕获和处理程序运行时可能出现的错误,以确保程序的健壮性。 JAVA...

    c#经典案例解析

    2. **异常处理**:学习如何使用try-catch-finally结构进行错误处理,以及自定义异常类,提高程序的健壮性。 3. **事件和委托**:C#中的事件和委托是实现组件通信的重要机制,案例可能涉及GUI应用中的按钮点击事件,...

    delphi解析json处理单元

    json串解析单元。简单易用,没有bug。 使用方法如下: var ResponseJson: string; Json, childJson: TlkJSONobject; begin Json := TlkJson.ParseText(ResponseJson) as TlkJsonObject; try Success := Trim...

    JAVA解析json文件(使用json.org.jar)

    } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` `readStreamToString()`是辅助方法,用于将输入流转换为字符串,具体...

    Java中高级核心知识全面解析.pdf

    * try-catch-finally 是捕捉异常的基本结构。 4.3 多线程 * 线程是程序执行的基本单位,可以实现高效的并发处理。 * 线程有五种基本状态:新建、运行、阻塞、等待、死亡。 4.4 文件与 I/O 流 * Java 中的 I/O 流...

    delphi语言解析xml

    finally XMLDoc.Free; end; end; ``` 一旦XML文档被加载,我们可以访问其根节点,并通过节点路径、属性名或索引来遍历和操作文档。例如,要获取某个元素的子节点或属性值,可以这样做: ```delphi var Node: ...

Global site tag (gtag.js) - Google Analytics