看了上面是不是想睡覺了,單純的概念是挺煩人的,那下面讓我們在實際代碼中來加深對他們的認知。
方法的調用可以分為兩種:
沒有使用static修飾的方法或字段,屬于對象。為實例成員。
使用static修飾的方法或字段,屬于類。為類成員。
對他們的調用:
若是實例成員:只能通過對象來調用。
若是類成員:可以通過類名調用,也可以通過對象來調用。
好吧,下面小程序來了。
1 class dog//一群狗狗 2 { 3 String name; 4 int age;//沒有使用static修飾,屬于對象,為實例成員。 5 //狗的名字,年齡,每只狗都不同,能隨意變。 6 7 static int num=100;//使用static修飾,屬于類,為類成員。 8 //而狗的總數是不變的。 9 }10 11 class day5lesson2 12 {13 public static void main(String[] args) 14 {15 System.out.View Code上面代碼中被注釋掉的不能通過的代碼的錯題提示如下:
上面程序也說明了上面提到的:若是實例成員:只能通過對象來調用。若是類成員:可以通過類名調用,也可以通過對象來調用。但是在調用類成員時建議用類名來調用,因為在底層,對象來調用類成員,也會轉換為類名調用。
下面必須提到的是:靜態區域。它是在JVM內存中的一塊專門存儲類成員的存儲區域。
我們修改一下上面一段程序的主方法:
1 class dog//一群狗狗 2 { 3 String name; 4 int age;//沒有使用static修飾,屬于對象,為實例成員。 5 //狗的名字,年齡,每只狗都不同,能隨意變。 6 7 static int num=100;//使用static修飾,屬于類,為類成員。 8 //而狗的總數是不變的。 9 }10 class day5lesson2 11 {12 public static void main(String[] args) 13 {14 dog d1=new dog();15 dog d2=new dog();//聲明2個對象16 17 d1.num=111;//用d1修改類成員。18 System.out.println("d1.num="+d1.num);19 System.out.println("d2.num="+d2.num);//輸出20 21 d1.age=111;//用d1修改實例成員。22 System.out.println("d1.age="+d1.age);23 System.out.println("d2.age="+d2.age);//輸出24 }25 }View Code結果如下:
為什么是這種結果呢?這就是static修飾的字段屬于類成員,存儲在專門的靜態區域中。(PS:在類加載時就為其創建空間,所以比較消耗性能)。一般static方法用在做工具類的方法的時候,如Arrays類(java.util.Arrays)中,大量使用static方法,可在JDK API中查看。
而沒被static修飾的age(實例成員)則不會有這種效果。(PS:int定義一個數字默認值為0,所以d2.age輸出0)
新聞熱點
疑難解答