天天看點

了解超然物外的static-方法篇 | 帶你學《Java面向對象程式設計》之十一

上一篇:了解超然物外的static-屬性篇 | 帶你學《Java面向對象程式設計》之十

【本節目标】

通過學習本節,你将了解到普通方法與static方法的差別,進一步了解使用static修飾方法或屬性的時機,學會使用static靈活處理一些實際場景。

static定義方法

static關鍵字也可以進行方法的定義,static方法的主要特點在于,其可以直接由類名稱在沒有是執行個體化對象的情況下進行調用。

範例:定義static方法

class person {             //建立所有同一個國家的類
   private String name ;
   private int age ;
   private static String country = “中華民國” ;      
   public Person(String name ,int age ){
       this.name = name ;
       this.age = age ;
   }
   public static void setCountry(String c) {     //static方法
       country = c ;
//setter、getter略
   public String getInfo() {
       return  “姓名:” + this.name + “、年齡:” +this.age + “、國家:” +this.country + ;
   }
}
public class JavaDemo {          
    public static void main(String args[]) {
        Person.setCountry(“中華人民共和國”)
        Person per = new Person(“張三”,10) ;
        System.out.println(per.getInfo()) ;
    }
}           
了解超然物外的static-方法篇 | 帶你學《Java面向對象程式設計》之十一

圖一 執行結果一

這個時候對于程式而言方法就有了兩種:static方法、非static方法。

這兩個方法之間在調用上就有了限制。

  • static方法隻允許調用static屬性或static方法;
  • 非static方法允許調用static屬性或static方法;

所有的static定義的屬性和方法都可以在沒有執行個體化對象的前提下使用,而所有的非static定義的屬性和方法必須要有執行個體化對象的情況下才可以使用。

如果說可以了解這個限制(this.),那麼對于之前的方法定義就可以得出新的結論:在最早講解方法定義的時候強調過:“目前定義的方法都是在主類中定義的,并且由主方法調用的”。

public class JavaDemo {          
    public static void main(String args[]) {
        print() ;
}
    public static void print(){
       System.out.println(www.mldn.cn) ;
  }
}           
了解超然物外的static-方法篇 | 帶你學《Java面向對象程式設計》之十一

圖二 執行結果二

public class JavaDemo {          
    public static void main(String args[]) {
        new JavaDemo().print() ;
}
    public void print(){
        System.out.println(www.mldn.cn) ;
 }
}           
了解超然物外的static-方法篇 | 帶你學《Java面向對象程式設計》之十一

圖三 執行結果三

static 定義的方法或者是屬性都不是你代碼編寫之初所需要考慮的内容,隻有在回避執行個體化對象調用并且描述公共屬性的情況下才會考慮使用static定義的方法或者是屬性。

static應用

為了加強了解,下面做兩個簡單的程式來進行static應用的提示。

範例:編寫一個程式類,這個類可以實作執行個體化對象個數的統計,每一次建立新的執行個體化對象都可以實作一個統計操作。

此時可以單獨建立一個static屬性,因為所有對象都共享同一個static屬性,那麼在構造方法中可以實作資料的統計處理。

class Book {
private String title ;
private static int count = 0 ;
public Book(String title) {
    this.title = title ;
    count ++ ;
    System.out.println(“第” + count + ”本新的圖書建立出來。”)
}
}

public class JavaDemo {
  public static void main(String args[]) {
  new Book(“Java”) ;
  new Book(“JSP”) ;
  new Book(“Sping”) ;
}           
了解超然物外的static-方法篇 | 帶你學《Java面向對象程式設計》之十一

圖四 執行結果四

範例:實作屬性的自動命名處理

如果現在傳遞了title屬性,就使用傳遞的屬性内容,而如果沒有傳遞title屬性,則自動采用“NOTITLE-編号”的形式進行該屬性内容。

class Book {
   private String title ;
   private static int count = 0 ;
   public Book() {
      this(“NOTITLE - ”+ count ++)
   }
   public Book(String title) {
      this.title = title ;
      count ++ ;
   }
   public String getTitle() {
      return this.title ;
   }
}
public class JavaDemo {
    public static void main(String args[]) {
        System.out.println(new Book(“Java”).getTitle()) ;
        System.out.println(new Book(“JSP”).getTitle()) ;
        System.out.println(new Book(“Sping”).getTitle()) ;
        System.out.println(new Book().getTitle()) ;
        System.out.println(new Book().getTitle()) ;
   }
}           
了解超然物外的static-方法篇 | 帶你學《Java面向對象程式設計》之十一

圖五 執行結果五

這樣處理的好處是可以避免在沒有設定title屬性時内容為null的重複問題。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:千字掌握“代碼塊”概念 | 帶你學《Java面向對象程式設計》之十二 更多Java面向對象程式設計文章檢視此處