直接上代碼吧。
1 class lesson4AB 2 //同一個類下的public修飾的方法A,B可以相互調用 3 { 4 public void A() 5 { 6 B();//等價于this.B(); 7 } 8 public void B() 9 {10 A();//等價于this.A();11 }12 }13 class lesson4C14 //存在于不同類里的public修飾的方法C調用B15 {16 public void C()17 {18 lesson4AB lAB=new lesson4AB();19 lAB.B();20 //上下兩種方法是等價的,都可以調用21 new lesson4AB().B();22 }23 }24 class lesson4DE25 //同一個類中的static方法與非靜態方法相互調用。26 {27 public static void D()//用static修飾,屬于類成員28 {29 //E();//錯誤: 無法從靜態上下文中引用非靜態 方法 E()30 //【通俗說是靜態不引用非靜態】31 32 //this.E();//錯誤: 無法從靜態上下文中引用非靜態 變量 this33 //【通俗說就是static和this不能共存】34 35 new lesson4DE().E();//通過36 //public void E()沒用static修飾,屬于對象,只能用對象來調用37 }38 public void E()//沒用static修飾,屬于對象39 {40 D();//等價于this.D();41 //對象可以調用類成員42 }43 }44 class lesson4 45 {46 public static void main(String[] args) 47 {48 System.out.
對于上述代碼第35行的詳細解釋:
類方法不能調用非類方法,所以直接調用E()是錯誤的。但可以通過對象來調用,所以要new出來一個對象來調用它(非靜態方法)。
網上有一段這樣的話,總結的挺好:
類是一個抽象的概念,對象是一個實體。靜態方法只能在內存中分配一個空間,不管多少次引用都指向那個空間,即常駐內存,是類對象,不是單個實例。而非靜態方法是隨對象產生的,每生成一個對象就新生成一個非靜態方法,而且分配不同的空間。所以非靜態成員必須依賴于對象。 (2014.10.31修改添加)
本人小菜鳥一枚,以上為網上自學心得總結,如有錯誤敬請指出。新手童鞋多多交流,大神們多多指點。祝大家生活愉快。
新聞熱點
疑難解答