一、Java中的static使用之靜態變數 1.Java 中被static修飾的成員稱為靜態成員或類成員。它屬於整個類所有,而不是某個對象所有,即被類的所有對象所共用、且優先於對象存在。靜態成員可以使用類名直接訪問,也可以使用對象名進行訪問。使用 static 可以修飾變數、方法和代碼塊。 2.pu ...
一、Java中的static使用之靜態變數
1.Java 中被static修飾的成員稱為靜態成員或類成員。它屬於整個類所有,而不是某個對象所有,即被類的所有對象所共用、且優先於對象存在。靜態成員可以使用類名直接訪問,也可以使用對象名進行訪問。使用 static 可以修飾變數、方法和代碼塊。
2.public 修飾符表示公開的、公有的,靜態變數使用static修飾
3.靜態方法中可以直接調用同類中的靜態成員,但不能直接調用非靜態成員。
public class HellWorld{ String name = “Java”;//非靜態變數 static String hobby = “ programing”;//靜態變數 public static void print(){ System.out.println(“歡迎您:” + name + ” !”);//不能直接調用非靜態變數 System.out.println(“歡迎您:” + hobby + ” !”);//可以直接調用靜態變數 }
}
4.如果希望在靜態方法中調用非靜態變數,可以通過創建類的對象,然後通過對象來訪問非靜態變數。
public class HellWorld{ String name = “Java”;//非靜態變數 static String hobby = “program ”;//靜態變數 //靜態方法中調用非靜態變數 public static void print(){ //創建類的對象 HelloWorld hello=new HelloWorld(); //通過對象來實現在靜態方法中調用非靜態變數 System.out.println(“歡迎您:”+hello.name+”!”); //靜態方法中可以直接調用靜態變數 System.out.prinltn(“歡迎喜歡”+program+”的”+hello.name); } }
5.在普通成員方法中,則可以直接訪問同類的非靜態變數和靜態變數
public class HellWorld{ String name = “Java”;//非靜態變數 static String hobby = “ programing”;//靜態變數 public void print(){//普通方法 System.out.println(“歡迎您:” + name + ” !”); System.out.prinltn(“歡迎喜歡”+program+”的”+hello.name); } }
6.靜態方法中不能直接調用非靜態方法,需要通過對象來訪問非靜態方法
public class HellWorld{ String name = “Java”;//非靜態變數 static String hobby = “program ”;//靜態變數 //非靜態方法 public void show(){ System.out.println(“我是非靜態方法,不能被靜態方法直接調用。。。”); } //靜態方法 public static void show2(){ System.out.println(“我是靜態方法,可以直接被靜態方法調用”); } //靜態方法中通過對象來調用非靜態方法。可以直接調用靜態方法 public static void print(){ //創建類的對象 HelloWorld hello=new HelloWorld(); //通過對象來實現在靜態方法中調用非靜態方法 hello.show(); //靜態方法中可以直接調用靜態方法 show2(); } }
二、Java 中的 static 使用之靜態初始化塊
1.在類的聲明中,可以包含多個初始化塊,當創建類的實例時,就會依次執行這些代碼塊。如果使用 static 修飾初始化塊,就稱為靜態初始化塊。
2.實例變數和類變數的區別:
a) 存放位置:類變數隨著類的載入而存放於方法區中;實例變數隨著對象的建立存在於堆記憶體中。
b) 生命周期:類變數生命周期最長,隨著類的消失而消失;實例變數生命周期隨著對象的消失而消失。
3.靜態初始化塊只在類載入時執行,且只會執行一次,同時靜態初始化塊只能給靜態變數賦值,不能初始化普通的成員變數。程式運行時,靜態初始化快先被執行並優先於主函數,然後執行普通初始化塊,最後才執行構造方法。
public class StaticDemo { int num1;//聲明變數1 int num2;//聲明變數2 static int num3;//聲明靜態變數3 public StaticDemo(){//構造方法 num1 = 88; System.out.println("通過構造方法為變數1賦值"); } {//初始化塊 num2 = 99; System.out.println("通過初始化塊為變數2賦值"); } static{//靜態初始化這裡不能giel普通變數賦值 num3 = 77; System.out.println("通過靜態初始化塊為靜態變數3賦值"); } public static void main(String[] args) { StaticDemo hello = new StaticDemo();//創建類的對象hello System.out.println("num1:" + hello.num1); System.out.println("num2:" + hello.num2); System.out.println("num3:" + hello.num3); StaticDemo hello1 = new StaticDemo(); } }
運行結果: