Integer a = 0;
a++;

  

举个例子,如下:

package com.test19;

public class BugReport<T> {

	private T n;

	public void error() {
		BugReport<Integer> val = new BugReport<Integer>();
		val.n = 0;

		Integer.toString(val.n++);
	}

	public static void main(String[] args) {
		BugReport.class.getMethods();
	}
}  

经过反编译后如下:

package com.test19;

public class BugReport<T> {
    private T n;

    public BugReport() {
    }

    public void error() {
        BugReport var1 = new BugReport();
        var1.n = Integer.valueOf(0);
        Integer var3 = (Integer)var1.n;
        Object var4 = var1.n = Integer.valueOf(((Integer)var1.n).intValue() + 1);
        Integer.toString(var3.intValue());
    }

    public static void main(String[] var0) {
        BugReport.class.getMethods();
    }
}

生成的class文件格式如下:

Classfile /C:/BugReport.class
  Last modified 2018-7-22; size 741 bytes
  MD5 checksum 3c3412b5bb98381c1e3035573f40b89c
  Compiled from "BugReport.java"
public class com.test19.BugReport<T extends java.lang.Object> extends java.lang.Object
  Signature: #22                          // <T:Ljava/lang/Object;>Ljava/lang/Object;
  SourceFile: "BugReport.java"
  minor version: 0
  major version: 51
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #10.#25        //  java/lang/Object."<init>":()V
   #2 = Class              #26            //  com/test19/BugReport
   #3 = Methodref          #2.#25         //  com/test19/BugReport."<init>":()V
   #4 = Methodref          #6.#27         //  java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
   #5 = Fieldref           #2.#28         //  com/test19/BugReport.n:Ljava/lang/Object;
   #6 = Class              #29            //  java/lang/Integer
   #7 = Methodref          #6.#30         //  java/lang/Integer.intValue:()I
   #8 = Methodref          #6.#31         //  java/lang/Integer.toString:(I)Ljava/lang/String;
   #9 = Methodref          #32.#33        //  java/lang/Class.getMethods:()[Ljava/lang/reflect/Method;
  #10 = Class              #34            //  java/lang/Object
  #11 = Utf8               n
  #12 = Utf8               Ljava/lang/Object;
  #13 = Utf8               Signature
  #14 = Utf8               TT;
  #15 = Utf8               <init>
  #16 = Utf8               ()V
  #17 = Utf8               Code
  #18 = Utf8               LineNumberTable
  #19 = Utf8               error
  #20 = Utf8               main
  #21 = Utf8               ([Ljava/lang/String;)V
  #22 = Utf8               <T:Ljava/lang/Object;>Ljava/lang/Object;
  #23 = Utf8               SourceFile
  #24 = Utf8               BugReport.java
  #25 = NameAndType        #15:#16        //  "<init>":()V
  #26 = Utf8               com/test19/BugReport
  #27 = NameAndType        #35:#36        //  valueOf:(I)Ljava/lang/Integer;
  #28 = NameAndType        #11:#12        //  n:Ljava/lang/Object;
  #29 = Utf8               java/lang/Integer
  #30 = NameAndType        #37:#38        //  intValue:()I
  #31 = NameAndType        #39:#40        //  toString:(I)Ljava/lang/String;
  #32 = Class              #41            //  java/lang/Class
  #33 = NameAndType        #42:#43        //  getMethods:()[Ljava/lang/reflect/Method;
  #34 = Utf8               java/lang/Object
  #35 = Utf8               valueOf
  #36 = Utf8               (I)Ljava/lang/Integer;
  #37 = Utf8               intValue
  #38 = Utf8               ()I
  #39 = Utf8               toString
  #40 = Utf8               (I)Ljava/lang/String;
  #41 = Utf8               java/lang/Class
  #42 = Utf8               getMethods
  #43 = Utf8               ()[Ljava/lang/reflect/Method;
{
  public com.test19.BugReport();
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 3: 0

  public void error();
    flags: ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=1
         0: new           #2                  // class com/test19/BugReport
         3: dup
         4: invokespecial #3                  // Method "<init>":()V
         7: astore_1
         8: aload_1
         9: iconst_0
        10: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
        13: putfield      #5                  // Field n:Ljava/lang/Object;
        16: aload_1
        17: astore_2
        18: aload_2
        19: getfield      #5                  // Field n:Ljava/lang/Object;
        22: checkcast     #6                  // class java/lang/Integer
        25: astore_3
        26: aload_2
        27: aload_2
        28: getfield      #5                  // Field n:Ljava/lang/Object;
        31: checkcast     #6                  // class java/lang/Integer
        34: invokevirtual #7                  // Method java/lang/Integer.intValue:()I
        37: iconst_1
        38: iadd
        39: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
        42: dup_x1
        43: putfield      #5                  // Field n:Ljava/lang/Object;
        46: astore        4
        48: aload_3
        49: invokevirtual #7                  // Method java/lang/Integer.intValue:()I
        52: invokestatic  #8                  // Method java/lang/Integer.toString:(I)Ljava/lang/String;
        55: pop
        56: return
      LineNumberTable:
        line 8: 0
        line 9: 8
        line 10: 16
        line 11: 56

  public static void main(java.lang.String[]);
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
         0: ldc_w         #2                  // class com/test19/BugReport
         3: invokevirtual #9                  // Method java/lang/Class.getMethods:()[Ljava/lang/reflect/Method;
         6: pop
         7: return
      LineNumberTable:
        line 14: 0
        line 15: 7
}

  

