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. C#基础2

    namespace 基础 //定义一个命名空间,为基础 { class Program //定义一个名称为Program的类 { static void Main(string[] args) //这 ...

  2. 1. AE二次开发——地图的基本操作(加载地图文档,加载shape,加载mdb,地图的保存,缩放,漫游)

    1. 加载数据Icommand方法 ICommand Butdata = new ControlsAddDataCommandClass(); Butdata.OnCreate(axMapContro ...

  3. 搭建IONIC开发环境

    1.准备工作     下载 Node.js(下载包),WebStorm(IDE,编写代码,浏览器调试),JDK(webstorm 运行环境),Android SDK (Android编译)   2.配 ...

  4. 对于Python中RawString的理解

    总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其 ...

  5. Linux下漏洞提权

    Linux下的漏洞提权 linux下一般都是系统漏洞提权,分为以下几个步骤:

  6. 机器学习实战knn

    最近在学习这本书,按照书上的实例编写了knn.py的文件,使用canopy进行编辑,用shell交互时发现运行时报错: >>> kNN.classify0([0,0],group,l ...

  7. python中引用

    python中的可变类型与不可变类型: 在讲python深浅拷贝之前,我们首先应该明白python中元素的类型:主要分为可变类型和不可变类型. 可变类型,就是值可以改变的类型有两个: 列表:list ...

  8. 解析Hibernate中的持久化—ORM(转载)

    最近一直在学习Hibernate,首先说一下Hibernate出现的原因吧,Hibernate是因为MVC的分层体系结构的出现,即数据持久层(模型层)的出现,持久层是在MVC三层架构的基础上提出来的, ...

  9. .Net Core 跨平台系列之环境部署

    前言 作为一名.NET程序员,很多时候都会被什么拖控件.跨平台等字眼所鄙视过,但是在我的的内心还是没有把自己看低过.因为说到底,平台和语言只是我们吃饭的工具.很多时候公司的发展是取决于商业竞争的,微软 ...

  10. CentOS6.5 下安装 texlive2015 并设置 ctex 中文套装

    0 卸载旧版本的 texlive 0.1 卸载 texlive2007 如果系统没有安装过texlive,则跳过第0步. 可以在终端中使用如下命令查询本机已经安装的tex和latex版本: [She@ ...