什麼是靜態內部(Static Inner)類,語法要註意什麼? ...
4靜態內部類(Static Inner Classes)(視頻下載) (全部書籍)
馬克-to-win:這裡的內部類的static,意思是它可以不用實例化外部類,就自己單獨被實例化,單獨存在(有點像生活中的辦公室和辦公桌(獨立於辦公室,辦公桌也可以存在)),靜態方法不就不用實例化類,直接用嗎?就實例化而言,靜態內部類和外層類之間完全沒有任何關係,相互獨立。誰愛怎麼樣,就怎麼樣!誰想實例化誰就實例化, 不管對方的感受。當然要想讓它們有關係,也可以,見下麵例子中的tc.core=nc;
重要語法:馬克-to-win:1)靜態內部類里的任何方法(靜態或非靜態)不允許訪問外層類里的實例屬性或方法。(因為外層類本身可能沒有被實例化),想訪問通過下麵例子中的tc.core=nc。2)靜態屬性和方法無論在外層類還是靜態內部類, 都可以被任意調用(對方或自己或測試類)。
例2.4
class ShellMark_to_win {
static int ss_i ;
private int si_k;
Core core;
static class Core {
static int cs_m ;
int ci_j;
public Core(int j) {
ss_i = 2;//可以直接訪問外層類的靜態域
cs_m=3;
//k=9;//馬克-to-win:compile error,static class can not refer to a
non-static
field,因為靜態內部類可以脫離外層實例而單獨存在,靜態內部類可能已經被實例化,而外層類沒有被實例化,外層的實例變數就不能被訪問。像原來的靜態
方法似的,不能訪問實例變數
this.ci_j = j;
}
public String toString()
{
//ShellMark_to_win.changTopValue();//可以訪問外層類的靜態方法
//insMethod();//不能從靜態類里訪問外層類的實例方法。
return "ci_j=" + ci_j + ";ss_i=" + ss_i+" ;cs_m="+cs_m;//
馬克-to-win:這裡不能寫+k,因為cocs_mpile error,static class can not refer to a
non-static field,像原來的靜態方法似的,不能訪問實例變數
}
static int changValue()
{ //inscs_method();//不能從靜態類里訪問實例方法。
cs_m=cs_m+2;
ss_i=ss_i+2;
//k=9;//馬克-to-win:這裡不能寫+k,因為compile error,static class can not refer to a non-static field,像原來的靜態方法似的,不能訪問實例變數
// ShellMark_to_win.changTopValue();完全可以調用
System.out.println("cs_m is "+cs_m+" ss_i is"+ss_i);
//ci_j=ci_j+2;//錯誤, 靜態方法無法訪問非靜態變數
return cs_m;
}
}
public String toString() {
//Core.changValue();//可以訪問靜態內部類的靜態方法
return "si_k=" + si_k + ";ss_i=" + ss_i+"cs_m is "+Core.cs_m;
}
void insMethod()
{
}
static int changTopValue()
{
ShellMark_to_win.Core.cs_m=ShellMark_to_win.Core.cs_m+2;
ss_i=ss_i+2;
return ss_i;
}
}
public class Test {
。。。。。。。。。。。。。。。。。
詳情請進:http://www.mark-to-win.com/index.html?content=JavaBeginner/javaUrl.html&chapter=JavaBeginner/JavaBeginner4_web.html#WhatIsStaticInnerClass