Java之静态
? ? ? ? 靜態(tài)這個概念在很多編程語言中都有體現(xiàn),比如C++中,Java是面向?qū)ο蟮?#xff0c;某些特殊情況下,通常是實用方法但是不需要類的實例。static這個關(guān)鍵字就可以標(biāo)記處需要類實例的方法。
1、靜態(tài)方法
1)靜態(tài)方法不能調(diào)用非靜態(tài)的變量
? ? ? ?帶有靜態(tài)方法的類通常(雖然不一定是這樣)不打算要被初始化的,我們知道抽象類是不能被初始化的。靜態(tài)方法是在物管特定類的實例情況下進(jìn)行的,靜態(tài)方法是通過類的名稱來調(diào)用,所以靜態(tài)方法無法引用到該類的任何實例變量,因而在此情況下靜態(tài)方法也不會知道可以使用哪個實例變量值。
? ? ? 那如果在靜態(tài)方法中使用實例變量,會出現(xiàn)什么問題呢?
public class UserDuck {private int size;public static void main(String [] args){System.out.println("Size of duck is "+size);}public void setSize(int s) {size = s;}public int getSize() {return size;} }2)靜態(tài)的方法不能調(diào)用非靜態(tài)的方法
public class UserDuck {private int size;public static void main(String [] args){System.out.println("Size of duck is "+getSize());}public void setSize(int s) {size = s;}public int getSize() {return size;} }2、靜態(tài)變量
? ? ? 所謂的靜態(tài)方法就是在變量定義的時候加上static聲明,且靜態(tài)變量只會在載入的第一次的時候被初始化,且被所有實例共享。
public class UserDuck {private int size;private static int duckCount = 0;public UserDuck() {duckCount++;}public void setSize(int s) {size = s;}public int getSize() {return size;} }靜態(tài)變量是在類被加載時初始化的。類之所以會被加載,是因為Java虛擬機認(rèn)為它該被加載,通常,Java虛擬器會加載某個類時因為第一次有人闡釋創(chuàng)建該類的實例,或者使用該類的靜態(tài)方法或者變量。因此:
1)靜態(tài)變量會在該類的任何對象創(chuàng)建之前就完成初始化
2)靜態(tài)變量會在該類的任何和靜態(tài)方法執(zhí)行之前就初始化
class Duck{static int size = 0;private String name;public Duck(String n) {name = n;size++;}}public class UserDuck {public static void main(String[] args) {System.out.println(Duck.size);Duck d= new Duck("Duck Duck");System.out.println(Duck.size);} }注意:對于long活著了short,int等primitive主數(shù)據(jù)類型整數(shù)的默認(rèn)值是0,否點數(shù)默認(rèn)值是0.0,boolean是false,對象引用是null,靜態(tài)變量如果沒有給其賦初始值,它會被設(shè)定默認(rèn)值,int會被設(shè)定為0,靜態(tài)變量的默認(rèn)值回事該變量類型的默認(rèn)值。
1)靜態(tài)final變量是常量
一個被標(biāo)記為final的變量達(dá)標(biāo)它是一旦被初始化之后就不會被改動。
public static final double PI = 3.1415926;此變量標(biāo)識為public,因此可供各方讀寫;
此變量標(biāo)識位static,不需要類的實例
此變量表示為final,為常量,常量變量的名稱都要大寫
那靜態(tài)的final變量如何初始化呢,有以下兩種方法:
1)聲明的時候直接初始化
public class Foo{public static final int FOO_X = 1024; }2)靜態(tài)初始化程序中
public class BAR{public static final double BAR_SIGN;static{ BAR_SIGN = (double)Math.random();} }當(dāng)然final還有其他的用法,比如
final變量為常量,無法改變其值;
final的method表示不能覆蓋該methon;
final的類代表不能繼承該類,即不能創(chuàng)建該類的子類。
總結(jié)
- 上一篇: Java之空间分配
- 下一篇: java美元兑换,(Java实现) 美元