大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

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

更新時間:2019-09-18 11:11:53 來源:動力節(jié)點 瀏覽2524次

 

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


timg (3).jpg


先看一個例子:


//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();

    }

}


  運行結(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)代碼塊,在虛擬機加載類的時候就會加載執(zhí)行,而且只執(zhí)行一次;


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


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



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


  相同點:


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


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


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


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


  不同點:


(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("默認構(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();

    }

}


/*

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

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

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

*/


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


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


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


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


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


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



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


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


static {

  語句序列

}


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


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


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


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


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


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


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

public static void main(String args[]){

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

}

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

static{

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

int stVar = 0;   //這是一個局部變量,只在本塊內(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類,然后新定義一個類來使用它。


public class useStaticBolck{

public static void main(String args[]){

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

}

}


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


  main()方法是一個典型的靜態(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)建對象時使用一個變量來接收對象,因為這個程序在后面并不需要用到這個變量。程序的輸出如下:


This is static block.



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


  最后來寫一個復雜一點的靜態(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.");

}

//第一個靜態(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)方法

}

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

static void statFun(){

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

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

static{

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

}

}


timg.jpg


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


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


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


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲乱码国产乱码精品精98 | 青青青国产在线手机免费观看 | 国产涩| 色在线视频观看 | 亚洲国产精品一区 | 国产区一区二 | 色综久久天天综合绕视看 | 亚洲精品欧洲精品 | 国产精品人成人免费国产 | 成人国内精品久久久久影院 | 一级一片免费播放 | 国产综合色在线视频区 | 99热久久只有精品99只有精品 | 国产剧情自拍 | 四虎影视永久免费观看地址 | 青青青国产精品手机在线观看 | 亚洲日本va中文字幕在线不卡 | 日本成人毛片 | 欧美成人在线免费 | 亚洲精品久久婷婷爱久久婷婷 | 2021国内精品久久久久影院 | 中文字幕在线精品 | 一区二区三区视频网站 | 国产精品 视频一区 二区三区 | 女孕学护士一级毛片 | 国产亚洲影院 | 亚洲手机看片 | 欧美精品国产一区二区三区 | 欧美一级看片a免费视频 | 欧美末成年videos在线观看 | 久草视频官网 | 国产精品免费观看网站 | 91粉嫩萝控精品福利网站 | 四虎精品视频在线永久免费观看 | 久久国产精品免费专区 | 高清国产一区 | 日韩小视频在线播放 | 天天天天躁天天天天碰 | 久久久久九九精品影院 | 久久青草国产免费观看 | 一七六九1769视频免费观看 |