static 關鍵字
static被稱為靜态,可以用來修飾類的屬性,方法,代碼塊,内部類.
- 修飾的成員,被所有對象所共享
- 不建立對象,直接被調用
- 優先于對象存在靜态優先于非靜态
- 類加載時執行
1.可直接通過類名通路 也可以通過對象名通路
static
如過不是靜态,每一個對象都要複制一份變量,浪費空間,
當所有對象的某一個值都相同時,加一個static使其為靜态,在記憶體中隻有一份,所有對象共享
- 靜态方法隻能通路 靜态的變量
- 成員方法可以方法可以通路 成員變量 還可以方法靜态變量
package com.nie.day2.Demo1;
public class StaticTest {
String name;
int age;
static String school;//可直接通過類名通路 也可以通過對象名通路
//static
//修飾的成員,被所有對象所共享
//不建立對象,直接被調用
//優先于對象存在o
//随着加載而加載
public void work() {
System.out.println(name + "\t" + age + "\t" + school);
}
}
package com.nie.day2.Demo1;
public class Test1 {
public static void main(String[] args) {
StaticTest.school = "陝西";//可直接通過類名通路
StaticTest b = new StaticTest();
b.age = 12;
b.name = "sfdsf";
b.work();
StaticTest c = new StaticTest();
c.age = 33;
c.name = "花花";
c.work();
}
}
輸出:
sfdsf 12 陝西
花花 33 陝西
代碼塊
- 靜态變量優先于于非靜态,
- 類加載時自動調用,僅一次,與是否建立對象無關。
package com.nie.day2.Demo1;
public class Demo {
static int num = 10;
{
System.out.println("執行個體代碼塊");
}
static {
System.out.println("靜态代碼塊");
}
public static void main(String[] args) {
new Demo();// 先加載類 然後建立對象
new Demo();
System.out.println(Demo.num);
}
}
靜态代碼塊
執行個體代碼塊
執行個體代碼塊
10