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. ubuntu 跟xshell的问题

    有2个分析: 1:是windos的防火墙没有关闭 2:是虚拟机没有安装sshd服务器 ubuntu在CLI界面下输入:dpkg -l |grep ssh 因为是我安装过的sshd server   要 ...

  2. 委托的例子,from C# advanced program

    class BubbleSorter { static public void Sort<T>(IList<T> sortArray, Func<T, T, bool&g ...

  3. 关于owinstartupattribute的错误

    关于以上的作物究其原因在与引用的Microsoft.owin等一系列的dll文件,出现这个问题只需在内部删除多余的相关包就可以了,在我的项目中需要三个,如下图,其余的都删除 . 这些相关的dll为什么 ...

  4. python 执行execute遇到的问题

    1.如下方式去查询无法查询出结果,但直接在数据库查询中去查询是能查询到结果的,郁闷中,花了很久的时间才知道原来是双引号导致的 把:name="%s" 中的%s前后的双引号去掉就对了 ...

  5. Joomla

    joomla Joomla实际有两个开源的东西: 1.Joomla内容管理系统即JoomlaCMS(Content Management System, CMS).它是网站的一个基础管理平台.几乎适合 ...

  6. Galera集群server.cnf参数调整--Innodb存储引擎内存相关参数(一)

    在innodb引擎中,内存的组成主要有三部分:缓冲池(buffer pool),重做日志缓存(redo log buffer),额外的内存池(additional memory pool).

  7. Mongodb 故障分享 初始化时"errmsg" : "exception: new file allocation failure" 并且长时间处于STARTUP2

    Hello,大家下午好. 近几天的项目有点赶,所以耽误了更新.现在给大家分享下,在安装mongodb的过程中,遇到的故障一则.其实很小白的问题,当时遇到这个问题的时候比较心慌,浪费了很多时间,跟大家分 ...

  8. 【边框】-边框阴影-box-shadow

    CSS3之box-shadow边框阴影 div{box-shadow: 10px 10px 5px #888888;} 来自为知笔记(Wiz)

  9. 无边框窗体和timer控件

    一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...

  10. Entity Framework – (复数)Plural and (单数)Singular 表名Table names

    By default, the Entity Framework will assume that all of the names of your tables in your database a ...