Java第七天學習筆記~建構函式,this關鍵字,static關鍵字
阿新 • • 發佈:2018-12-02
建構函式
構建創造物件時呼叫的函式。
作用:可以給物件初始化,建立物件都必須要通過建構函式初始化
一般函式和建構函式區別?
1,建構函式:物件建立時就會呼叫與之對應的建構函式,物件進行初始化
一般函式:物件建立後需要函式功能時才呼叫
2,建構函式:物件建立時,會呼叫一次
一般函式:物件建立後,可以被呼叫多次
什麼時候定義建構函式呢?
在描述事物時,該事物已存在就具備的一些內容,這些內容都在定義在建構函式中
this關鍵字
當成員變數和區域性變數重名,可以用關鍵字this來區分
this:代表物件,代表當前物件
this就是所在函式所屬物件的引用,簡單說,哪個物件呼叫了this所在函式,this就代表哪個物件
class Person { private String name; private int age; Person() { name="baby"; age=1; System.out.println("person run"); } Person(String name) { this(); this.name=name; } Person(String name,int age) { this.name=name; this.age=age; } public void speak() { System.out.println(this.name+":"+this.age); } //比較是否為同齡人 public boolean compare(Person p) { if(this.age==p.age) return true; else return false; } } class ThisDemo { public static void main(String[] args) { Person p1=new Person("aa",30); Person p2=new Person("bb",22); p2.compare(p1); } }
this也可以用於在建構函式中呼叫其他函式
注意:只能定義在建構函式的第一行,因為初始化動作要先執行。
static關鍵字
靜態 資料共享
特點:
- static是一個修飾符,用於修飾成員
- 修飾的成員被所有物件共享
- 優先於物件存在,因為static的成員隨著類的載入就已經存在了
- 修飾的成員多了一種呼叫方式,可以直接被類名所呼叫-----類名.靜態成員
- 修飾的資料是共享資料,物件中的儲存的是特有資料
成員變數和靜態變數的區別:
class Person { String name;//成員變數,例項變數 static String country="CN";//靜態變數 類變數 public void show() { System.out.println(country+":"+name); } } class StaticDemo { public static void main(String[] args) { Person p=new Person(); // p.name="小強"; // p.show(); System.out.println(p.country); System.out.println(Person.country); } }
1,生命週期不同
- 成員變數:隨著物件的建立而存在,隨著物件的被收回而釋放
- 靜態變數:隨著類的載入而存在,隨著類的消失而消失
2,呼叫方式不同
- 成員變數只能被物件呼叫
- 靜態變數可以被物件呼叫,還可以被類名呼叫
3,別名不同
- 成員變數-----例項變數
- 靜態變數------類變數
4,資料位置不同
- 成員變數儲存在堆記憶體中,也叫物件的特有資料
- 靜態變數儲存在方法區的(共享資料)靜態區,也叫物件的共享資料
主函式的特殊之處:
- 格式固定
- 被jvm所識別和呼叫
- public:因為許可權必須是最大
- static:不需要物件直接用主函式所屬類名呼叫即可
- void:主函式沒有具體返回值
- main:函式名不是關鍵字,只是一個jvm識別的固定名字
- String[ ] args:這是主函式的引數列表,是一個數組型別的引數而且元素型別都是字串型別
靜態使用的注意事項:
- 靜態方法只能訪問靜態成員,非靜態既可以訪問靜態,又可以訪問非靜態
- 靜態方法中不可以使用this或super關鍵字
- 主函式是靜態的
靜態什麼時候用:
class Demo{
int age;
static int num=9;
public void speak()
{
System.out.println(age);
}
}
class StaticDemo1
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
1,靜態變數:
當分析物件中所局別的成員變數的值都是相同的,這個成員就可以被靜態修飾
只要資料在物件中都是不同的,就是物件的特有資料,必須儲存在物件中是非靜態的
如果是相同的資料,物件不需要做修飾只需要使用即可,不需要儲存在物件中定義成靜態的
2,靜態函式:
函式是否用靜態修飾就參考一點,就是該函式功能是否訪問到物件中的特有資料
簡單說就是從原始碼看,該功能是否需要訪問非靜態的成員變數,
如果需要該功能就是非靜態的如果不需要該功能就可以定義成靜態的
但是非靜態需要被物件呼叫,而僅建立物件呼叫非靜態的沒有訪問特有資料的方法,該物件建立是沒有意義的
靜態程式碼塊:
/*靜態程式碼塊
隨著類的載入而執行,而且只執行一次
作用:
用於給類進行初始化
*/
class StaticCode
{
static
{
System.out.println("hahahaha");
}
void show()
{
System.out.println("show run");
}
}
class StaticCodeDemo
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
隨著類的載入而執行,而且只執行一次
作用:用於給類的初始化