0
点赞
收藏
分享

微信扫一扫

jvm复习: 类中的非静态成员变量的初始化在字节码层面是在构造方法<init>中完成的


package cn.edu.tju.controller;

public class MemberTest {
    public int a = 2023;
    private String b = "str";
}

每个构造方法在字节码层面都会生成一个方法。每个方法都会执行非静态成员变量的初始化

Classfile /D:/springcloudskywalking/module1/target/classes/cn/edu/tju/controller/MemberTest.class
  Last modified 2023-4-1; size 398 bytes
  MD5 checksum c44207e17d9ed7aedb53430aaa1d6851
  Compiled from "MemberTest.java"
public class cn.edu.tju.controller.MemberTest
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #6.#20         // java/lang/Object."<init>":()V
   #2 = Fieldref           #5.#21         // cn/edu/tju/controller/MemberTest.a:I
   #3 = String             #22            // str
   #4 = Fieldref           #5.#23         // cn/edu/tju/controller/MemberTest.b:Ljava/lang/String;
   #5 = Class              #24            // cn/edu/tju/controller/MemberTest
   #6 = Class              #25            // java/lang/Object
   #7 = Utf8               a
   #8 = Utf8               I
   #9 = Utf8               b
  #10 = Utf8               Ljava/lang/String;
  #11 = Utf8               <init>
  #12 = Utf8               ()V
  #13 = Utf8               Code
  #14 = Utf8               LineNumberTable
  #15 = Utf8               LocalVariableTable
  #16 = Utf8               this
  #17 = Utf8               Lcn/edu/tju/controller/MemberTest;
  #18 = Utf8               SourceFile
  #19 = Utf8               MemberTest.java
  #20 = NameAndType        #11:#12        // "<init>":()V
  #21 = NameAndType        #7:#8          // a:I
  #22 = Utf8               str
  #23 = NameAndType        #9:#10         // b:Ljava/lang/String;
  #24 = Utf8               cn/edu/tju/controller/MemberTest
  #25 = Utf8               java/lang/Object
{
  public int a;
    descriptor: I
    flags: ACC_PUBLIC

  public cn.edu.tju.controller.MemberTest();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: aload_0
         5: sipush        2023
         8: putfield      #2                  // Field a:I
        11: aload_0
        12: ldc           #3                  // String str
        14: putfield      #4                  // Field b:Ljava/lang/String;
        17: return
      LineNumberTable:
        line 3: 0
        line 4: 4
        line 5: 11
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      18     0  this   Lcn/edu/tju/controller/MemberTest;
}
SourceFile: "MemberTest.java"


举报

相关推荐

0 条评论