1、static關鍵字簡介 static為java中的關鍵字,可以修飾類中的方法、變數,以及修飾靜態代碼塊 當用static修飾的方法和變數時可以直接通過類名.方法名和類名.變數名來訪問,不需要進行對象的實例化操作,方便在沒有創建對象的時候來調用方法或者變數 2、static修飾方法 static修 ...
1、static關鍵字簡介
static為java中的關鍵字,可以修飾類中的方法、變數,以及修飾靜態代碼塊
當用static修飾的方法和變數時可以直接通過類名.方法名和類名.變數名來訪問,不需要進行對象的實例化操作,方便在沒有創建對象的時候來調用方法或者變數
2、static修飾方法
static修飾方法時,改方法稱之為靜態方法,由於static修飾的方法不需要通過對象的實例化來方法,所以在靜態方法中不能訪問非靜態方法(實例方法)和非靜態變數(實例變數),但是在非靜態方法中可以訪問靜態方法
點擊查看代碼
public class StaticDemo {
public StaticDemo() {
}
private static String str1 = "hello-static";
private String str2 = "hello-static-hello";
private void printStr1() {
System.out.println(str1);
System.out.println(str2);
}
private static void printStr2() {
System.out.println(str1);
// System.out.println(str2);
// printStr1();
}
static {
System.out.println("hello-static");
}
public static void main(String[] args) {
printStr2();
}
}
當在靜態方法printStr2訪問非靜態變數str2時,此時對象還沒有進行實例化操作,所以無法訪問實例變數str2,同樣在靜態方法printStr2中無法訪問非靜態方法printStr1
3、static修飾變數
當static修飾變數時,被稱為靜態變數,在類初始載入時就會進行初始化,並且初始化一次,在記憶體中只有一個副本,屬於類的一部分,jdk8中存儲於堆中,而非靜態變數是每個實例化對象所擁有的,在初始化對象的時候創建,每個對象所擁有的互不影響,靜態變數的初始化順序按照定義的順序進行初始化
4、static修飾代碼塊
當static修飾代碼塊時,可以有多個代碼塊,初始化順序按照定義的順序進行初始化,並且也只會執行一次
5、static相關題目
當static修飾父類、子類相關代碼塊、靜態變數時
載入順序:
父類靜態變數、靜態代碼塊 ->子類靜態變數、靜態代碼塊->父類成員變數、普通代碼塊->父類構造方法->子類成員變數、普通代碼塊->子類構造方法
點擊查看代碼
public class StaticParent {
private static String staticParent="父類靜態變數";
static {
System.out.println("父類靜態代碼塊-->"+staticParent);
}
public StaticParent(){
System.out.println("父類構造器");
}
}
點擊查看代碼
public class StaticChild extends StaticParent{
public StaticChild(){
System.out.println("子類構造器");
}
private static String staticChild="類靜態變數";
static {
System.out.println("子類靜態代碼塊-->"+staticChild);
}
public static void main(String[] args) {
StaticChild staticChild1=new StaticChild();
StaticChild staticChild2=new StaticChild();
}
}
點擊查看代碼
父類靜態代碼塊-->父類靜態變數
子類靜態代碼塊-->類靜態變數
父類構造器
子類構造器
父類構造器
子類構造器