1. static 修飾的 變量是所有對象共享的數據
static 修飾的是對象創建之前就存在,可以用。
static 修飾的變量可以直接被類名調用
class deo
{
public static void main(String[] args)
{
person p = new person();
p.show("xiao");
System.out.println(p.country);
System.out.println(person.country);
}
}
class person
{
String name;//成員變量,實例變量
static String country = "cn";//country 是 所有person 共享的 靜態變量或類變量
public void show(String name1)
{
name = name1;
System.out.println(name + country);
}
}
有些數據不能被共享即不能被 static 修飾
2. static 的特點
- static 是一個修飾符,用於修飾成員
- static 修飾的成員被所有對象共享
- static 優先於對象存在,因爲 static 成員隨着類的加載已經存在了
- static 修飾的成員多了一種調用方式,可以直接被類名所調用,類名.靜態成員
- static 修飾的數據是共享的數據,對象中的存儲是特有數據。
static 修飾的叫 靜態變量,不在叫成員變量
3.成員變量和靜態變量的區別
1.生命週期不同:成員變量隨着對象的建立而存在,歲這對象的被回收而消失
靜態變量隨着類的加載而存在,隨着類的消失而消失
2.調用方式不同:成員變量只能被對象調用
靜態還可以被類名調用
3.別名不同: 成員變量也稱爲實例變量
靜態變量稱爲類變量
4. 存儲位置不同:
成員變量存儲在堆內存的對象中,所以也叫對象的特有數據
靜態變量存儲在方法區(共享數據區)的靜態區,也叫對象的共享數據。
4.靜態 使用中的注意細節
class person
{
String name;
static String country = "cn";
public static void show()
{
System.out.println(name + country); // 錯誤 name 非靜態
}
}
/*
靜態使用注意:
1.靜態方法只能訪問靜態成員(非靜態既可以訪問靜態又可以訪問非靜態)
2.靜態方法中不可以使用 this super 關鍵字
3.主函數是靜態的。 所以只能調用靜態方法和靜態變量。 所以調用非靜態時 要先new 一個對象
(靜態前面省略的是類名,非靜態省略的是this)
*/
5. main 函數
class deo
{
/*
public static void main(String[] args)
特殊之處:
1.格式是固定的
2.被jvm 所識別和調用
public: 因爲權限必須是最大的。
static: 虛擬機調用主函數時不需要對象,直接用主函數所屬類名調用
void: 主函數沒有具體的返回值。
main: 函數名,不是關鍵字,只是一個 jvm 識別的固定的名字
String[] args : 這是主函數的參數列表,是一個數組型的參數,而且元素都是字符串類型
args 即 arguments
*/
public static void main(String[] args) //new String[0]
{
// person p = new person();
// p.show("xiao");
System.out.println(args);//輸出是 [Ljava.lang.String;@15db9742
System.out.println(args.length);// 輸出是0
}
}
6.什麼時候用靜態
class deo
{
/*
1.靜態變量
分析對象中所具備的成員變量的值都是共有的,那麼可以被靜態修飾。
只要是數據在對象中都是不同的,就是對象特有的數據,必須存儲在對象中,是非靜態的。
如果是相同的數據,對象不需要修改,只要使用就行,不需要存儲在對象中,定義成靜態的。
2.靜態函數
函數是否用靜態修飾,就參考一點,就是該函數功能是否訪問到對象中的特有數據。
簡答來說就是: 從遇難代碼看,該功能是否需要訪問非靜態的成員變量,如果需要,那就是非靜態的。
*/
public static void main(String[] args) //new String[0]
{
// person p = new person();
// p.show("xiao");
System.out.println(args);//輸出是 [Ljava.lang.String;@15db9742
System.out.println(args.length);// 輸出是0
}
}