class FinalTest{
    void a(){
        final int i=10;
        int j=10;
    }
}
           stack=2, locals=3, args_size=1
      // 这个地方,应该有i的赋值?
         0: bipush        10
         2: istore_2     
         3: return        
class FinalTest{
    void a(){
        int i=10;
        int j=10;
    }
}
     stack=2, locals=3, args_size=1
         0: bipush        10
         2: istore_1     
         3: bipush        10
         5: istore_2     
         6: return        
--------------------------------------------------------------------------------------------
class FinalTest{
    void a(){
        int i=10;
        int j=10;
        b(i);
        b(j);
    }
    void b(int i){
 
    }
}
     stack=2, locals=3, args_size=1
         0: bipush        10
         2: istore_1     
         3: bipush        10
         5: istore_2     
         6: aload_0      
         7: iload_1      
         8: invokevirtual #2                  // Method b:(I)V
        11: aload_0      
        12: iload_2      
        13: invokevirtual #2                  // Method b:(I)V
        16: return   
class FinalTest{
    void a(){
        final int i=10;
        int j=10;
        b(i);
        b(j);
    }
    void b(int i){
 
    }
}
      stack=2, locals=3, args_size=1
         0: bipush        10
         2: istore_2     
         3: aload_0    
      // 直接将10入操作数栈,而不在通过i 
         4: bipush        10
         6: invokevirtual #2                  // Method b:(I)V
         9: aload_0      
        10: iload_2      
        11: invokevirtual #2                  // Method b:(I)V
        14: return       
  
--------------------------------------------------------------------------------------------
// object加不加final一个样
class FinalTest{
    void a(){
        final Object o=new Object();
        Object o1=new Object();
    }
}
 
class FinalTest{
    void a(){
        Object o=new Object();
        Object o1=new Object();
    }
}
 
         0: new           #2                  // class java/lang/Object
         3: dup          
         4: invokespecial #1                  // Method java/lang/Object."<init>":()V
         7: astore_1     
         8: new           #2                  // class java/lang/Object
        11: dup          
        12: invokespecial #1                  // Method java/lang/Object."<init>":()V
        15: astore_2     
        16: return  
--------------------------------------------------------------------------------------------     
// 支持字面量的Object类型--String
class FinalTest{
    void a(){
        final String s1="a";
        String s2="a";
    }
}   
         // 同int一样
         0: ldc           #2                  // String a
         2: astore_2     
         3: return  
class FinalTest{
    void a(){
        String s1="a";
        String s2="a";
    }
}
0: ldc           #2                  // String a
         2: astore_1     
         3: ldc           #2                  // String a
         5: astore_2     
         6: return      
 // 最后,如果有调用的情况,应该和INT型的处理是一样的

jdk 编译器 对final字段的处理的更多相关文章

  1. xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊。

    1.xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊. 2.java编译器会下载xsd的指定链接文件,加在代码里,一起编译

  2. 20155239 2016-2017-2 《Java程序设计》第7周学习总结

    教材学习内容总结 1.了解Lambda语言 "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的 ...

  3. [多问几个为什么]为什么匿名内部类中引用的局部变量和参数需要final而成员字段不用?(转)

    昨天有一个比较爱思考的同事和我提起一个问题:为什么匿名内部类使用的局部变量和参数需要final修饰,而外部类的成员变量则不用?对这个问题我一直作为默认的语法了,木有仔细想过为什么(在分析完后有点印象在 ...

  4. 关键字final整理

    关键字final整理 由于语境(应用环境)不同,final 关键字的含义可能会稍微产生一些差异.但它最一般的意思就是声明"这个东西不能改变".之所以要禁止改变,可能是考虑到两方面的 ...

  5. [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构

    前言概述  本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义   class文件包含了java虚拟机指令集 和  符号表   以及若 ...

  6. String intern 方法 jdk中的描述

    一个初始为空的字符串池,它由类 String 私有地维护. 当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中 ...

  7. Java核心-03 谈谈final、finally、 finalize有什么不同?

    今天,我要问你的是一个经典的 Java 基础题目,谈谈 final.finally. finalize 有什么不同? 典型回答 final 可以用来修饰类.方法.变量,分别有不同地意义,final修饰 ...

  8. JDK方法区、元空间区别 & String.intern相关面试题

    一.方法区.永久代.元空间 1.方法区.永久代 方法区也是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.方法区域又被称为"永久代& ...

  9. java笔记——Java关键字static、final使用小结

    static  1. static变量     按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...

随机推荐

  1. (转抄:人人都是产品经理——iamsujie)如何提高产品规划PPT的能力

    做产品几年之后,不可避免的要碰到写规划这件事儿,虽说不少人,不乏大牛,对规划持“无用论”的观点, 但大多数人其实还是更相信这个段子: 在一个公司里,看一个人的地位,主要看他平时写的文档类型——写wor ...

  2. iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构

    本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architecture Patterns 在 iOS 中使用 MVC 架构感觉很奇怪? 迁 ...

  3. 未找到导入的项目,请确认 <Import> 声明中的路径正确

    当使用vs出现下列情况: D:\xxxx\Web\Web.csproj : error  : 无法读取项目文件“Web.csproj”. D:\xxxx\WebServiceManager\Web\W ...

  4. js多行省略

    $(function (){ // var $introduce = $(".c-introduce").html(); // $new_introduce = $introduc ...

  5. Ubuntu: ImportError: No module named xgboost

    ImportError: No module named xgboost 解决办法: git clone --recursive https://github.com/dmlc/xgboost cd ...

  6. visio个人专注

    字体颜色 1 填充 2 标注 3 箭头 4 线条 5 粗细 6

  7. [转载]Python 元组、列表、字典、文件

    python的元组.列表.字典数据类型是很python(there python is a adjective)的数据结构.这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益 ...

  8. CALayer 4 详解 -----转自李明杰

    CALayer4-自定义层   本文目录 一.自定义层的方法1 二.自定义层的方法2 三.其他 自定义层,其实就是在层上绘图,一共有2种方法,下面详细介绍一下. 回到顶部 一.自定义层的方法1 方法描 ...

  9. 【PCB】电子元件封装大全及封装常识

    电子元件封装大全及封装常识 电子元件封装大全及封装常识 一.什么叫封装封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳.它不仅起着 ...

  10. ORCALE复制表结构

    1.oracle 复制表结构 不要内容 create table 表1 as select * from 表2 where 1=2 2.oracle 复制表结构 要内容 create table 表1 ...