static關鍵字
package chinese1;
/*
* 中國人這樣一個類
* 什么時候成員變量聲明為實例變量呢?
* 所有對象都有這個屬性署尤,并且所有對象的這個屬性的值都是一樣的曹体,建議定義為靜態(tài)變量,節(jié)省內(nèi)存的開銷箕别。
* 靜態(tài)變量在類加載的時候初始化,內(nèi)存在方法區(qū)中開辟除抛,訪問的時候不需要創(chuàng)建對象母截,直接使用類名.靜態(tài)變量名的方式訪問。
* 關于java中的static關鍵字:
* static英語單詞翻譯為靜態(tài)的
* static修飾的方法是靜態(tài)的
* static修飾的變量是靜態(tài)變量
* 所有static修飾的元素都稱為靜態(tài)的清寇,都可以使用類名.的方式訪問,當然也可以用引用.的方式訪問【但不建議】
* static修飾的所有元素都是類級別的特征翩迈,和具體的對象無關盔夜。
*/
public class Chiese9 {
//身份證號
String id;
//姓名
String name;
//國籍【每一個對象由于都是由Chinese類實例化的,所有中國人的國籍都是中國】
//無論通過chinese類實例化多少個java對象绽族,這些java對象的國籍都是中國
//實例變量【實例變量是一個java對象就有一份衩藤,100個java對象,就有100個country】赏表,分析這個設計方式有什么缺點匈仗?
//實例變量存儲java對象內(nèi)部逢慌,在堆內(nèi)存當中,在構造方法執(zhí)行的時候初始化火架。
//所有的中國人的國籍都是“中國”忙菠,這里聲明為實例變量顯然不合適,太浪費內(nèi)存空間骡男,沒必要讓每一個對象都保留一份“國籍”內(nèi)存傍睹。
//國籍【所有對象國籍·都一樣,這種特征屬于類級別特征拾稳,可以提升為整個模板的特征,可以在變量前添加static關鍵字修飾】
//靜態(tài)變量,靜態(tài)變量在類加載的時候初始化虑椎,不需要創(chuàng)建對象就可以訪問,使用類名.的方式訪問传趾。存放在方法區(qū)內(nèi)存中泥技。
static String country="中國";//帶上static,就代表country之后就可以代表類級別的屬性簸呈,是用類名.的方式訪問店茶。
public Chiese9(String id,String name)
{
this.id=id;
this.name=name;
}
}
package chinese1;
public class Chinese_Test {
public static void main(String[]args)
{
//創(chuàng)建中國人對象1
Chiese9 zhangsan=new Chiese9("1","張三");
System.out.println(zhangsan.id+","+zhangsan.name+","+Chiese9.country);
//創(chuàng)建中國人對象2
Chiese9 lisi=new Chiese9("2","李四");
System.out.println(lisi.id+","+lisi.name+","+Chiese9.country);
}
}
靜態(tài)代碼塊
package static_Test1;
/**
* 可以使用static關鍵字來定義“靜態(tài)代碼塊”:
* 1、語法格式
* static
* {
* java語句;
* }
* 2轿腺、靜態(tài)代碼塊在類加載時執(zhí)行,并且只執(zhí)行一次族壳。
* 3、靜態(tài)代碼塊在一個類中可以編寫多個贰您,并且遵循自上而下的順序依次執(zhí)行
*4赖歌、靜態(tài)代碼塊的作用是什么?怎么用庐冯?用在哪?什么時候用返劲?
*這當然和具體的需求有關栖茉,例如項目中要求在類加載的時刻/時機執(zhí)行代碼完成日志的記錄。
*那么這段日志的代碼塊就可以編寫在靜態(tài)代碼塊中亲配,這個特殊的時刻就被成為類加載時刻惶凝。若
*希望在此時刻執(zhí)行一段特殊的程序,這段程序可以直接放到靜態(tài)代碼塊當中苍鲜。
*5、通常在靜態(tài)代碼塊當中完成預備工作洒疚,下完成數(shù)據(jù)的準備工具坯屿,例如:初始化鏈接池,解析XML配置文件.......
*/
public class static_Test9 {
static
{
System.out.println("類加載-->1");
}
static
{
System.out.println("類加載-->2");
}
static
{
System.out.println("類加載-->3");
}
public static void main(String[]args)
{
}
}
package static_Test1;
/**
* 實例語句塊【了解內(nèi)容】
* 1肺魁、實例代碼塊可以編寫多個隔节,也是遵循自上而下的順序依次執(zhí)行
* 2寂呛、實例代碼塊在構造方法之前執(zhí)行瘾晃,構造方法執(zhí)行依次,實例代碼塊對應執(zhí)行一次劫拢。
* 3强胰、實例代碼塊也是java語言為程序員準備一個特殊的時機,這個特殊時機被稱為:對象初始化時機偶洋。
*/
實例代碼塊
public class static_Test9 {
//構造函數(shù)
public static_Test()
{//只在new構造函數(shù)的new 構造函數(shù)的情況下執(zhí)行以下程序
System.out.println("Test類的缺省構造器執(zhí)行")
}
{ //實例代碼塊
System.out.println("-->1");
}
{ //實例代碼塊
System.out.println("-->2");
}
{ //實例代碼塊
System.out.println("-->3");
}
public static void main(String[]args)
{
System.out.println("main begin");
new Test();
new Test();
}
}