一、this關鍵字:
在類的内部表示目前這個對象的引用
1.作用
- 調用本類屬性
- 調用本類方法
- 表示目前對象
解析:調用本類屬性
隻要在類中⽅法通路類中屬性,⼀定要加this關鍵字。
當參數與類中屬性同名時,類中屬性⽆法被正确指派。此時我們加上this關鍵字便可以正确給對象屬性指派。
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
解析:調用本類方法
調用普通方法:this.方法名稱(參數)
調用構造方法:this(參數)
eg:this.print();//調⽤普通⽅法
public Person(){
System.out.println("********産⽣⼀個新的Person對象********");
}
public Person(String name){
this();//調⽤本類⽆參構造
this.name = name ;
}
public Person(String name,int age){
this(name);//調⽤本類有參構造
this.age = age ;
}
注:this調用構造方法的語句必須在構造方法的首行
使用this調用構造方法時,要留有出口
解析:this表示目前對象
隻要對象調用了本類中的方法,這個this就表示目前執行的對象
class Person{
public void print(){
//此時哪個對象調用print方法,this就代表那個對象。
System.out.println("[PRINT]⽅法: "+this);
}
}
public class Test{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("[MAIN]⽅法: "+p1);
p1.print();
System.out.println("=================");
Person p2 = new Person();
System.out.println("[MAIN]⽅法: "+p2);
p2.print();
}
}
輸出結果:
[MAIN]Demo.Person@1540e19d
[PRINT]方法Demo.Person@1540e19d
======
[MAIN]Demo.Person@677327b6
[PRINT]方法Demo.Person@677327b6
二、static關鍵字:
1.static類屬性
- 傳統屬性特性:儲存在堆記憶體中,且每個對象獨享屬性。
- 描述共享屬性,隻需要在屬性前添加static關鍵字即可。
- static屬性⼜稱為類屬性,儲存在全局資料區的記憶體之中,所有對象都可以進⾏該資料區的通路
注意:
通路static屬性(類屬性)應使⽤類名稱.屬性名
所有的⾮static屬性(執行個體變量)必須在對象執行個體化後使⽤,⽽static屬性(類屬性)不受對象執行個體化控制
2.static類方法
- 所有的static⽅法不允許調⽤⾮static定義的屬性或⽅法
-
所有的⾮static⽅法允許通路static⽅法或屬性
使⽤static定義⽅法隻有⼀個⽬的:某些⽅法不希望受到對象的控制,即可以在沒有執行個體化對象的時候執⾏(⼴泛存在于⼯具類中)
注意事項:
- 靜态方法中不能使用this和super關鍵字
- 靜态方法中不能通路非靜态成員變量、非靜态成員方法
- 非靜态方法可以通路靜态
3.【靜态成員變量和非靜态成員變量的差別】
靜态成員變量 | 非靜态成員變量 | |
---|---|---|
文法 | static修飾 | 無static修飾 |
數量 | 記憶體中隻有一份,被類的所有對象共享 | 每建立一個對象都會為該成員變量配置設定記憶體空間,獨享屬性、互不幹擾 |
通路方式 | 可通過對象名通路、也可通過類名通路 | 隻能通過對象名通路 |
生命周期 | 跟随類的加載而建立并初始化,跟随類的銷毀而銷毀 | 跟随對象的建立而建立并初始化,跟随對象的銷毀而銷毀 |
三、super關鍵字:
1.三個作用:
- 在子類的成員方法中,通路父類的成員變量
- 在子類的成員方法中,通路父類的成員方法
- 在子類的構造方法中,通路父類的構造方法(必須位于第一行,且隻能執行一次)
⼦類對象執行個體化操作時,super()的主要作⽤是⼦類調⽤⽗類構造⽅法時才使⽤的。
在進⾏覆寫的操作過程之中,⼦類也可以使⽤super.⽅法()/super.屬性明确調⽤⽗類中的⽅法或屬性
2.【this與super的差別】
差別 | this | super |
---|---|---|
概念 | 通路本類中的屬性和方法 | 由子類通路父類中的屬性、方法 |
查找範圍 | 先查找本類、如果本類沒有就調用父類 | 不查找本類,直接調用父類定義 |
特殊 | 表示目前對象 | 無 |
ps:this、super隻能在有對象的前提下使用,不能在靜态上下文中使用
能使⽤super.⽅法()⼀定要明确标記出是⽗類的操作。
- ⼦類覆寫⽗類的⽅法是因為⽗類的⽅法功能不⾜才需要覆寫。
- ⽅法覆寫的時候使⽤的就是public權限
四、final關鍵字:
使⽤final修飾類、⽅法、屬性
1.final修飾類
- final⼀旦修飾⼀個類之後,該類的所有⽅法預設都會加上final修飾。 (不包含成員變量)
- 使⽤final定義的類不能有⼦類(String類便是使⽤final定義)
2.final修飾方法
- 使⽤final定義的⽅法不能被⼦類所覆寫
class A{
public final void fun(){}
}
3.final修飾變量
- 使⽤final定義的變量就成為了常量, 常量必須在聲明時指派,并且不能再次指派。
- final成員變量必須在聲明的時候初始化或者在構造器中初始化,否則就會報編譯錯誤
- 定義常量(public static final ),常量全⽤⼤寫字⺟,多個單詞間以_分隔。