关于自定义构造方法
package teacher10_6; public class Test{ public static void main() { Foo obj1=new Foo(); } } class Foo{ int value; public Foo(int initValue){ value=initValue; } }
编译结果 出错
原因分析:当用户自己写了一个构造方法,系统将不自动生成构造方法
静态初始化块的执行顺序
class Root { static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static { System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static { System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); }
}
执行结果
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:Java初始化顺序演示
Leaf的普通初始化块
执行Leaf的构造器
结果分析
静态初始化块只能执行一次
创建子类的对象时,父类的静态初始化块也会执行
神奇的代码
public class StrangeIntegerBehavior { public static void main(String[] args) { Integer i1=100; Integer j1=100; System.out.println(i1==j1); Integer i2=129; Integer j2=129; System.out.println(i2==j2); } }
运行结果:
true
false
结果分析:
https://jingyan.baidu.com/article/20095761c9e042cb0721b41c.html
Classfile /C:/Users/linmob/Desktop/study/java/02.ClassAndObjectSourceCode/StrangeIntegerBehavior.class
Last modified 2020年10月6日; size 694 bytes
MD5 checksum 974c03c0f2e95fe3fd367fef51c88ad5
Compiled from "StrangeIntegerBehavior.java"
public class StrangeIntegerBehavior
minor version: 0
major version: 56
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #5 // StrangeIntegerBehavior
super_class: #6 // java/lang/Object
interfaces: 0, fields: 0, methods: 2, attributes: 1
Constant pool:
#1 = Methodref #6.#19 // java/lang/Object."<init>":()V
#2 = Methodref #15.#20 // java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
#3 = Fieldref #21.#22 // java/lang/System.out:Ljava/io/PrintStream;
#4 = Methodref #16.#23 // java/io/PrintStream.println:(Z)V
#5 = Class #24 // StrangeIntegerBehavior
#6 = Class #25 // java/lang/Object
#7 = Utf8 <init>
#8 = Utf8 ()V
#9 = Utf8 Code
#10 = Utf8 LineNumberTable
#11 = Utf8 main
#12 = Utf8 ([Ljava/lang/String;)V
#13 = Utf8 StackMapTable
#14 = Class #26 // "[Ljava/lang/String;"
#15 = Class #27 // java/lang/Integer
#16 = Class #28 // java/io/PrintStream
#17 = Utf8 SourceFile
#18 = Utf8 StrangeIntegerBehavior.java
#19 = NameAndType #7:#8 // "<init>":()V
#20 = NameAndType #29:#30 // valueOf:(I)Ljava/lang/Integer;
#21 = Class #31 // java/lang/System
#22 = NameAndType #32:#33 // out:Ljava/io/PrintStream;
#23 = NameAndType #34:#35 // println:(Z)V
#24 = Utf8 StrangeIntegerBehavior
#25 = Utf8 java/lang/Object
#26 = Utf8 [Ljava/lang/String;
#27 = Utf8 java/lang/Integer
#28 = Utf8 java/io/PrintStream
#29 = Utf8 valueOf
#30 = Utf8 (I)Ljava/lang/Integer;
#31 = Utf8 java/lang/System
#32 = Utf8 out
#33 = Utf8 Ljava/io/PrintStream;
#34 = Utf8 println
#35 = Utf8 (Z)V
{
public StrangeIntegerBehavior();
descriptor: ()V
flags: (0x0001) 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 1: 0
Last modified 2020年10月6日; size 694 bytes
MD5 checksum 974c03c0f2e95fe3fd367fef51c88ad5
Compiled from "StrangeIntegerBehavior.java"
public class StrangeIntegerBehavior
minor version: 0
major version: 56
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #5 // StrangeIntegerBehavior
super_class: #6 // java/lang/Object
interfaces: 0, fields: 0, methods: 2, attributes: 1
Constant pool:
#1 = Methodref #6.#19 // java/lang/Object."<init>":()V
#2 = Methodref #15.#20 // java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
#3 = Fieldref #21.#22 // java/lang/System.out:Ljava/io/PrintStream;
#4 = Methodref #16.#23 // java/io/PrintStream.println:(Z)V
#5 = Class #24 // StrangeIntegerBehavior
#6 = Class #25 // java/lang/Object
#7 = Utf8 <init>
#8 = Utf8 ()V
#9 = Utf8 Code
#10 = Utf8 LineNumberTable
#11 = Utf8 main
#12 = Utf8 ([Ljava/lang/String;)V
#13 = Utf8 StackMapTable
#14 = Class #26 // "[Ljava/lang/String;"
#15 = Class #27 // java/lang/Integer
#16 = Class #28 // java/io/PrintStream
#17 = Utf8 SourceFile
#18 = Utf8 StrangeIntegerBehavior.java
#19 = NameAndType #7:#8 // "<init>":()V
#20 = NameAndType #29:#30 // valueOf:(I)Ljava/lang/Integer;
#21 = Class #31 // java/lang/System
#22 = NameAndType #32:#33 // out:Ljava/io/PrintStream;
#23 = NameAndType #34:#35 // println:(Z)V
#24 = Utf8 StrangeIntegerBehavior
#25 = Utf8 java/lang/Object
#26 = Utf8 [Ljava/lang/String;
#27 = Utf8 java/lang/Integer
#28 = Utf8 java/io/PrintStream
#29 = Utf8 valueOf
#30 = Utf8 (I)Ljava/lang/Integer;
#31 = Utf8 java/lang/System
#32 = Utf8 out
#33 = Utf8 Ljava/io/PrintStream;
#34 = Utf8 println
#35 = Utf8 (Z)V
{
public StrangeIntegerBehavior();
descriptor: ()V
flags: (0x0001) 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 1: 0
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=5, args_size=1
0: bipush 100
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1
6: bipush 100
8: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
11: astore_2
12: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
15: aload_1
16: aload_2
17: if_acmpne 24
20: iconst_1
21: goto 25
24: iconst_0
25: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
28: sipush 129
31: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
34: astore_3
35: sipush 129
38: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
41: astore 4
43: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
46: aload_3
47: aload 4
49: if_acmpne 56
52: iconst_1
53: goto 57
56: iconst_0
57: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
60: return
LineNumberTable:
line 9: 0
line 11: 6
line 13: 12
line 16: 28
line 18: 35
line 20: 43
line 22: 60
StackMapTable: number_of_entries = 4
frame_type = 255 /* full_frame */
offset_delta = 24
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream ]
frame_type = 255 /* full_frame */
offset_delta = 0
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream, int ]
frame_type = 255 /* full_frame */
offset_delta = 30
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer, class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream ]
frame_type = 255 /* full_frame */
offset_delta = 0
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer, class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream, int ]
}
SourceFile: "StrangeIntegerBehavior.java"
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=5, args_size=1
0: bipush 100
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1
6: bipush 100
8: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
11: astore_2
12: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
15: aload_1
16: aload_2
17: if_acmpne 24
20: iconst_1
21: goto 25
24: iconst_0
25: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
28: sipush 129
31: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
34: astore_3
35: sipush 129
38: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
41: astore 4
43: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
46: aload_3
47: aload 4
49: if_acmpne 56
52: iconst_1
53: goto 57
56: iconst_0
57: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
60: return
LineNumberTable:
line 9: 0
line 11: 6
line 13: 12
line 16: 28
line 18: 35
line 20: 43
line 22: 60
StackMapTable: number_of_entries = 4
frame_type = 255 /* full_frame */
offset_delta = 24
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream ]
frame_type = 255 /* full_frame */
offset_delta = 0
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream, int ]
frame_type = 255 /* full_frame */
offset_delta = 30
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer, class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream ]
frame_type = 255 /* full_frame */
offset_delta = 0
locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer, class java/lang/Integer, class java/lang/Integer ]
stack = [ class java/io/PrintStream, int ]
}
SourceFile: "StrangeIntegerBehavior.java"