java代碼
public class Puppy{
int puppyAge;
public Puppy(String name){
// 這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name
System.out.println("小狗的名字是 : " + name );
}
public void setAge( int age ){
puppyAge = age;
}
public int getAge( ){
System.out.println("小狗的年齡為 : " + puppyAge );
return puppyAge;
}
public static void main(String []args){
/* 創(chuàng)建對(duì)象 /
Puppy myPuppy = new Puppy( "tommy" );
/ 通過(guò)方法來(lái)設(shè)定age /
myPuppy.setAge( 2 );
/ 調(diào)用另一個(gè)方法獲取age /
myPuppy.getAge( );
/你也可以像下面這樣訪問(wèn)成員變量 */
System.out.println("變量值 : " + myPuppy.puppyAge );
}
}
反編譯后的代碼
Compiled from "Puppy.java"
public class Puppy {
int puppyAge;
public Puppy(java.lang.String);
Code:
0: aload_0
從局部變量0中裝載引用類(lèi)型值
1: invokespecial #1 // Method java/lang/Object."<init>":()V
根據(jù)編譯時(shí)類(lèi)型來(lái)調(diào)用實(shí)例方法
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
從類(lèi)中獲取靜態(tài)字段
7: new #3 // class java/lang/StringBuilder
創(chuàng)建一個(gè)新對(duì)象
10: dup
復(fù)制棧頂部一個(gè)字長(zhǎng)內(nèi)容
11: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
根據(jù)編譯時(shí)類(lèi)型來(lái)調(diào)用實(shí)例方法
14: ldc #5 // String 小狗的名字是 :
把常量池中的項(xiàng)壓入棧
16: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
調(diào)度對(duì)象的實(shí)例方法
19: aload_1
從局部變量1中裝載引用類(lèi)型值
20: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
調(diào)度對(duì)象的實(shí)例方法
23: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
26: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
29: return
從方法中返回葛虐,返回值為void
public void setAge(int);
Code:
0: aload_0
從局部變量0中裝載引用類(lèi)型值
1: iload_1
從局部變量1中裝載int類(lèi)型值
2: putfield #9 // Field puppyAge:I
設(shè)置對(duì)象中字段的值
5: return
從方法中返回,返回值為void
public int getAge();
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
從局部變量0中裝載引用類(lèi)型值
3: new #3 // class java/lang/StringBuilder
創(chuàng)建一個(gè)新對(duì)象
6: dup
復(fù)制棧頂部一個(gè)字長(zhǎng)內(nèi)容
7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
根據(jù)編譯時(shí)類(lèi)型來(lái)調(diào)用實(shí)例方法
10: ldc #10 // String 小狗的年齡為 :
把常量池中的項(xiàng)壓入棧
12: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
調(diào)度對(duì)象的實(shí)例方法
15: aload_0
從局部變量0中裝載引用類(lèi)型值
16: getfield #9 // Field puppyAge:I
從對(duì)象中獲取字段
19: invokevirtual #11 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
調(diào)度對(duì)象的實(shí)例方法
22: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
調(diào)度對(duì)象的實(shí)例方法
25: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
調(diào)度對(duì)象的實(shí)例方法
28: aload_0
從局部變量0中裝載引用類(lèi)型值
29: getfield #9 // Field puppyAge:I
從對(duì)象中獲取字段
32: ireturn
從方法中返回int類(lèi)型的數(shù)據(jù)
public static void main(java.lang.String[]);
Code:
0: new #12 // class Puppy
3: dup
4: ldc #13 // String tommy
6: invokespecial #14 // Method "<init>":(Ljava/lang/String;)V
9: astore_1
10: aload_1
11: iconst_2
將int類(lèi)型常量2壓入棧
12: invokevirtual #15 // Method setAge:(I)V
15: aload_1
16: invokevirtual #16 // Method getAge:()I
19: pop
20: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
23: new #3 // class java/lang/StringBuilder
26: dup
27: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
30: ldc #17 // String 變量值 :
32: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
35: aload_1
36: getfield #9 // Field puppyAge:I
39: invokevirtual #11 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
42: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
45: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
48: return
}