靜態域(也叫做類變量)
如果將域(成員變量)定義爲static形式,這個域就叫做靜態域
特點:
- 這個類的所有實例將共享這個靜態域。
- 即使沒有創建該類對象,這個靜態域也存在。它屬於類,不屬於任何獨立的對象,因此也被稱作類域或類變量。
- 隨着類的加載而加載。
靜態常量
定義格式:
public static final 數據類型 常量名(通常大寫)=常量值;
調用格式:類名.靜態常量名
如數學常量:public static final double E=
2.718281828459045;
public static final double PI=
3.141592653589793;
靜態方法(也稱類方法):被關鍵字static修飾的方法。
特點
- 隨着類的加載而加載。
- 靜態方法是沒有隱式參數(this)的方法。
- 靜態方法不能調用類中的實例域和成員方法,但是可以調用自身類中的靜態域和靜態方法
- 即使沒有創建該類對象,這個方法也可以調用
調用格式
類名.方法名(...);
用途:
- 不需要查看或修改對象的狀態,所需要的參數都是通過顯示參數提供,沒有隱式參數
- 只需要訪問靜態域,
- 用做工廠方法,生成不同格式的對象
如:LocalDate.now(); LocalDate.of(); NumberFormat();
NumberFormat c1=NumberFormat.getCurrencyInstance(); //返回當前默認語言環境的貨幣格式。 NumberFormat c2=NumberFormat.getPercentInstance(); //返回當前默認語言環境的整數格式。
使用靜態工廠方法的原因(《java核心技術 卷一》):
1.無法命名構造器,構造器的名字必須與類名相同,但是這裏希望將得到的貨幣實例和百分比實例採用不同的名字
2.當使用構造器時,無法改變所構造的對象類型,而工廠方法將返回一個DecimalFormat類對象,這是NumberFormat的子類
main()方法:在啓動程序時,靜態的main方法將執行並創建程序所需要的對象。
靜態初始化塊:用static標記的代碼
用途:對類的靜態域進行初始化
特點:
1.在類第一次加載的時候調用
2.所有的靜態初始化語句和靜態初始化塊按在類中定義的順序執行
class Student
{
private static int nextNo=1;
private int no;
private String name;
private char sex;
//構造方法
public Student(String name,char sex)
{
this.name=name;
this.sex=sex;
this.no=0;
}
public String getName()
{
return name;
}
public char getSex()
{
return sex;
}
public int getNo()
{
return no;
}
public void setNo()
{
no=nextNo;
nextNo++;
}
public static int getNextNo()
{
//name="葉葉";//靜態方法只能訪問靜態變量,無法引用非靜態變量
return nextNo;
}
static
{
System.out.println("第一個靜態初始化塊");
}
static
{
System.out.println("第二個靜態初始化塊");
}
}
public class StaticDemo
{
public static void main(String[] args)
{
int sno=Student.getNextNo(); //可以不創建對象調用靜態方法
System.out.println(sno);
Student[] s1=new Student[5];
for(int i=0;i<s1.length;i++)
{
s1[i]=new Student("葉葉",'男');
s1[i].setNo();
System.out.println("學號:"+s1[i].getNo()+"----姓名:"+s1[i].getName()+"----性別:"+s1[i].getSex());
System.out.println("NextNo="+Student.getNextNo());
}
}
}
運行結果