什么会写进常量池?
来源:互联网 发布:表单序列化成json 编辑:程序博客网 时间:2024/05/29 15:24
写进常量池:
// 基本类型: final修饰(与static属性无关,非final不行), 成员变量(非成员不行),常量表达式赋值(其他类方法get不行)
// 字符串: 常量表达式赋值即可
写进方法:
// 基本类型: 常量表达式赋值(其他类方法get不行); 可以不是final
// 字符串: 常量表达式赋值即可
从这点看,不想写进类信息里面的常量表达式(方法返回或者NULL),只能是基本类型成员变量且非FINAL.
可见,不可变是是否写进类信息的根本,STRING都是如此,基本类型在方法里面等于不可变,而在类成员里面必须是FINAL的。
package com.cisco.dms;
public class ClassDemo {
final int finalIntOther = UserForClass.INT_101; // only yes
final static int finalStaticInt = 3; // only yes
final int finalInt = 1; // only yes
final String finalString = "1";
final String finalStringObject = new String("2");
final static String finalStaticString = "3";
String commonString = "4";
static String staitcString = "5";
final String finalStringOther = UserForClass.String_101;
String CommonStringOther = UserForClass.String_105;
final Integer finalInteger = new Integer(2);
int commonInt = 4;
static int staitcInt = 5;
int commonIntOther = UserForClass.INT_105;
final int finalIntOtherFromMethod = UserForClass.INT_102_FROM_METHOD;
String CommonStringOtherFromMethod = new String(
UserForClass.String_102_FROM_METHOD); // no
int testInt() {
final int finalInt_Method = 6;
int commonInt_Method = 7;
final int finalIntOther_3 = UserForClass.INT_103;
final int finalIntOther_4 = UserForClass.INT_104_FROM_METHOD;
int commonIntOther_6 = UserForClass.INT_106;
System.out.println(8);
System.out.println(new Integer(9));
return 10;
}
String testString() {
final String finalString = "6";
String commonString = "7";
final String finalStringOther_3 = UserForClass.String_103;
final String finalStringOther_4 = UserForClass.String_104_FROM_METHOD; // no
System.out.println("8");
System.out.println(new String(UserForClass.String_105));
System.out.println(new String(UserForClass.String_NULL));
return "9";
}
public static void main(String[] args) {
System.out.println();
}
}
package com.cisco.dms;
class UserForClass {
public static final int INT_101 = 101;
public static final int INT_102_FROM_METHOD = getInt102();
public static final int INT_103 = 103;
public static final int INT_104_FROM_METHOD = getInt104();
public static final int INT_105 = 105;
public static final int INT_106 = 106;
public static final String String_101 = "101";
public static final String String_102_FROM_METHOD = getString102();
public static final String String_103 = "103";
public static final String String_104_FROM_METHOD = getString104();
public static final String String_105 = "105";
public static final String String_NULL = null;
private static int getInt102() {
return 102;
}
private static int getInt104() {
return 104;
}
private static java.lang.String getString102() {
return "102";
}
private static java.lang.String getString104() {
return "104";
}
}
Classfile /E:/ClassDemo.class
Last modified 2012-2-18; size 2389 bytes
MD5 checksum 57b1f62e65ec1c8c39063922657768f9
Compiled from "ClassDemo.java"
public class com.cisco.dms.ClassDemo
SourceFile: "ClassDemo.java"
minor version: 0
major version: 50
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Class #2 // com/cisco/dms/ClassDemo
#2 = Utf8 com/cisco/dms/ClassDemo
#3 = Class #4 // java/lang/Object
#4 = Utf8 java/lang/Object
#5 = Utf8 finalIntOther
#6 = Utf8 I
#7 = Utf8 ConstantValue
#8 = Integer 101
#9 = Utf8 finalStaticInt
#10 = Integer 3
#11 = Utf8 finalInt
#12 = Integer 1
#13 = Utf8 finalString
#14 = Utf8 Ljava/lang/String;
#15 = String #16 // 1
#16 = Utf8 1
#17 = Utf8 finalStringObject
#18 = Utf8 finalStaticString
#19 = String #20 // 3
#20 = Utf8 3
#21 = Utf8 commonString
#22 = Utf8 staitcString
#23 = Utf8 finalStringOther
#24 = String #25 // 101
#25 = Utf8 101
#26 = Utf8 CommonStringOther
#27 = Utf8 finalInteger
#28 = Utf8 Ljava/lang/Integer;
#29 = Utf8 commonInt
#30 = Utf8 staitcInt
#31 = Utf8 commonIntOther
#32 = Utf8 finalIntOtherFromMethod
#33 = Utf8 CommonStringOtherFromMethod
#34 = Utf8 <clinit>
#35 = Utf8 ()V
#36 = Utf8 Code
#37 = String #38 // 5
#38 = Utf8 5
#39 = Fieldref #1.#40 // com/cisco/dms/ClassDemo.staitcString:Ljava/lang/String;
#40 = NameAndType #22:#14 // staitcString:Ljava/lang/String;
#41 = Fieldref #1.#42 // com/cisco/dms/ClassDemo.staitcInt:I
#42 = NameAndType #30:#6 // staitcInt:I
#43 = Utf8 LineNumberTable
#44 = Utf8 LocalVariableTable
#45 = Utf8 <init>
#46 = Methodref #3.#47 // java/lang/Object."<init>":()V
#47 = NameAndType #45:#35 // "<init>":()V
#48 = Fieldref #1.#49 // com/cisco/dms/ClassDemo.finalIntOther:I
#49 = NameAndType #5:#6 // finalIntOther:I
#50 = Fieldref #1.#51 // com/cisco/dms/ClassDemo.finalInt:I
#51 = NameAndType #11:#6 // finalInt:I
#52 = Fieldref #1.#53 // com/cisco/dms/ClassDemo.finalString:Ljava/lang/String;
#53 = NameAndType #13:#14 // finalString:Ljava/lang/String;
#54 = Class #55 // java/lang/String
#55 = Utf8 java/lang/String
#56 = String #57 // 2
#57 = Utf8 2
#58 = Methodref #54.#59 // java/lang/String."<init>":(Ljava/lang/String;)V
#59 = NameAndType #45:#60 // "<init>":(Ljava/lang/String;)V
#60 = Utf8 (Ljava/lang/String;)V
#61 = Fieldref #1.#62 // com/cisco/dms/ClassDemo.finalStringObject:Ljava/lang/String;
#62 = NameAndType #17:#14 // finalStringObject:Ljava/lang/String;
#63 = String #64 // 4
#64 = Utf8 4
#65 = Fieldref #1.#66 // com/cisco/dms/ClassDemo.commonString:Ljava/lang/String;
#66 = NameAndType #21:#14 // commonString:Ljava/lang/String;
#67 = Fieldref #1.#68 // com/cisco/dms/ClassDemo.finalStringOther:Ljava/lang/String;
#68 = NameAndType #23:#14 // finalStringOther:Ljava/lang/String;
#69 = String #70 // 105
#70 = Utf8 105
#71 = Fieldref #1.#72 // com/cisco/dms/ClassDemo.CommonStringOther:Ljava/lang/String;
#72 = NameAndType #26:#14 // CommonStringOther:Ljava/lang/String;
#73 = Class #74 // java/lang/Integer
#74 = Utf8 java/lang/Integer
#75 = Methodref #73.#76 // java/lang/Integer."<init>":(I)V
#76 = NameAndType #45:#77 // "<init>":(I)V
#77 = Utf8 (I)V
#78 = Fieldref #1.#79 // com/cisco/dms/ClassDemo.finalInteger:Ljava/lang/Integer;
#79 = NameAndType #27:#28 // finalInteger:Ljava/lang/Integer;
#80 = Fieldref #1.#81 // com/cisco/dms/ClassDemo.commonInt:I
#81 = NameAndType #29:#6 // commonInt:I
#82 = Fieldref #1.#83 // com/cisco/dms/ClassDemo.commonIntOther:I
#83 = NameAndType #31:#6 // commonIntOther:I
#84 = Fieldref #85.#87 // com/cisco/dms/UserForClass.INT_102_FROM_METHOD:I
#85 = Class #86 // com/cisco/dms/UserForClass
#86 = Utf8 com/cisco/dms/UserForClass
#87 = NameAndType #88:#6 // INT_102_FROM_METHOD:I
#88 = Utf8 INT_102_FROM_METHOD
#89 = Fieldref #1.#90 // com/cisco/dms/ClassDemo.finalIntOtherFromMethod:I
#90 = NameAndType #32:#6 // finalIntOtherFromMethod:I
#91 = Fieldref #85.#92 // com/cisco/dms/UserForClass.String_102_FROM_METHOD:Ljava/lang/String;
#92 = NameAndType #93:#14 // String_102_FROM_METHOD:Ljava/lang/String;
#93 = Utf8 String_102_FROM_METHOD
#94 = Fieldref #1.#95 // com/cisco/dms/ClassDemo.CommonStringOtherFromMethod:Ljava/lang/String;
#95 = NameAndType #33:#14 // CommonStringOtherFromMethod:Ljava/lang/String;
#96 = Utf8 this
#97 = Utf8 Lcom/cisco/dms/ClassDemo;
#98 = Utf8 testInt
#99 = Utf8 ()I
#100 = Fieldref #85.#101 // com/cisco/dms/UserForClass.INT_104_FROM_METHOD:I
#101 = NameAndType #102:#6 // INT_104_FROM_METHOD:I
#102 = Utf8 INT_104_FROM_METHOD
#103 = Fieldref #104.#106 // java/lang/System.out:Ljava/io/PrintStream;
#104 = Class #105 // java/lang/System
#105 = Utf8 java/lang/System
#106 = NameAndType #107:#108 // out:Ljava/io/PrintStream;
#107 = Utf8 out
#108 = Utf8 Ljava/io/PrintStream;
#109 = Methodref #110.#112 // java/io/PrintStream.println:(I)V
#110 = Class #111 // java/io/PrintStream
#111 = Utf8 java/io/PrintStream
#112 = NameAndType #113:#77 // println:(I)V
#113 = Utf8 println
#114 = Methodref #110.#115 // java/io/PrintStream.println:(Ljava/lang/Object;)V
#115 = NameAndType #113:#116 // println:(Ljava/lang/Object;)V
#116 = Utf8 (Ljava/lang/Object;)V
#117 = Utf8 finalInt_Method
#118 = Utf8 commonInt_Method
#119 = Utf8 finalIntOther_3
#120 = Utf8 finalIntOther_4
#121 = Utf8 commonIntOther_6
#122 = Utf8 testString
#123 = Utf8 ()Ljava/lang/String;
#124 = String #125 // 6
#125 = Utf8 6
#126 = String #127 // 7
#127 = Utf8 7
#128 = String #129 // 103
#129 = Utf8 103
#130 = Fieldref #85.#131 // com/cisco/dms/UserForClass.String_104_FROM_METHOD:Ljava/lang/String;
#131 = NameAndType #132:#14 // String_104_FROM_METHOD:Ljava/lang/String;
#132 = Utf8 String_104_FROM_METHOD
#133 = String #134 // 8
#134 = Utf8 8
#135 = Methodref #110.#136 // java/io/PrintStream.println:(Ljava/lang/String;)V
#136 = NameAndType #113:#60 // println:(Ljava/lang/String;)V
#137 = Fieldref #85.#138 // com/cisco/dms/UserForClass.String_NULL:Ljava/lang/String;
#138 = NameAndType #139:#14 // String_NULL:Ljava/lang/String;
#139 = Utf8 String_NULL
#140 = String #141 // 9
#141 = Utf8 9
#142 = Utf8 finalStringOther_3
#143 = Utf8 finalStringOther_4
#144 = Utf8 main
#145 = Utf8 ([Ljava/lang/String;)V
#146 = Methodref #110.#147 // java/io/PrintStream.println:()V
#147 = NameAndType #113:#35 // println:()V
#148 = Utf8 args
#149 = Utf8 [Ljava/lang/String;
#150 = Utf8 SourceFile
#151 = Utf8 ClassDemo.java
{
final int finalIntOther;
flags: ACC_FINAL
ConstantValue: int 101
static final int finalStaticInt;
flags: ACC_STATIC, ACC_FINAL
ConstantValue: int 3
final int finalInt;
flags: ACC_FINAL
ConstantValue: int 1
final java.lang.String finalString;
flags: ACC_FINAL
ConstantValue: String 1
final java.lang.String finalStringObject;
flags: ACC_FINAL
static final java.lang.String finalStaticString;
flags: ACC_STATIC, ACC_FINAL
ConstantValue: String 3
java.lang.String commonString;
flags:
static java.lang.String staitcString;
flags: ACC_STATIC
final java.lang.String finalStringOther;
flags: ACC_FINAL
ConstantValue: String 101
java.lang.String CommonStringOther;
flags:
final java.lang.Integer finalInteger;
flags: ACC_FINAL
int commonInt;
flags:
static int staitcInt;
flags: ACC_STATIC
int commonIntOther;
flags:
final int finalIntOtherFromMethod;
flags: ACC_FINAL
java.lang.String CommonStringOtherFromMethod;
flags:
static {};
flags: ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: ldc #37 // String 5
2: putstatic #39 // Field staitcString:Ljava/lang/String;
5: iconst_5
6: putstatic #41 // Field staitcInt:I
9: return
LineNumberTable:
line 14: 0
line 20: 5
line 4: 9
LocalVariableTable:
Start Length Slot Name Signature
public com.cisco.dms.ClassDemo();
flags: ACC_PUBLIC
Code:
stack=4, locals=1, args_size=1
0: aload_0
1: invokespecial #46 // Method java/lang/Object."<init>":()V
4: aload_0
5: bipush 101
7: putfield #48 // Field finalIntOther:I
10: aload_0
11: iconst_1
12: putfield #50 // Field finalInt:I
15: aload_0
16: ldc #15 // String 1
18: putfield #52 // Field finalString:Ljava/lang/String;
21: aload_0
22: new #54 // class java/lang/String
25: dup
26: ldc #56 // String 2
28: invokespecial #58 // Method java/lang/String."<init>":(Ljava/lang/String;)V
31: putfield #61 // Field finalStringObject:Ljava/lang/String;
34: aload_0
35: ldc #63 // String 4
37: putfield #65 // Field commonString:Ljava/lang/String;
40: aload_0
41: ldc #24 // String 101
43: putfield #67 // Field finalStringOther:Ljava/lang/String;
46: aload_0
47: ldc #69 // String 105
49: putfield #71 // Field CommonStringOther:Ljava/lang/String;
52: aload_0
53: new #73 // class java/lang/Integer
56: dup
57: iconst_2
58: invokespecial #75 // Method java/lang/Integer."<init>":(I)V
61: putfield #78 // Field finalInteger:Ljava/lang/Integer;
64: aload_0
65: iconst_4
66: putfield #80 // Field commonInt:I
69: aload_0
70: bipush 105
72: putfield #82 // Field commonIntOther:I
75: aload_0
76: getstatic #84 // Field com/cisco/dms/UserForClass.INT_102_FROM_METHOD:I
79: putfield #89 // Field finalIntOtherFromMethod:I
82: aload_0
83: new #54 // class java/lang/String
86: dup
87: getstatic #91 // Field com/cisco/dms/UserForClass.String_102_FROM_METHOD:Ljava/lang/String;
90: invokespecial #58 // Method java/lang/String."<init>":(Ljava/lang/String;)V
93: putfield #94 // Field CommonStringOtherFromMethod:Ljava/lang/String;
96: return
LineNumberTable:
line 4: 0
line 6: 4
line 8: 10
line 10: 15
line 11: 21
line 13: 34
line 15: 40
line 16: 46
line 18: 52
line 19: 64
line 21: 69
line 22: 75
line 23: 82
line 23: 83
line 24: 87
line 4: 96
LocalVariableTable:
Start Length Slot Name Signature
0 97 0 this Lcom/cisco/dms/ClassDemo;
int testInt();
flags:
Code:
stack=4, locals=6, args_size=1
0: bipush 6
2: istore_1
3: bipush 7
5: istore_2
6: bipush 103
8: istore_3
9: getstatic #100 // Field com/cisco/dms/UserForClass.INT_104_FROM_METHOD:I
12: istore 4
14: bipush 106
16: istore 5
18: getstatic #103 // Field java/lang/System.out:Ljava/io/PrintStream;
21: bipush 8
23: invokevirtual #109 // Method java/io/PrintStream.println:(I)V
26: getstatic #103 // Field java/lang/System.out:Ljava/io/PrintStream;
29: new #73 // class java/lang/Integer
32: dup
33: bipush 9
35: invokespecial #75 // Method java/lang/Integer."<init>":(I)V
38: invokevirtual #114 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
41: bipush 10
43: ireturn
LineNumberTable:
line 28: 0
line 29: 3
line 30: 6
line 31: 9
line 32: 14
line 34: 18
line 35: 26
line 36: 41
LocalVariableTable:
Start Length Slot Name Signature
0 44 0 this Lcom/cisco/dms/ClassDemo;
3 41 1 finalInt_Method I
6 38 2 commonInt_Method I
9 35 3 finalIntOther_3 I
14 30 4 finalIntOther_4 I
18 26 5 commonIntOther_6 I
java.lang.String testString();
flags:
Code:
stack=4, locals=5, args_size=1
0: ldc #124 // String 6
2: astore_1
3: ldc #126 // String 7
5: astore_2
6: ldc #128 // String 103
8: astore_3
9: getstatic #130 // Field com/cisco/dms/UserForClass.String_104_FROM_METHOD:Ljava/lang/String;
12: astore 4
14: getstatic #103 // Field java/lang/System.out:Ljava/io/PrintStream;
17: ldc #133 // String 8
19: invokevirtual #135 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
22: getstatic #103 // Field java/lang/System.out:Ljava/io/PrintStream;
25: new #54 // class java/lang/String
28: dup
29: ldc #69 // String 105
31: invokespecial #58 // Method java/lang/String."<init>":(Ljava/lang/String;)V
34: invokevirtual #135 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
37: getstatic #103 // Field java/lang/System.out:Ljava/io/PrintStream;
40: new #54 // class java/lang/String
43: dup
44: getstatic #137 // Field com/cisco/dms/UserForClass.String_NULL:Ljava/lang/String;
47: invokespecial #58 // Method java/lang/String."<init>":(Ljava/lang/String;)V
50: invokevirtual #135 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
53: ldc #140 // String 9
55: areturn
LineNumberTable:
line 41: 0
line 42: 3
line 43: 6
line 44: 9
line 45: 14
line 46: 22
line 47: 37
line 49: 53
LocalVariableTable:
Start Length Slot Name Signature
0 56 0 this Lcom/cisco/dms/ClassDemo;
3 53 1 finalString Ljava/lang/String;
6 50 2 commonString Ljava/lang/String;
9 47 3 finalStringOther_3 Ljava/lang/String;
14 42 4 finalStringOther_4 Ljava/lang/String;
public static void main(java.lang.String[]);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=1, args_size=1
0: getstatic #103 // Field java/lang/System.out:Ljava/io/PrintStream;
3: invokevirtual #146 // Method java/io/PrintStream.println:()V
6: return
LineNumberTable:
line 53: 0
line 54: 6
LocalVariableTable:
Start Length Slot Name Signature
0 7 0 args [Ljava/lang/String;
}
- 什么会写进常量池?
- Java 中的 常量共享池 什么意思?
- JVM中的常量池和运行时常量池有什么区别
- 常量指针和指针常量有什么区别
- 常量指针和指针常量有什么区别
- #define 和 const常量有什么区别
- 常量池
- 常量池
- 常量池
- 常量池
- 常量池
- 常量池
- 常量池
- 字符串常量。全局常量池
- 如果hashCode中返回常量1,会有什么结果?
- 关于 String对象 常量池 字符串常量
- KVM的常量池
- KVM的常量池
- 嵌入式Linux USB WIFI驱动的移植
- t.interrupt(),t.isInterrupted(),Thread.interrupted()
- [探讨]为什么说JavaScript是性价比最高的技术?
- java concurrent 探秘
- Map-Reduce逻辑过程
- 什么会写进常量池?
- oracle数据库导出
- 三国杀之反贼兵法
- oracle驱动
- 程序员才看的懂的情书
- NoClassDefFoundError ClassNotFoundException java.lang.ExceptionInInitializerError
- SQLite数据库简单的认识
- myeclipse 修改默认workspace
- web应用出现400响应的分析