首頁  >  文章  >  Java  >  java中靜態屬性與動態屬性的區別

java中靜態屬性與動態屬性的區別

王林
王林轉載
2019-11-29 14:32:204831瀏覽

java中靜態屬性與動態屬性的區別

為什麼static不用建立物件就可以被呼叫?

在未建立物件之前,所有靜態屬性或方法都放在元資料區裡,靜態的可透過類別名稱呼叫。

例如:

public class Cat{
    public static String name;//静态的,不创建对象都存在
    public String color; //动态的,不创建猫的对象不存在这个属性
}
public class Main{
    public static void main(String[] args){
        Cat c =new Cat();
        c.color = "黑色";
        c.name = "喵喵";
        Cat c1 = new Cat();
        c1.color = "蓝";
        System.out.println(c1.name); //正确 这是因为name是静态属性
    }
}

線上教學影片分享:java教學影片

靜態屬性的特徵: 所有在該類別下的物件共享這一個屬性,不創建物件這個屬性依然存在,所以在修改這個屬性時透過類別修改就行了(Cat.name = “小喵”)

動態的屬性只存在於創建的物件裡,只有創建了物件這個屬性才存在。

靜態屬性和動態屬性的區別:

透過堆疊可以找到對象,那麼它能否呼叫元資料區裡的內容? ——可以

那麼能否透過類別呼叫堆裡的內容? ——不行,因為這個過程有一個確定性和不確定性的問題。

透過類別呼叫元資料區的內容,因為物件是動態的,呼叫靜態的東西,呼叫時可保證靜態的東西一定存在,靜態的東西先於物件的存在而存在;從靜態的呼叫堆裡動態的,這時就不確定動態的這個東西是否一定存在。

所以動態的可以呼叫靜態的,靜態的不能呼叫動態的。

public class Cat{
    public static String name;//静态的,不创建对象都存在
    public String color; //动态的,不创建猫的对象不存在这个属性
    public Cat(){
        
    }
    public void foo(){
        color = "黑";//正确
        name = "喵喵";//正确,一定可以调用静态的
        
    }
    public static void test(){
        color = "黑"; //错误,静态方法无法调用动态的属性
        name = "小喵";//正确
        foo();//动态的不一定存在
        Cat c = new Cat();
        c.foo(); //这时再能调用
    }
}

更多相關文章教學請造訪:java入門學習

#

以上是java中靜態屬性與動態屬性的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除