類方法 例項方法 構造方法 this關鍵字
類方法:
1.用static修飾的是類方法.
2.無論是例項方法還是類方法,在物件建立之後,都可以用“.”運算子呼叫這些方法。
3.JAVA語言中,類中的類方法,在該類載入到記憶體時,就分配了相應的入口地址,所以類方法不但可以被任何物件呼叫執行,也可以直接通過類名呼叫,入口地址直到程式退出的時候才會被取消。
4.因此JAVA語言允許通過類名直接呼叫類方法,而例項方法則不能通過類名呼叫。
5.而且類方法不能操作例項變數,也不能呼叫例項方法,因為在類建立物件之前,例項成員變數沒有分配記憶體,而且例項方法也沒有入口地址。
如果要在類方法中呼叫例項變數,可以先建立一個類的例項,然後通過例項訪問該變數。
class NoStaticError{
String a = "hello";
public static void main(String[] args){
NoStaticError b = new NoStaticError();
System.out.println(b.a);
}
}
6.this表示某個物件,所以this關鍵字只能出現在例項方法和構造方法中。
7.如果一個方法不需要操作例項成員就可以實現某種功能,就可以考慮將這樣的方法申明為類方法,這樣可以避免建立物件浪費記憶體
例項方法:
1.不用static修飾的是例項方法.
2.例項方法只能通過物件來呼叫,而不能通過類名來呼叫。
3.當this關鍵字出現在例項方法中時,代表正在呼叫該方法的當前物件.
當例項成員出現在例項方法中時,預設格式:this.成員變數
當類成員變量出現在例項方法中時,預設格式:類名.成員變數
構造方法:
1.構造方法負責物件成員的初始化工作,為例項變數賦予合適的初始值,具有特殊的宣告規則.方法名和類名相同且沒有返回值。 一般用 new 構造方法名() 來建立該類的物件,構造方法是在物件一建立就 執行,給物件初始化。
2.當this關鍵字出現在類的構造方法中時,代表使用該構造方法所建立的物件。
3.程式設計師如果沒有在JAVA類中提供構造方法,系統則會自動提供一個無引數的構造方法,這個構造方 法為空,不做任何事情。所以JAVA類中至少含有一個構造方法。
什麼時候定義構造方法呢?
當分析食物時,該事物存在就具備一些特性或者行為,那麼將這些內容定義在構造方法中
public class ConstructorTest
{
public String name;
public int age;
public ConstructorTest(String name , int age) //提供自定義的構造方法,構造器包含兩個引數
{
//構造方法中的this代表它進行初始化的物件
this.name=name;
this.age=age; //這兩行程式碼將傳入的2個引數賦給this代表物件的name和age例項變數
}
public static void main(String[] args)
{
//使用自定義的構造方法來建立物件
//系統將對物件執行自定義的初始化
ConstructorTest tc = new ConstructorTest("張三",23); //物件一建立,就會呼叫與之對應的建構函式
System.out.println(tc.name);
System.out.println(tc.age);
}
}
例子
public class Test{
public static void myMethod();//類方法
public void myMethod2();//例項方法
public Test(){}//構造方法,沒有返回值,方法名與類名一樣
}
this關鍵字:
person(String name)
{
this.name = name;
}
this:看上去,是用於區分區域性變數和成員變數同名情況。
this為什麼可以解決這個問題呢?
this到底代表的是什麼?
this:就代表本類的物件,到底代表哪一個呢?
this代表它所在函式所屬物件的引用。
簡單說:哪個物件在呼叫this所在的函式,this就代表哪個物件
this的應用:當定義類中功能時,該函式內部要用到呼叫該函式的物件時,這時用this來表示這個物件。
class a
{
person(String name)
{
this.name = name;
}
public void speak()
{
System.out.println("name="+name"...age"+age); //System.out.println("name="+this.name"...age"+this.age)
}
}
calss PersonDemo
{
public static void main(String[] args)
{
person p =new person;
person p1 = new person;
p.speak();
p1.speak();
}
}
this語句:用於建構函式之間進行相互呼叫,不用用在一般函式中。
this語句只能定義在建構函式的第一行。因為初始化要先執行。