2015年11月27日 星期五

Java關鍵字 static

動機:

每次網上學會了static之後,過個幾個月就又忘了
表示根本沒懂,所以寫進筆記裡頭好以後可以查看

關鍵字:

static(靜態):

修飾屬性

已例子來解釋:

1.

class Myclass{
  int a;

}

class Test{

     public static void main(String args[]){
       
               Myclass  myclass =new Myclass();
               Myclass nyclass2 = new Myclass();
               myclass.a=10;
               Syso( myclass2.a  );

}

}

則輸出為 0 
原因:myclass 與myclass2生成兩個對象彼此之間是沒有關係,每個對象都有個a 彼此戶不影響

2.
將先前的Myclass類裡面的a改成static
class Myclass{
 static int a;
}
則執行上面的main函數 輸出變為2
原因:對於一個屬性來說,若這屬性被static修飾那麼表示這個類不管生成多少的對象,而這些對             象共同這個屬性

3.(推薦使用這方法)
   若被static修飾的屬性,則我們就可以直接使用這個類來使用此屬性而不需要生成任何一個對      象來用,因為這屬性是公同使用的
  
比方說: 在main方法中
                 Myclass k = new Myclass();
                 Myclass.a=10;
                 syso(k.a);
                用類來進行改變,打印出來的值為10         

修飾方法

class Myclass1{
  
     public static void output(){
             syso("output");
}

}

class Test{

     public static void main(String args[]){
               Myclass1.output();
            }
}

1.
一樣如上可以使用類明來直接調用方法

2.(實際中很少使用)在繼承類中,static使用得特點

class M
{
   public static void output(){
       syso("M");
}
}

class N extends M
{
    public static void output(){
         syso("N");
}
}

public class Myclass2
{
    public static void main(String[] args){
               M m = new N();
               m.output();
              }
}
輸出的結果為:M
靜態方法可以被繼承下來,子類可以繼承父類的靜態方法,然而子類不可以重寫(override)父類的靜態方法(調用哪種方法,取決於前面使用哪種類型 如 M m = new N() 取決於M類型)

總結:
           1.靜態方法不可以被覆蓋,靜態方法亦不可覆蓋別人
           2.只要有靜態方法就不要覆蓋
           3.繼承方面 父/子: 靜態/非靜態 (X) 非靜態/靜態(X)
           4. 不能在靜態方法中訪問非靜態成員變量,而可以在非靜態方法中訪問靜態與非靜態成                  員變量
           5. 靜態只能訪問 非靜態可以一切

沒有留言:

張貼留言