1. 程式人生 > >Java的this、public、static、protected關鍵字——有C++基礎的Java入門(四)

Java的this、public、static、protected關鍵字——有C++基礎的Java入門(四)

目錄

一、 this關鍵字

1、 概念

2、 例項

3、 常見用法

4、 原理 

二、 public關鍵字

三、static關鍵字

1、修飾在屬性上

2、修飾在方法上

四、 protected關鍵字


一、 this關鍵字

我覺得this在Java和C++、C#的作用都是差不多的,this比較重要,還是拉出來講講。

1、 概念

列印一個物件的時候,輸出的是這個物件的地址(JDK提供的一個地址,真正的地址是十六進位制的)。

this 只能在類的物件方法中使用。

this 代表當前呼叫這個this所在方法的物件的自身。

this 可以在方法內區分同名的類的屬性和引數名(有this的一定是屬性,沒有this的一定是方法的引數名)。

2、 例項

public class Demo {
    public void work(){
        System.out.println("Demo--------"+this);
    }
}
class TestDemo{
    public static void main(String[] args) {
        Demo demo = new Demo();
       System.out.println("TestDemo--------"+demo);
       demo.work();
    }
}

執行結果

通過上面這個例子,不難看出this和demo的地址(每次new的時候都是唯一的)是相同的,說明它們兩個用的是同一個物件,誰呼叫的這個方法,這個打印出來的地址就是誰的。

3、 常見用法

還是舉個栗子吧~

public class PersonInfo{
    private String name;
    
    /**
     *大家都知道下面的測試類要獲取
     *這裡的私有資料,需要set和get。
     *下面這種情況就需要區分一下誰是誰的name。
     */
     public void setName(String name){
        //this後面的name是屬性
        //這個方法的name是引數
        this.name=name;
    }
    public void getName(String name){
        return name;
    }
}

class TestPersonInfo{
    PersonInfo person = new PersonInfo ();
    person.setName("王大錘");
    String personName=person.getName();
    System.out.println(personName);
}

 

                               類內部 package內     子類       其他
public 允許 允許 允許 允許
protected       允許 允許 允許 不允許
default           允許 允許 不允許 不允許
private           允許 不允許 不允許 不允許

4、 原理 

假設是一個汽車類(Car),這個車有color、name、carNo(車牌號)的屬性,有 run() 和 introduce() 的方法。另外有一個測試類(TestCar)來呼叫汽車類的方法。程式碼很簡單,這裡主要詳解一下原理。關於堆和棧以及進棧出棧的方式,自行補腦。

執行流程

第一步:java執行到TestCar的時候,把TestCar.class載入到JVM(各就各位,),把main放入方法區壓棧。

第二步:載入Car.class到JVM,然後把run() 和 introduce() 載入到方法區,在堆中建立一片空間建立了一個Car物件,在棧中產生一個變數car 指向堆中的物件。然後給 car 物件的三個屬性賦值。

第三步:car 的run() 方法進棧,把 car 變數所指向的地址賦值給this關鍵字,執行方法體。

第四步:run() 方法出棧,run() 中的 this 消失。

第五步:car 變數消失,main 出棧後消失。

第六步:由於Car堆中的物件失去了變數的引用變成了匿名物件,所以也被系統回收。

二、 public關鍵字

使用物件:類、介面、成員

 介紹:無論它所處在的包定義在哪,該類(介面、成員)都是可訪問的

三、static關鍵字

使用物件:類、方法、欄位、初始化函式

介紹:成名為static的內部類是一個頂級類,它和包含類的成員是不相關的。

1、修飾在屬性上

class User{
    //一般的變數命名
    String username;
    String password;
    //加上static的命名
    static String realName;
}

加上static關鍵字之後,表示realName這個變數名不再是User的屬性,而是這個類的屬性。

2、修飾在方法上

語法:public static 返回值型別 方法名(資料型別  引數名);

方法名上不帶static的方法都是物件的方法。

public class Demo {
    String name;
    int age;
    String lesson;

    /**
     * 物件的方法,每一個老師的例項可以使用
     */
    public void teach(){
        System.out.println("老師在上課.....");
    }

    /**
     * 類方法
     */
    public static void sleep(){
        System.out.println("老師在睡覺.....");
    }
}

class TestDemo{
    public static void main(String[] args) {
        
        // 使用類名來呼叫類方法,推薦使用
        Demo.sleep();
        //不推薦使用下面的方法來呼叫
        Demo demo = new Demo();
        demo.sleep();
    }
}

總結:上面這個例項說明,有static關鍵字的方法是類的屬性,則可通過 “類名.方法名” 來呼叫。

四、 protected關鍵字

推薦一個教程連結:http://www.runoob.com/w3cnote/java-protected-keyword-detailed-explanation.html

下一章節:有C++基礎的Java入門(五)