你可以將
創(chuàng)新互聯(lián)公司是由多位在大型網(wǎng)絡公司、廣告設計公司的優(yōu)秀設計人員和策劃人員組成的一個具有豐富經(jīng)驗的團隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設計師、平面廣告設計師、網(wǎng)絡營銷人員及形象策劃。承接:網(wǎng)站建設、成都網(wǎng)站設計、網(wǎng)站改版、網(wǎng)頁設計制作、網(wǎng)站建設與維護、網(wǎng)絡推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務。
{
Point?p=new?Point();
p.x=4;
System.out.println(p.x);
p.y=5;
System.out.println(p.y);
}
代碼塊,做為非靜態(tài)代碼塊,放到Rectangle類或者Main類或者Point類中,編譯就能通過了,但是依據(jù)題意,還是應該放到Rectangle類或者Main類中為好,因為可以調用它,放到Point類中,沒有類調用它這段代碼了。完整的Java程序如下
public?class?Main?{
public?static?void?main(String[]?args)?{
Rectangle?rect=new?Rectangle();
rect.width=100;
System.out.println(rect.width);
rect.height=200;
System.out.println(rect.height);
Rectangle?rect2=new?Rectangle();
rect2.width=10;
System.out.println(rect2.width);
rect2.height=20;
System.out.println(rect2.height);
}
}
class?Rectangle
{
int?width;
int?height;
{
Point?p=new?Point();
p.x=4;
System.out.println(p.x);
p.y=5;
System.out.println(p.y);
}
}
class?Point
{
int?x;
int?y;
}
運行結果
4
5
100
200
4
5
10
20
因為是非靜態(tài)代碼塊在Rectangle類中,所以每建一個Rectangle對象,都會執(zhí)行一次非靜態(tài)代碼塊,所以Point類的打印被執(zhí)行了兩次。
由static
關鍵修飾的內(nèi)容
為靜態(tài)
;
反之
,為非靜態(tài)
靜態(tài)變量
屬于
類
,為所有對象共有
分靜態(tài)變量
屬于
對象
,
每個對象都可以有且屬性值可以各異
靜態(tài)變量優(yōu)于非靜態(tài)變量加載,故
靜態(tài)代碼塊中不能引用非靜態(tài)成員,會報錯
相同點:都是在JVM加載類時且在構造方法執(zhí)行之前執(zhí)行,在類中都可以定義多個,
一般在代碼塊中對一些static變量進行賦值。
不同點:靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行(靜態(tài)代碼塊—非靜態(tài)代碼塊—構造方法)。
靜態(tài)代碼塊只在第一次new執(zhí)行一次,之后不再執(zhí)行,而非靜態(tài)代碼塊在每new
一次就執(zhí)行一次。非靜態(tài)代碼塊可在普通方法中定義(不過作用不大);而靜態(tài)代碼塊不行。
例:
//普通類
public class PuTong {
public PuTong(){
System.out.print("默認構造方法!--");
}
//非靜態(tài)代碼塊
{
System.out.print("非靜態(tài)代碼塊!--");
}
//靜態(tài)代碼塊
static{
System.out.print("靜態(tài)代碼塊!--");
}
public static void test(){
{
System.out.println("普通方法中的代碼塊!");
}
}
}
//測試類
public class TestClass {
/**
* 區(qū)別兩次new靜態(tài)與非靜態(tài)代碼塊執(zhí)行情況
*/
public static void main(String[] args) {
PuTong c1 = new PuTong();
c1.test();
PuTong c2 = new PuTong();
c2.test();
}
}
/*
運行輸出結果是:
靜態(tài)代碼塊!--非靜態(tài)代碼塊!--默認構造方法!--普通方法中的代碼塊!
非靜態(tài)代碼塊!--默認構造方法!--普通方法中的代碼塊!
*/
靜態(tài)初始化塊:當類第一次加載時執(zhí)行。
非靜態(tài)初始化塊:非靜態(tài)初始化塊會在構造函數(shù)執(zhí)行時,且在構造函數(shù)主體代碼執(zhí)行之前被執(zhí)行。
區(qū)別如下:
1、執(zhí)行次數(shù)不同
靜態(tài)塊只執(zhí)行一次,初始化塊可以執(zhí)行多次。
2、作用不同
靜態(tài)初始化塊僅能初始化類變量,即static修飾的數(shù)據(jù)成員。
非靜態(tài)初始化塊可以初始化類的實例變量。
擴展資料:
使用Java靜態(tài)代碼塊注意事項:
1、它是隨著類的加載而執(zhí)行,只執(zhí)行一次,并優(yōu)先于主函數(shù)。具體說,靜態(tài)代碼塊是由類調用的。類調用時,先執(zhí)行靜態(tài)代碼塊,然后才執(zhí)行主函數(shù)的。
2、靜態(tài)代碼塊其實就是給類初始化的,而構造代碼塊是給對象初始化的。
3、靜態(tài)代碼塊中的變量是局部變量,與普通函數(shù)中的局部變量性質沒有區(qū)別。
4、一個類中可以有多個靜態(tài)代碼塊。
5、對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構造器,它們的初始化順序依次是(靜態(tài)變量、靜態(tài)初始化塊)(變量、初始化塊)構造器。
靜態(tài)代碼塊是在類加載進jvm時類實例化之前運行的,比如業(yè)務場景有這種類初始化時需要加載許多資源,在運行實例化類的時候會影響程序響應時間,所以就在項目啟動的時候加載類的時候就初始化了.非靜態(tài)代碼塊是在類實例化的時候才會運行,所以靜態(tài)代碼塊的執(zhí)行一定在非靜態(tài)代碼塊執(zhí)行之前執(zhí)行.至于你上面的第一個問題要看具體業(yè)務場景和需求,賦值都可以實現(xiàn).第二個問題,可能是寫那句代碼的人要看程序加載后有沒有執(zhí)行那部分代碼而加上的,知道了靜態(tài)代碼塊和非靜態(tài)代碼塊的本質區(qū)別,為什么那么做和目的你就應該知道了.
本文題目:java類的非靜態(tài)代碼塊,java中static代碼塊
當前地址:http://chinadenli.net/article10/hddggo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、關鍵詞優(yōu)化、網(wǎng)站設計公司、動態(tài)網(wǎng)站、品牌網(wǎng)站建設、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)