有關java私有變數訪問的乙個問題

2021-04-12 22:23:50 字數 1604 閱讀 1486

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...