類變量/方法(靜態變量/方法)
類變量也叫靜態變量,同樣的類方法也叫靜態方法,那么與之相對應的就有非靜態變量,非靜態方法,也叫實例變量,普通變量,普通方法。各個地方因為翻譯的問題,叫法不一樣,實際上在英文里就是一個單詞的區別 static
類變量
定義
訪問修飾符 static 數據類型 變量名;
訪問
類名.類變量名
也可以是類對象.類變量名
類變量的使用時機
當我們需要一個被所有對象所共享的一個變量時,就考慮使用,比如一個學生類,要統計每個學生所交的費用,Student(name, static fee)
類變量使用細節
- 類變量(靜態變量)可以被類的所有對象共享,而實例變量是每個對象獨享
- 加上static成為類變量(靜態變量),不加就是實例變量/普通變量/非靜態變量
類方法
類方法也叫靜態方法定義如下
定義
訪問修飾符 static 返回類型 類方法名 (){}
訪問
和類變量類似
類名.類方法名
也可以是類對象.類方法名
類方法的經典使用場景
我們都知道Java的utils包里的Math方法,比如開根號
Math.sqrt(9);
這就是典型的類方法使用,我們用這些方法,不需要為此實例化一個對象,直接類名點上方法名就可以拿來使用,提高了我們開發效率。如果在查看源碼的時候,也可以發現這些方法前面都有static。
如果我們所寫的方法不涉及非靜態成員的使用,我們就可以吧這個定義為靜態方法,比如打印數組啦,冒泡排序啦之類的。
類方法和普通方法的不同
-
類方法/變量(靜態方法/變量)都是隨着類的加載而加載,類方法中沒有this的參數。
而普通方法隱含this參數
-
類方法(靜態方法)可以通過類名,也可以通過對象來調用
普通方法只能通過對象去調用,不能通過類名去調用。
-
類方法(靜態方法)不允許使用關於對象的關鍵字,如this,super
而普通方法可以使用
-
類方法(靜態方法)只能訪問靜態成員
普通方法可以訪問所有成員
class Person{
private int id;
private static total = 0;
public static void setTotal(int total){
this.total = total;//錯誤,static方法中不可以使用this
id = total;//錯誤,靜態方法不可以訪問非靜態成員
Person.total = total;
}
public Person (){//構造器,實際上也可以看成非靜態方法
total++;//正確,非靜態方法可以使用靜態變量
id = total;//正確,非靜態方法可以使用非靜態變量
}
}
public class Test{
public static void main(String[] args){
Person.setTotal(3);
new Person();
}
}
小結
靜態方法,只能訪問靜態成員
非靜態方法,可以訪問所有成員
