黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 static{}靜態(tài)代碼塊與{}普通代碼塊之間的區(qū)別

static{}靜態(tài)代碼塊與{}普通代碼塊之間的區(qū)別

更新時(shí)間:2019-09-18 11:11:53 來源:動力節(jié)點(diǎn) 瀏覽2579次

 

今天動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家介紹“static{}靜態(tài)代碼塊與{}普通代碼塊之間的區(qū)別 ”,希望通過此文大家能夠熟悉static{}靜態(tài)代碼塊與{}普通代碼塊之間的區(qū)別 ,下面就隨小編一起來了解一下static{}靜態(tài)代碼塊與{}普通代碼塊之間的區(qū)別是什么?


timg (3).jpg


先看一個(gè)例子:


//class A 

package com.my.test;


class A {


    static {

        System.out.println("A1:父類靜態(tài)代碼區(qū)域");

    }


    {

        System.out.println("A2:父類非靜態(tài)代碼區(qū)域");

    }


    public A() {

        System.out.println("A3:父類構(gòu)造器");

    }

}


//class B


package com.my.test;


public class B extends A {


    static {

        System.out.println("B1:子類靜態(tài)代碼區(qū)域");

    }


    {

        System.out.println("B2:子類非靜態(tài)代碼區(qū)域");

    }


    public B() {

        System.out.println("B3:子類構(gòu)造器");

    }

}


// 測試類

package com.my.test;


public class Test {

    public static void main(String[] args) {

        B b1 = new B();

        System.out.println("====");

        B b2 = new B();

    }

}


  運(yùn)行結(jié)果:


  A1:父類靜態(tài)代碼區(qū)域


  B1:子類靜態(tài)代碼區(qū)域


  A2:父類非靜態(tài)代碼區(qū)域


  A3:父類構(gòu)造器


  B2:子類非靜態(tài)代碼區(qū)域


  B3:子類構(gòu)造器


  ====


  A2:父類非靜態(tài)代碼區(qū)域


  A3:父類構(gòu)造器


  B2:子類非靜態(tài)代碼區(qū)域


  B3:子類構(gòu)造器

  

  區(qū)別:


  靜態(tài)代碼塊,在虛擬機(jī)加載類的時(shí)候就會加載執(zhí)行,而且只執(zhí)行一次;


  非靜態(tài)代碼塊,在創(chuàng)建對象的時(shí)候(即new一個(gè)對象的時(shí)候)執(zhí)行,每次創(chuàng)建對象都會執(zhí)行一次


  一個(gè)程序可以有多個(gè)靜態(tài)非靜態(tài)代碼區(qū)域。



  static{}(靜態(tài)代碼塊)與{}(非靜態(tài)代碼塊)的異同點(diǎn)


  相同點(diǎn):


(1)都是在JVM加載類時(shí)且在構(gòu)造方法執(zhí)行之前執(zhí)行,在類中都可以定義多個(gè),


  (2)一般在代碼塊中對一些static變量進(jìn)行賦值。.


  (3)另外static塊中只能使用static修飾的屬性。


  (4)程序中的static{}塊只是為了加載properties文件信息,這個(gè)加載只會被加載一次。


  不同點(diǎn):


(1)靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行(靜態(tài)代碼塊—>非靜態(tài)代碼塊—>構(gòu)造方法)。


  (2)靜態(tài)代碼塊只在第一次new執(zhí)行一次,之后不再執(zhí)行,而非靜態(tài)代碼塊在每new


  (3)一次就執(zhí)行一次。非靜態(tài)代碼塊可在普通方法中定義(不過作用不大);而靜態(tài)代碼塊不行。


      例:


//普通類

publicclass PuTong {

    public PuTong(){

        System.out.print("默認(rèn)構(gòu)造方法!-->");

    }

    

    //非靜態(tài)代碼塊

    {

        System.out.print("非靜態(tài)代碼塊!-->");

    }

    

    //靜態(tài)代碼塊

    static{

        System.out.print("靜態(tài)代碼塊!-->");

    }

    

    publicstaticvoid test(){

        {

            System.out.println("普通方法中的代碼塊!");

        }

    }

}


