java-5.jpg
static(靜態): 修飾符
static修飾成員變量: 如果一個數據需要被所有對象共享使用的時候,那么即可使用static修飾該成員變量。
訪問方式:
方式1: 可以使用對象進行訪問。 格式:對象.靜態屬性名
方式2: 可以使用類名進行訪問。 格式: 類名.屬性名。
推薦使用:可以使用類名進行訪問。
靜態成員變量要注意的細節:
1. 靜態的成員變量可以使用類名或者是對象進行訪問。
2. 非靜態的成員變量只能使用對象進行 訪問,不能使用類名直接訪問。
3. 千萬不要為了方便訪問而使用static修飾一個成員變量,只有這個成員變量的數據是需要被共享的時候
才使用static修飾。
static修飾成員函數:
靜態函數的訪問方式:
方式一:使用對象訪問。 格式: 對象.函數名()
方式二:使用類名訪問。 格式: 類名.函數名();
靜態函數要注意的細節:
1. 非靜態的函數只能使用對象調用,不能使用類名調用。
2. 靜態函數可以直接訪問靜態的成員,但是不能直接訪問非靜態的成員。
原因:靜態函數可以使用類名調用,而這時候對象可能還沒有存在內存中,這時候非靜態的數據也就不存在內存中。
3. 非靜態函數可以直接訪問靜態以及非靜態的成員。
原因:非靜態函數必須要由對象調用,如果對象存在了,靜態數據以及非靜態數據早就存在內存中了。
4. 靜態函數不能出現this以及super關鍵字。
原因:因為靜態函數可以使用類名直接調用,而這時候可能還沒有對象存在,this又要代表當前對象。
什么時候使用static修飾一個函數呢?
如果一個函數沒有直接訪問非靜態的成員,那么即可使用static修飾該函數了。(常用于工具類的方法 Arrays)
非靜態的成員變量與靜態成員變量的區別:
數量上的區別:
(n份)非靜態成員變量是在每個對象中都維護一份數據
(1份)靜態成員變量只會在方法中維護一份數據。
訪問方式上的區別:
非靜態的成員變量只能使用對象進行訪問.
靜態成員變量可以使用對象、類名進行訪問。
存儲位置上的區別;
非靜態成員變量是存儲在堆內存中。
靜態成員變量是存儲在方法區中。
生命周期的區別:
非靜態成員變量是隨著對象的創建而存在,隨著對象的消失而消失。
靜態成員變量是隨著類文件的加載而存在,隨著類文件(字節碼文件)的消失而消失。
作用上的區別:
非靜態成員變量的作用是用于描述一類事物的屬性。
靜態成員變量的作用是提供一個共享數據給所有對象使用的。
class Student{
String name ; // 非靜態的成員變量
static String country = "中國"; //靜態的成員變量
//靜態代碼塊
static{
System.out.println("靜態代碼塊的代碼執行了..");
}
public Student(String name){
this.name = name;
}
//靜態函數
public static void sleep(){
System.out.println( "今晚早睡..");
}
//非靜態函數
public void study(){
System.out.println(name+"好好學習,為將來可以成為高富帥做準備!!");
}
}
class Person
{
public static void main(String[] args) {
Student s1 = new Student(“張三”);
Student s2 = new Student(“李四”);
System.out.println("姓名:"+ s1.name);
System.out.println("姓名:"+ s2.name);
/*
System.out.println("國籍:"+ Student.country);
*/
}
}