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. json和jsonp(json是目的,jsonp是手段)

    自己理解:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议.我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的" ...

  2. 判断一个url地址是不是404状态(用curl函数)

    <?php $url = "http://www.kxblogs.com/n/20161108/74429879.html"; $ch = curl_init (); cur ...

  3. 做为一名PHP程序员,应该关注的互联网IT大牛!

    俗话说:“读万卷书不如行万里路,行万里路不如高人指路”,做为一名新人,以后的路还很长,多年你的成就取决于今天的自己付出,选中自己的方向比什么都重要,关注大牛,向他们学习,才不会迷失自己! 1.惠新宸( ...

  4. c# 打乱数组

    有时候得到了一个List,我想把它随机排列一下顺序.而且如果针对不同类型的List都能用,就要用到泛型. 其实思想很简单,就是从原List中每次随机取一项,添加到新的List中,并在原List中删除. ...

  5. 2015-01-16 .Net 中级软件工程师 笔试题

    一 C#方面 1.请简述多线程需要考虑的主要因素 答:1.线程管理 同一核上的两个线程不会以两倍的时长完成,可能需要用两倍再加10 %左右的时间来完成.与一个线程相比较的话,三个线程在同一核上想占用1 ...

  6. $(this)在ajax中无效的解决方案

    在ajax方法里写$(this)指向的是最近调用它的jquery对象,所以这里的$(this)指的是ajax对象,而不是$(".enter_caozuo").find(" ...

  7. 解决OS X系统连接VPN后无法访问内网资源的问题

    该问题是第一次使用OS X系统连接VPN遇到的问题,现象是连接VPN成功,但无法访问公司的内网资源. 主要原因还是VPN设置上的问题,在系统偏好设置中打开VPN连接,里面有个高级设置,如图: 点击高级 ...

  8. Linux 设备驱动程序 proc seq

    不能再简化 #include<linux/module.h> #include<linux/init.h> #include<linux/seq_file.h> # ...

  9. shell 转义字符的写法

    在链接中,往往会遇到含有‘&'字符的情形,需要转义方能使用. 以下是它的写法样例,错误的写法勿要再犯!! 链接样例: http://my.example.cn/show/details/htd ...

  10. 使用面向 iOS 的本机插件扩展 PhoneGap

    本文细致探讨了 Xcode(以 iOS 设备为目标)中的 PhoneGap(也称为 Apache Cordova)应用程序本机插件.如果您刚开始接触 PhoneGap 或者需要回顾 PhoneGap ...