//測試類

publicclass TestClass {

    

    /**

     * 區(qū)別兩次new靜態(tài)與非靜態(tài)代碼塊執(zhí)行情況

     */

    publicstaticvoid main(String[] args) {

        PuTong c1 = new PuTong();

        c1.test();

        

        PuTong c2 = new PuTong();

        c2.test();

    }

}


/*

運(yùn)行輸出結(jié)果是:

靜態(tài)代碼塊!-->非靜態(tài)代碼塊!-->默認(rèn)構(gòu)造方法!-->普通方法中的代碼塊!

非靜態(tài)代碼塊!-->默認(rèn)構(gòu)造方法!-->普通方法中的代碼塊!

*/


  一般情況下,如果有些代碼必須在項(xiàng)目啟動的時(shí)候就執(zhí)行的時(shí)候,需要使用靜態(tài)代碼塊,這種代碼是主動執(zhí)行的;需要在項(xiàng)目啟動的時(shí)候就初始化,在不創(chuàng)建對象的情況下,其他程序來調(diào)用的時(shí)候,需要使用靜態(tài)方法,這種代碼是被動執(zhí)行的。


  靜態(tài)代碼塊和靜態(tài)方法的區(qū)別


靜態(tài)代碼塊是自動執(zhí)行的;


  靜態(tài)方法是被調(diào)用的時(shí)候才執(zhí)行的.


  靜態(tài)代碼塊和靜態(tài)方法的作用:


靜態(tài)代碼塊可用來初始化一些項(xiàng)目最常用的變量或?qū)ο?靜態(tài)方法可用作不創(chuàng)建對象也可能需要執(zhí)行的代碼.



  1、靜態(tài)代碼塊


  在類中,可以將某一塊代碼聲明為靜態(tài)的,這樣的程序塊叫靜態(tài)初始化段。靜態(tài)代碼塊的一般形式如下:


static {

  語句序列

}


  靜態(tài)代碼塊只能定義在類里面,它獨(dú)立于任何方法,不能定義在方法里面。


  靜態(tài)代碼塊里面的變量都是局部變量,只在本塊內(nèi)有效。


  靜態(tài)代碼塊會在類被加載時(shí)自動執(zhí)行,而無論加載者是JVM還是其他的類。


  一個(gè)類中允許定義多個(gè)靜態(tài)代碼塊,執(zhí)行的順序根據(jù)定義的順序進(jìn)行。


  靜態(tài)代碼塊只能訪問類的靜態(tài)成員,而不允許訪問實(shí)例成員。


    【例1】靜態(tài)代碼塊運(yùn)行示例:


//定義一個(gè)普通的main()方法

public static void main(String args[]){

System.out.println("This is main method.");  

}

//定義一個(gè)靜態(tài)代碼塊

static{

System.out.println("This is static block.");

int stVar = 0;   //這是一個(gè)局部變量,只在本塊內(nèi)有效

}

}


  編譯通過后,用java命令加載本程序,會得到如下輸出:


This is static block.

This is main method.


從以上輸出結(jié)果中可以看出,靜態(tài)代碼塊甚至在main方法之前就被執(zhí)行。在main()方法中可以完成的任務(wù)在靜態(tài)代碼塊中都可以完成。但是二者在執(zhí)行上仍然有一些區(qū)別,請看下例。



  【例2】靜態(tài)代碼塊和main()方法的區(qū)別。


  這里仍然使用【例1】中的staticBlock類,然后新定義一個(gè)類來使用它。


