java中被static修飾的成員稱為靜态成員或類成員。
(1)靜态成員屬于整個類所有,而不是某個對象所有,即被類的所有對象所共享。
(2)靜态成員屬于整個類,當系統第一次使用該類時,就會為其配置設定記憶體空間直到該類被解除安裝才會進行資源回收。
(3)靜态成員可以使用類名直接通路,也可以使用對象名進行通路。
1.靜态變量
public class Hello {
static String name="Tom";
public static void main(String[] args) {
System.out.println("通過類名通路name:"+Hello.name);
Hello h=new Hello();
System.out.println("通過對象名通路name:"+h.name);
}
}
2.靜态方法
public class Hello {
public static void print(){
System.out.println("hello");
}
public static void main(String[] args) {
Hello.print(); //使用類名直接調用靜态方法
Hello demo=new Hello();
demo.print(); //使用對象名調用靜态方法
}
}
注意:
(1)在靜态方法中可以直接調用同類中的靜态變量,但不能直接調用非靜态變量
public class Hello {
String name1="湯姆"; //非靜态變量
static String name2="Tom";
//main方法也是靜态方法
public static void main(String[] args) {
System.out.println("直接調用靜态變量name2:"+name2); //正确
System.out.println("直接調用非靜态變量name1:"+name1); //此時會報錯
//在該類的靜态方法中必須通過對象名調用非靜态變量
Hello h=new Hello();
System.out.println("通過對象名調用非靜态變量name1:"+h.name1); //正确
}
}
(2)普通成員方法中可以直接通路同類的非靜态變量和靜态變量
public class Hello {
String name1="湯姆"; //非靜态變量
static String name2="Tom";
public void print() { //普通成員方法
System.out.println("直接調用靜态變量name2:"+name2); //正确
System.out.println("直接調用非靜态變量name1:"+name1); //正确
}
}
(3)靜态方法中不能直接調用非靜态方法,需要通過對象來通路非靜态方法
public class Hello {
public void show(){ //非靜态方法
System.out.println("hello");
}
public static void print(){ //靜态方法
System.out.println("你好");
}
public static void main(String[] args) {
print(); //靜态方法中可以直接調用靜态方法
Hello demo=new Hello();
demo.show(); //不能直接通路非靜态方法,必須通過對象通路非靜态方法
}
}