java抛出异常与finally实例解析

 更新时间:2019年10月30日 10:34:37   作者:武神酱丶  
这篇文章主要介绍了java抛出异常与finally实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了java抛出异常与finally实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

代码如下:

package test1;
public class EmbededFinally {  
  public static void main(String args[]) {    
    int result;    
    try {      
      System.out.println("in Level 1");      
       try {        
        System.out.println("in Level 2");
 // result=100/0; //Level 2
        
         try {
          
           System.out.println("in Level 3");
           
           result=100/0; //Level 3        
        }        
        catch (Exception e) {          
          System.out.println("Level 3:" + e.getClass().toString());        
        }                
        finally {          
          System.out.println("In Level 3 finally");        
        }               
        // result=100/0; //Level 2
      
        }      
      catch (Exception e) {
        
         System.out.println("Level 2:" + e.getClass().toString());
      
       }
       finally {
                System.out.println("In Level 2 finally");      
       }       
      // result = 100 / 0; //level 1
    
    }     
    catch (Exception e) {
            System.out.println("Level 1:" + e.getClass().toString());
    
    }    
    finally {      
       System.out.println("In Level 1 finally");    
    } 
  }
}

运行结果如上图:

对于代码的分析: 前三行输出结果,是try中三个正常的输出语句,并且在最后抛出了一个by zero错误。然后用catch语句捕捉了这个语句,并且输出了语句。但我们会发现后面的catch语句都没有被执行,而是直接执行了finally语句,说明finally语句改变了代码中输出的逻辑。但具体的原因尚不明确。

最后,提出一个小问题:finally语句一定会执行吗?

我姑且自己回答一下,如果在finally之前使用了exit,退出了程序,那么finally语句就不会执行了。

比如,我们用以下的测试代码:

package test1;
public class SystemExitAndFinally {
	public static void main(String[] args)
	 {
		try{
			System.out.println("in main");
			throw new Exception("Exception is thrown in main");
			//System.exit(0);
		}
		catch(Exception e)
		    {
			System.out.println(e.getMessage());
			System.exit(0);
		}
		finally
		    {
			System.out.println("in finally");
		}
	}
}

运行结果如图:

我们可以看到,finally后的语句并没有被输出,而在退出程序前的语句并没有任何影响。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • spring boot基于DRUID实现数据源监控过程解析

    spring boot基于DRUID实现数据源监控过程解析

    这篇文章主要介绍了spring boot基于DRUID实现数据源监控过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 解决SpringBoot自定义拦截器和跨域配置冲突的问题

    解决SpringBoot自定义拦截器和跨域配置冲突的问题

    这篇文章主要介绍了解决SpringBoot自定义拦截器和跨域配置冲突的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    通常来讲,重构是指不改变功能的情况下优化代码,但本文所说的重构也包括了添加功能。这篇文章主要介绍了重构Mybatis与Spring集成的SqlSessionFactoryBean(上)的相关资料,需要的朋友可以参考下
    2016-11-11
  • Flink部署集群整体架构源码分析

    Flink部署集群整体架构源码分析

    这篇文章主要为大家介绍了Flink部署集群及整体架构示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java使用openssl检测网站是否支持ocsp

    Java使用openssl检测网站是否支持ocsp

    OCSP在线证书状态协议是为了替换CRL而提出来的。对于现代web服务器来说一般都是支持OCSP的,OCSP也是现代web服务器的标配,这篇文章主要介绍了Java使用openssl检测网站是否支持ocsp,需要的朋友可以参考下
    2022-07-07
  • 详解ArrayList的扩容机制

    详解ArrayList的扩容机制

    ArrayList基于动态数组实现,在添加和删除的时候存在扩容和缩容这样重新规划数组大小的机制。在ArrayList中,维护Object[] elementData数组来管理元素,但是ArrayList是动态可变的,所以elementData数组长度并不代表ArrayList实际元素个数,所以使用size显示实际元素个数
    2021-06-06
  • springboot中spring.profiles.include的妙用分享

    springboot中spring.profiles.include的妙用分享

    这篇文章主要介绍了springboot中spring.profiles.include的妙用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Spring Boot假死诊断实战记录

    Spring Boot假死诊断实战记录

    这篇文章主要给大家介绍了关于Spring Boot假死诊断的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • springboot整合spring-data-redis遇到的坑

    springboot整合spring-data-redis遇到的坑

    使用springboot整合redis,使用默认的序列化配置,然后使用redis-client去查询时查询不到相应的key.问题出在哪,怎么解决呢?下面小编给大家带来了springboot整合spring-data-redis遇到的坑,需要的的朋友参考下吧
    2017-04-04
  • Java一维数组和二维数组元素默认初始化值的判断方式

    Java一维数组和二维数组元素默认初始化值的判断方式

    这篇文章主要介绍了Java一维数组和二维数组元素默认初始化值的判断方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论