類方法和例項方法的區別有哪些

  我們已經知道類體中的方法分為例項方法和類方法兩種,用static修飾的是類方法。下面小編跟大家講講類方法和例項方法的區別,一起來看看。

  類方法和例項方法的區別

  當一個類建立了一個物件後,這個物件就可以呼叫該類的方法。當類的位元組碼檔案被載入到記憶體時,類的例項方法不會被分配***地址,當該類建立物件後,類中的例項方法才分配***地址,從而例項方法可以被類建立的任何物件呼叫執行。

  需要注意的是,當我們建立第一個物件時,類中的例項方法就分配了***地址,當再建立物件時,不再分配***地址,也就是說,方法的***地址被所有的物件共享,當所有的物件都不存在時,方法的***地址才被取消。

  對於類中的類方法,在該類被載入到記憶體時,就分配了相應的***地址。從而類方法不僅可以被類建立的任何物件呼叫執行,也可以直接通過類名呼叫。類方法的***地址直到程式退出才被取消。

  類方法在類的位元組碼載入到記憶體時就分配了***地址,因此,Java語言允許通過類名直接呼叫類方法,而例項方法不能通過類名呼叫。

  在講述類的時候我們強調過,在Java語言中,類中的類方法不可以操作例項變數,也不可以呼叫例項方法,這是因為在類建立物件之前,例項成員變數還沒有分配記憶體,而且例項方法也沒有***地址。

  下面小編給大家舉個例子說明一下兩種方法的區別

  class A

  { int x,y;

  static float f***int a***{}

  float g***int x1,int x2***{}

  }

  class B

  { public static void main***String args[]***

  { A a1=new A******;

  A.f***2,3***; //合法。

  a1.f***2,4***; //合法。

  a1.g***2,5***; //合法。

  A.g***3,2***; //非法。

  }

  }

  例項方法的介紹

  例項方法也叫做物件方法。

  類方法是屬於整個類的,而例項方法是屬於類的某個物件的。

  由於類方法是屬於整個類的,並不屬於類的哪個物件,所以類方法的方法體中不能有與類的物件有關的內容。即類方法體有如下限制:

  ***1*** 類方法中不能引用物件變數;

  ***2*** 類方法中不能呼叫類的物件方法;

  ***3*** 在類方法中不能使用super、this關鍵字。

  ***4***類方法不能被覆蓋。

  如果違反這些限制,就會導致程式編譯錯誤。

  與類方法相比,物件方法幾乎沒有什麼限制:

  ***1*** 物件方法中可以引用物件變數,也可以引用類變數;

  ***2*** 物件方法中可以呼叫類方法;

  ***3*** 物件方法中可以使用super、this關鍵字。

  在程式設計中,一些通用的、公用型的方法與類的物件無關,因此常常被作為類方法實現。如Java類庫中Math類,其中多數的數學運算操作都被定義成靜態方法。因此,可以使用類方法把一些通用的、公用型的方法放在合適的類中,從而很好地將它們組織起來。應用程式中的主方法main就是類方法。

  例如:

  class Clerk {

  int c_ClerkNo;//職員號

  String c_ClerkName;//職員姓名

  double c_ClerkSalary;//工資

  static int c_NextClerkNo=1000;//下一個職員號

  static double c_LowSalary=280;//例4-11

  public Clerk***String name,double salary*** {

  c_ClerkNo=++c_NextClerkNo;

  // c_ClerkNo=c_NextClerkNo++;

  c_ClerkName=new String***name***;

  // c_ClerkName=name;

  c_ClerkSalary=salary;

  }

  }

  public class InstanceClerk

  {

  public static void main***String[] args***

  {

  Clerk objclerk1=new Clerk***"張三",892.5***;

  Clerk objclerk2=new Clerk***"李四",1025.8***;

  String aName=new String***"王五"***;

  Clerk objclerk3=new Clerk***aName,2000***;

  System.out.println***"姓名:"+objclerk1.c_ClerkName+"編號:"+objclerk1.c_ClerkNo+"工資:"+objclerk1.c_ClerkSalary***;

  System.out.println***"姓名:"+objclerk2.c_ClerkName+"編號:"+objclerk2.c_ClerkNo+"工資:"+objclerk2.c_ClerkSalary***;

  System.out.println***"姓名:"+objclerk3.c_ClerkName+"編號:"+objclerk3.c_ClerkNo+"工資:"+objclerk3.c_ClerkSalary***;

  System.out.println***"最低工資:職員1="+objclerk1.c_LowSalary***;

  System.out.println***"最低工資:職員2="+objclerk2.c_LowSalary***;

  Clerk.c_LowSalary=330;

  System.out.println***"提高以後"***;

  System.out.println***"最低工資:職員1="+objclerk1.c_LowSalary***;

  System.out.println***"最低工資:職員2="+objclerk2.c_LowSalary***;

  }

  }

  你可以參考這個源程式,然後自己將註釋的語句去掉註釋等等,執行一下就會明白的。

  Java中string類的方法

  一、建構函式

  String***byte[ ] bytes***:通過byte陣列構造字串物件。

  String***char[ ] value***:通過char陣列構造字串物件。

  String***Sting original***:構造一個original的副本。即:拷貝一個original。

  String***StringBuffer buffer***:通過StringBuffer陣列構造字串物件。

  例如:

  byte[] b = {'a','b','c','d','e','f','g','h','i','j'};

  char[] c = {'0','1','2','3','4','5','6','7','8','9'};

  String sb = new String***b***; //abcdefghij

  String sb_sub = new String***b,3,2***; //de

  String sc = new String***c***; //0123456789

  String sc_sub = new String***c,3,2***; //34

  String sb_copy = new String***sb***; //abcdefghij

  System.out.println***"sb:"+sb***;

  System.out.println***"sb_sub:"+sb_sub***;

  System.out.println***"sc:"+sc***;

  System.out.println***"sc_sub:"+sc_sub***;

  System.out.println***"sb_copy:"+sb_copy***;

  輸出結果:

  sb_sub:de

  

  sc_sub:34