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. SSH连接超时不自动断开

    Putty 启用putty keepalive putty -> Connection -> Seconds between keepalives ( 0 to turn off ),默认 ...

  2. [HTML/HTML5]3 页面结构

    在HTML5之前,主要的容器元素是div元素,但在HTML5中提供了数种其它容器元素供我们使用. 因此,当组织Web页面结构时,首先使用HTML将内容分成多部分,然后在对其使用CSS应用样式和格式. ...

  3. 摸索Tableau

    将本年度第几周转变为对应范围内的某日期 201607 → 2016-02-18 DATEADD('day',7*(int(RIGHT([WEEK_ID],2))-1),DATEPARSE(" ...

  4. ios第二天{函数}

    ////  main.m//  DAY3-1.6作业:工程敲4遍/*  作业:限时代码3分钟     提示用户从键盘输入一个整数(100以内) .如果输入的数,不是7的倍数,且不含7(个位和十位都不含 ...

  5. jQuery刷新包含的<jsp:include>页面

    jQuery刷新包含页面 JQuery刷新包含页面,以下两种形式均可: <%@include file="../include/header.jsp" %>   < ...

  6. 将DLL放入到资源中,运行时自动加载

    今天在看到 一个小软件,考勤用的 AttendanceSheet_V_1_2,只有一个EXE文件,绿色的随便考到哪里都可以运行. 顺手反编译后发现,他将需要的DLL也放入到资源文件了,在启动的时候自动 ...

  7. 简化版c语言文法

    <程序> → <外部声明> | <程序的外部声明> <标识符类型> → <无类型> | <字符> | <整型> | ...

  8. Java自由块(静态和非静态)(转载)

    java中的自由块分为两种: 静态块和非静态块 静态块: public class Test { 2 static int x = 10; 3 //静态块:静态块的执行时机是在class文件装载的时候 ...

  9. css实现强制不换行/自动换行/强制换行

    在我们日常的编码中经常会遇到这段文字不可以换行,或者自动换行的需求.虽然这个功能在我们平时很常见但是我相信大家一定不会可以的去记住它吧(至少小月是很懒惰的从来是用什么查什么 ♦ 嘻嘻...).今天我们 ...

  10. 利用jQueryRotate旋转插件开发大转盘抽奖

    前言: 公司原来开发大转盘抽奖活动用的是flash 我发现swf文件竟然有6m大,吓尿了! 其实完全可以用js写的,但是自身前端功力有限,且时间紧迫,所以直接用旋转插件就好,兼容各方面都可以保证. 1 ...