Java static變數與程式碼塊
阿新 • • 發佈:2018-11-19
static是用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊。
被static修飾的成員變數和成員方法獨立於該類的任何物件。也就是說,它不依賴類特定的例項,被類的所有例項共享。
只要這個類被載入,Java虛擬機器就能根據類名在執行時資料區的方法區內定找到他們。因此,static物件可以在它的任何物件建立之前訪問,無需引用任何物件。
它方便了在沒有建立物件的情況下使用,如math的使用。
特點:
package com.company; /* case_01被所有使用的關鍵字共享 case_02:可以使用類名呼叫 case_03可以呼叫靜態的成員方法 case_04不可以呼叫非靜態成員變數 case_05不可以呼叫非成員方法*/ public class StudentDemo02 { public static void main(String[] args) { Student1.graduateFrom = "xxx";//case_02 Student1.study(); } } class Student1 { String name; int age; static String graduateFrom; public static void study(){ System.out.println(graduateFrom); sleep();//case_03 //System.out.println(name); case_04 //eat(); case_05 } public static void sleep() { System.out.println("sleep"); } public void eat() { System.out.println(graduateFrom); } }
程式碼塊:
它優先於主方法執行、優先於構造程式碼塊執行,當以任意形式第一次使用到該類時執行。
該類不管建立多少物件,靜態程式碼塊只執行一次。
package com.company; public class BlockDemo { static { System.out.println("BlockTest靜態程式碼塊執行"); } { System.out.println("BlockTest構造程式碼塊執行"); } public BlockDemo(){ System.out.println("BlockTest無參構造執行了"); } public static void main(String[] args) { System.out.println("BlockTest的主函式執行了"); Coder c = new Coder(); Coder c2 = new Coder(); } } class Coder { static { System.out.println("Coder靜態程式碼塊執行"); } { System.out.println("Coder構造程式碼塊執行"); } public Coder() { System.out.println("Coder無參空構造執行"); } }
執行結果