LetExpr表达式解读的更多相关文章

  1. quartz Cron表达式解读

    CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronT ...

  2. MySQL数据库25条规范解读

    一.基础规范 (1)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省空间(由于移动设备原因最好使用utf8mb4) (2)禁止使用存储过程.视图.触发器.Event 解读:高并发大数据 ...

  3. 58到家mysql数据库军规及解读分享

    一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省 ...

  4. MySQL30条规范解读

    转载自:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959906&idx=1&sn=2cbdc66cfb ...

  5. 转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读

    军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存 ...

  6. js小技巧(一)

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  7. Mysql 30条军规

    一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省 ...

  8. jmeter主要函数助手功用说明

    jmeter中虽然有很多的插件,但是有些需要安装,有些具有一定的局限性.函数助手是一个快捷的工具库.下面记录一下函数助手中一些主要的函数的使用方法. 注:不内容中所有的实例均基于3.2记录 1._Be ...

  9. MySQL建表规范

    一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省 ...

随机推荐

  1. SetFocus (GetDlgItem (hwnd, idFocus))函数的各参数的具体含义

    Setfocus(HWMD hwnd):将窗口hwnd设置成获得焦点 GetDlgItem (hwnd, idFocus):此函数返回一个句柄 具体参数的含义: hwnd:包含该窗口标志位的对话框的句 ...

  2. Zend Studio 安装破解和汉化

    1.下载文件. 2.默认安装Zend Studio. 3.替换安装目录下plugins下的com.zend.verifier_12.5.1.v20150514-2003.jar文件 4.打开Zend ...

  3. HDU1501 Zipper(DFS) 2016-07-24 15:04 65人阅读 评论(0) 收藏

    Zipper Problem Description Given three strings, you are to determine whether the third string can be ...

  4. 软件工程—WC功能实现 (JAVA)

    软件工程-WC功能实现(JAVA) Github项目地址:https://github.com/Ousyoung/wc 项目要求 ​ wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和 ...

  5. Team Foundation Server 开发流程管理管理研讨会

    这周,和微软公司的朋友一起,受北京某金融企业邀请,为企业软件部门一个70多人的软件团队提供了一场基于Team Foundation Server的软件软件流程的技术研讨会.在研讨会中,培训基于微软Te ...

  6. linux系统编程之信号(二):信号处理流程(产生、注册、注销、执行)

        对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段: 信号诞生 信号在进程中注册 信号在进程中的注销 信号处理函数执行 1    信号诞生     信号事件 ...

  7. EasyUi 合并单元格占列显示

    $("#TableContainer").datagrid({                url: '',                method: "get&q ...

  8. Xamarin.Forms第三方XAML预览工具-LiveXAML简单体验

    截至目前,Xamarin官方的Xaml Previewer工具仍然处于测试阶段,使用中也发现了各种不便,例如各种莫名其妙的渲染失败,或者提示需要编译项目才能渲染等等,复杂项目基本不可用, 完全没有体现 ...

  9. 从DevOps到Cloud Native,应用上云姿势全解锁

    本文由  网易云发布. 作者:林帆 序文 伴随着IaaS.PaaS等云端基础设施技术的成熟,“应用上云”成为许多企业软件部门的心头大事.通过把传统软件系统搬到云上,一方面可以让业务方获得更多的资源灵活 ...

  10. C博客作业03—函数

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 知道了程序的模块化设计可使程序结构清晰,简化复杂问题,解决代码重复问题 学会使用自定义函数简化主函数,使代码 ...