1. 程式人生 > >static 關鍵字的作用

static 關鍵字的作用

Static關鍵字


java中的static關鍵字主要用於記憶體管理。我們可以應用java static關鍵字在變數,方法,塊和巢狀類中。 static關鍵字屬於類,而不是類的例項。

static關鍵字可以修飾

變數

如果將一個變數宣告為static,它就是所謂的靜態變量了,靜態變數可以用於引用所有物件的公共屬性。它能使程式儲存器高效(即它節省記憶體)。例如id計數。
eg1:公共屬性

class Student {
    int id;
    String name;
    static String college = "xiangTanUnverisity";

    Student8(int r, String n) {
        rollno = r;
        name = n;
    }

    void display() {
        System.out.println(rollno + " " + name + " " + college);
    }

    public static void main(String args[]) {
        Student8 s1 = new Student8(111, "Karan");
        Student8 s2 = new Student8(222, "Aryan");

        s1.display();
        s2.display();
    }
}

輸出結果

111 Karan ITS
222 Aryan ITS

id自增示例:
如果不是靜態變數

class Counter {
    int id = 0;
    Counter() {
        id++;
        System.out.println(id);
    }

    public static void main(String args[]) {

        Counter c1 = new Counter();
        Counter c2 = new Counter();
        Counter c3 = new Counter();

    }
}

輸出結果

1
1
1

如果是靜態變數

class Counter2 {
    static int id = 0;

    Counter2() {
        id++;
        System.out.println(id);
    }

    public static void main(String args[]) {

        Counter2 c1 = new Counter2();
        Counter2 c2 = new Counter2();
        Counter2 c3 = new Counter2();

    }
}

輸出結果

1
2
3

從而引出記憶體儲存位置圖:
在這裡插入圖片描述

方法

靜態方法有一下特性

  • 靜態方法屬於類,而不屬於類的物件。
  • 可以直接呼叫靜態方法,而無需建立類的例項。
  • 靜態方法可以訪問靜態資料成員,並可以更改靜態資料成員的值。

靜態方法的限制

  • 靜態方法不能直接使用非靜態資料成員或呼叫非靜態方法。
  • 靜態方法不能使用this和super。
class A {
    int a = 40;// non static

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

輸出結果

[編譯錯誤!]Compile Time Error

如果將a修飾為靜態變數則輸出結果為:
static int a = 40;

40

程式碼塊

作用

  • 初始化靜態資料成員
  • 在main方法之前就執行

eg:

class A2 {
    static {
        System.out.println("static block is invoked");
    }

    public static void main(String args[]) {
        System.out.println("Hello main");
    }
}

輸出順序為:

static block is invoked
Hello main

內部類

根據Oracle官方的說法:

Nested classes are divided into two categories: static and non-static.
Nested classes that are declared static are called static nestedclasses.
Non-static nested classes are called inner classes.

從字面上來說,一個是靜態鑲嵌內部類,一個是內部類。
此處直降static關鍵字,不深究,可以隨時去官網檢視:Nested Classes