public class useStaticBolck{

public static void main(String args[]){

new staticBlock();  //創(chuàng)建一個(gè)staticBlock的對象

}

}


  本例其實(shí)可以概括成一句話:靜態(tài)方法只能訪問靜態(tài)成員,實(shí)例方法可以訪問靜態(tài)和實(shí)例成員。之所以不允許靜態(tài)方法訪問實(shí)例成員變量,是因?yàn)閷?shí)例成員變量是屬于某個(gè)對象的,而靜態(tài)方法在執(zhí)行時(shí),并不一定存在對象。同樣,因?yàn)閷?shí)例方法可以訪問實(shí)例成員變量,如果允許靜態(tài)方法調(diào)用實(shí)例方法,將間接地允許它使用實(shí)例成員變量,所以它也不能調(diào)用實(shí)例方法。基于同樣的道理,靜態(tài)方法中也不能使用關(guān)鍵字this。


  main()方法是一個(gè)典型的靜態(tài)方法,它同樣遵循一般靜態(tài)方法的規(guī)則,所以它可以由系統(tǒng)在創(chuàng)建對象之前就調(diào)用。



public class hasError{

int insVar = 100;

public static void main(String args[]){

System.out.println("insVar = " + insVar);

}

}



  本程序沒有像以前的程序那樣,在創(chuàng)建對象時(shí)使用一個(gè)變量來接收對象,因?yàn)檫@個(gè)程序在后面并不需要用到這個(gè)變量。程序的輸出如下:


This is static block.



  這一次,只執(zhí)行了靜態(tài)代碼塊,main()方法在這種情況下是不會被執(zhí)行的。


  最后來寫一個(gè)復(fù)雜一點(diǎn)的靜態(tài)代碼塊的例子,它綜合體現(xiàn)了靜態(tài)代碼塊的使用方法。


  【例3】靜態(tài)代碼塊使用示例2:


public class staticBlock{

static int stMember = 100;    //定義靜態(tài)成員變量

public static void main(String args[]){

System.out.println("This is main method.");

}

//第一個(gè)靜態(tài)代碼塊

static{

System.out.println("This is first static block.");

stMember  = 200;      //訪問靜態(tài)成員變量

staticBlock oa = new staticBlock(); //創(chuàng)建對象

System.out.println("stMember = " + oa.stMember);

statFun();        //調(diào)用靜態(tài)方法

}

//定義一個(gè)靜態(tài)方法

static void statFun(){

System.out.println("This is a static method.");

//第二個(gè)靜態(tài)代碼塊

static{

System.out.println("This is second static block.");

}

}


timg.jpg


以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“static{}靜態(tài)代碼塊與{}普通代碼塊之間的區(qū)別 ”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關(guān)注動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。


相關(guān)免費(fèi)視頻教程推薦


java零基礎(chǔ)教程下載——static修飾代碼塊:http://www.ilovecolors.com.cn/xiazai/2617.html


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产成人毛片 | 日本三级香港三级人妇网站 | 全免费a级毛片免费毛视频 全免费毛片在线播放 | 又爽又黄又无遮挡的视频在线观看 | 天天看片天天爽_免费播放 天天看片夜夜爽 | 欧美八区| 一级毛毛片毛片毛片毛片在线看 | 精品女同一区二区三区在线观看 | 草久久免费视频 | 国产成人精品区在线观看 | 久久久久国产精品免费免费 | 草草视频免费观看 | tk挠脚心丝袜天堂网站免费控 | 国产成人综合网亚洲欧美在线 | 亚洲人欧洲日韩 | 亚洲综合成人网 | 997在线观看视频国产 | a亚洲欧美中文日韩在线v日本 | 日韩毛片网 | 高清不卡日本v在线二区 | 天天艹天天艹 | 爆操极品美女 | 国产成人夜间影院在线观看 | 天天做天天爱夜夜想毛片 | 中文字幕亚洲精品资源网 | 亚洲导航深夜福利 | 成人看片免费无限观看视频 | 成人免费毛片视频 | 欧美日韩精品在线视频 | 亚洲免费大片 | 中文字幕免费在线观看 | 黄色在线观看视频网站 | 亚洲乱亚洲乱妇13p 亚洲乱码尤物193yw在线播放 | 欧美成人精品不卡视频在线观看 | 国产在线观看黄色 | 500福利国产精品导航在线 | 精品一区二区三区中文 | 在线毛片免费 | 亚洲精品v欧美精品动漫精品 | 91精品成人免费国产片 | 欧美高清国产 |