大战熟女丰满人妻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ù)文檔推薦 >>
主站蜘蛛池模板: 久草精品在线观看 | 国产亚洲精品一区二区在线播放 | 中国护士一级毛片免费版本 | 黄色网址亚洲 | 久久久久久九九 | 九九re | 国产精品婷婷久久爽一下 | swag国产在线 | 手机看片欧美 | 亚洲精品国产一区二区图片欧美 | 最近更新在线中文字幕一页 | 色综合久久天天影视网 | 97视频在线看 | 国产尤物在线播放 | 青青青手机版视频在线观看 | 日韩在线视频在线 | 欧美成人高清视频 | 欧美在线观看视频 | 91福利在线看| 看全色黄大色大片免费视频 | 欧美最猛性xxxxx短视频 | 欧美精品大片 | 黄色福利在线观看 | 久久久国产99久久国产一 | 久久久久香蕉 | 伊人国产视频 | 国产三级在线精品男人的天堂 | 欧美成人免费大片888 | 青久草视频| 国产福利视频一区二区微拍 | 中文字幕天天躁夜夜狠狠综合 | 国产免费无遮挡精品视频 | 国产精品爱久久久久久久9999 | 久久精品卫校国产小美女 | 国产成年人网站 | 美女很黄很黄免费的 | 久久精品亚洲欧美日韩久久 | 99热自拍 | 中文字幕一区二区在线视频 | 国产精品欧美亚洲韩国日本不卡 | 国产成人亚洲精品 |