首页 > Jake Whartoon大神Twitter上发的一个问题,求大神解释

Jake Whartoon大神Twitter上发的一个问题,求大神解释

后续:

测试类

两个测试类如下

class TestMethodA {
    static String name = "akioss";
}
class TestMethodB {
    static final String name = "akioss";
}

查看字节码

通过javap指令查看两个类的字节码

classA

class com.akioss.TestMethodA {
  static java.lang.String name;

  com.akioss.TestMethodA();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        

  static {};
    Code:
       0: ldc           #2                  // String akioss
       2: putstatic     #3                  // Field name:Ljava/lang/String;
       5: return        
}

可以看到除了默认的构造方法之外,还有一个静态代码块,执行了putstatic指令

classB

class com.akioss.TestMethodB {
  static final java.lang.String name;

  com.akioss.TestMethodB();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        
}

2,1

LZ可以参考上面的解释WHY


构造器+Object方法数?
不明白A、B在方法数上有什么区别
我觉得区别只在A有静态初始化块而B没有

【热门文章】
【热门文章】