天天看點

Java關鍵字介紹(static、this、final、super)一、this關鍵字:二、static關鍵字:三、super關鍵字:四、final關鍵字:

一、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.⽅法()⼀定要明确标記出是⽗類的操作。

  1. ⼦類覆寫⽗類的⽅法是因為⽗類的⽅法功能不⾜才需要覆寫。
  2. ⽅法覆寫的時候使⽤的就是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 ),常量全⽤⼤寫字⺟,多個單詞間以_分隔。