Java關鍵字介紹(static、this、final、super)

一、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定義)
final class A{} //A類不能有⼦類

2.final修飾方法

  • 使⽤final定義的⽅法不能被⼦類所覆寫
class A{
public final void fun(){}
}

3.final修飾變量

  • 使⽤final定義的變量就成爲了常量, 常量必須在聲明時賦值,並且不能再次賦值。
  • final成員變量必須在聲明的時候初始化或者在構造器中初始化,否則就會報編譯錯誤
publc final int a = 100 ;
  • 定義常量(public static final ),常量全⽤⼤寫字⺟,多個單詞間以_分隔。
public static final int MAX_AGE = 120;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章