1. 程式人生 > >Java static變數與程式碼塊

Java static變數與程式碼塊

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無參空構造執行");
    }    
    
}

執行結果