搜尋
首頁JavaJava基礎java靜態變數是什麼

java靜態變數是什麼

May 08, 2021 pm 12:01 PM
java靜態變數

在java中,靜態變數指的是被static修飾的類別的變數;靜態變數被所有類別實例物件所共享,在記憶體中只有一個副本,當且僅當在類別初次載入時會被初始化。

java靜態變數是什麼

本教學操作環境:windows7系統、java8版、DELL G3電腦。

1. JVM運行時資料區域

java靜態變數是什麼

  • #Java堆存放幾乎所有的物件實例,被所有執行緒共享
  • 方法區(永久代)與Java堆一樣,是各個執行緒共享的記憶體區域,它用來儲存已經被虛擬機器載入類別的類別資訊、常數、靜態變數(static variable)等

2. static變數

被static修飾的類別的變量,也稱為靜態變數。 非靜態變數也稱為實例變數 

靜態變數和實例變數的差異是:

  • 靜態變數被所有類別實例物件所共享,在記憶體中只有一個副本,當且僅當在類別初次載入時會被初始化。
  • 實例變數是實例物件所擁有的,在創建物件的時候被初始化,存在多個副本,各個實例物件擁有的副本互不影響
public class MyStatic {
    // 静态变量
    private static int index = 0;

    // 实例变量
    private int count = 0;

    public void inc() {
        index++;
        count++;
    }

    public String  get() {
        return "静态变量index = " + index + ",  实例变量count = " + count;
    }
}
/**
 * index是静态变量
 * count是实例变量
 * */
public class StaticVariableTest {

    public static void main(String[] args) {
        MyStatic myStatic1 = new MyStatic();
        MyStatic myStatic2 = new MyStatic();
        MyStatic myStatic3 = new MyStatic();

        myStatic1.inc();
        System.out.println("myStatic1的index、count增加1:");
        System.out.println("myStatic1的" + myStatic1.get());
        System.out.println("myStatic2的" + myStatic2.get());
        System.out.println("myStatic3的" + myStatic3.get() + "\n");

        myStatic2.inc();
        System.out.println("myStatic2的index、count增加1:");
        System.out.println("myStatic1的" + myStatic1.get());
        System.out.println("myStatic2的" + myStatic2.get());
        System.out.println("myStatic3的" + myStatic3.get() + "\n");

        myStatic3.inc();
        System.out.println("myStatic3的index、count增加1:");
        System.out.println("myStatic1的" + myStatic1.get());
        System.out.println("myStatic2的" + myStatic2.get());
        System.out.println("myStatic3的" + myStatic3.get());
    }
}

運行結果:

java靜態變數是什麼

可以看出:

  • 靜態變數index是多個物件實例共享的
  • 實例物件count是多個物件實例私有的
myStatic1的index、count增加1:
myStatic1的静态变量index = 1,  实例变量count = 1
myStatic2的静态变量index = 1,  实例变量count = 0
myStatic3的静态变量index = 1,  实例变量count = 0

myStatic2的index、count增加1:
myStatic1的静态变量index = 2,  实例变量count = 1
myStatic2的静态变量index = 2,  实例变量count = 1
myStatic3的静态变量index = 2,  实例变量count = 0

myStatic3的index、count增加1:
myStatic1的静态变量index = 3,  实例变量count = 1
myStatic2的静态变量index = 3,  实例变量count = 1
myStatic3的静态变量index = 3,  实例变量count = 1

java靜態變數是什麼

3. static變數誤解

3.1 static無法作用於局部變量

  • C/C 中static是可以作用域局部變數的
  • Java中static是不允許用來修飾局部變數。
    不要問為什麼,這是Java語法的規定。
    java靜態變數是什麼

3.2 this可以存取靜態變數

靜態變數雖然獨立於對象,但是不代表不可以透過物件實例去訪問,所有的靜態方法和靜態變數都可以透過物件實例存取(只要存取權限足夠)。
this表示目前物件實例,而static靜態變數被所有物件所共享,所以可以透過this存取靜態變數

public class StaticVariable {
    public static int index = 1;

    public static void main(String[] args) {
        StaticVariable staticVariable = new StaticVariable();
        staticVariable.get();
    }

    private void get() {
        int index = 2;
        System.out.println(this.index);
    }
}

運行結果: 

java靜態變數是什麼

3.3 static不會改變類別成員的存取權

Java中的static關鍵字不會影響到變數或方法的作用域。在Java中能夠影響到存取權限的只有private、public、protected(包括包存取權)這幾個關鍵字

public class MyStatic {
    public static int index1 = 1;

    // 静态变量
    private static int index2 = 0;
}

public class StaticVariableTest {

    public static void main(String[] args) {
        System.out.println(MyStatic.index1);
        System.out.println(MyStatic.index2);
    }
}

java靜態變數是什麼

相關影片教學推薦: Java影片教學

以上是java靜態變數是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境