1)訪問非私有(private)變數
**:class a
class b
}編譯後:生成b.class和a.class兩個檔案,b.class反編譯的結果如下:
class b
public static void main(string args)
}結論:
在b中,通過類訪問靜態變數和通過例項訪問變數,增加了幾個型別轉換!
2)訪問私有變數
**:public class a
public static int psib=20; //類變數
static int sib=220; //類變數(包)
private static int ptsib=2220; //類變數(私有)
protected static int prsib = 22220; //類變數(保護)
public void output()
public static void main(string args )
}public static void main(string args )
} 編譯後:
生成2個檔案a.class 和 a$b.class。a.class檔案反編譯結果:
public class a
public static void main(string args)
public static int psib = 20;
static int sib = 220;
private static int ptsib = 2220;
protected static int prsib = 22220;
public inb()
}a$inb.class反編譯的結果:
public a()
public static void main(string args)
public static int psia = 10;
static int sia = 110;
private static int ptsia = 1110;
protected static int prsia = 11100;
public int pia;
int ia;
private int ptia;
protected int pria;
public static inb m = new inb();
public static class a$inb
public static void main(string args)
public a$inb()
結論:1.對私有變數的訪問,編譯器自動產生非私有的訪問方法(類方法或例項方法),並且把訪問私有成員的表示式轉換成這些方法的表示式!
2.acess$***x方法由編譯系統生成,後面兩位數字應該代表操作型別,前面的數字代表私有變數編號
3.在程式中,無論是類方法還是例項方法,你都不能建立acess$***x() (***x為數字)的方法!
4.程式中被註解掉的system.out.println( tmp.ptsia=10 )可以編譯通過,但是反編譯的時候居然使反編譯程式出錯了,所以%^&*()
訪問私有變數的疑問
今天一同事出去面試回來,帶回來一道題,呵呵。給定乙個字串的類,類的各成員和函式已經定義。現在要求,根據定義,寫出各個函式的實現。類的定義如下 class cmystring 現在遇到的情況是,函式2和函式4容易寫,但是函式1和函式3比較難。我粗略一想,這還不容易,三下五除二解決了。程式的實現如下 c...
訪問私有變數的疑問
今天一同事出去面試回來,帶回來一道題,呵呵。給定乙個字串的類,類的各成員和函式已經定義。現在要求,根據定義,寫出各個函式的實現。類的定義如下 class cmystring 現在遇到的情況是,函式2和函式4容易寫,但是函式1和函式3比較難。我粗略一想,這還不容易,三下五除二解決了。程式的實現如下 c...
有關python私有變數使用的例子
class a object def init self self.a 1 def get a self return self.a def set a self,num self.a num class a a def init self super a,self init init self.a...