欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java淺析代碼塊與構造塊及靜態(tài)塊三者之間的關系

 更新時間:2022年07月25日 09:15:28   作者:陳亦康  
所謂代碼塊是指用"{}"括起來的一段代碼,根據其位置和聲明的不同,可以分為普通代碼塊、構造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上synchronized關鍵字,則此代碼塊就成為同步代碼塊

普通代碼塊(本地代碼塊)

定義在方法里面用{ }括起來的代碼塊(凡是用{ }括起來都叫代碼塊,只是沒有細分),就是普通代碼塊,也叫本地代碼塊。(不多見,也不常用)

例如:

public class Test {
    public static void main(String[] args){
        {
            System.out.println("本地代碼塊!");    
        }
    }
}

構造塊(實例代碼塊)

實例代碼塊定義在類的內部,方法的外部,可以初始化實例的成員

例如:

class Student{
    //成員變量
    public String name;
    public int score;
    //類變量
    public static String classes = "火箭6班";
    //類方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正確
        System.out.println("類方法");
    }
    //成員方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //實例代碼塊
    {
        this.name = "jay";
        System.out.println("實例代碼塊!");
    }
}

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

靜態(tài)代碼塊定義在類的內部,方法的外部,可以初始化實例的成員

例如:

class Student{
    //成員變量
    public String name;
    public int score;
    //類變量
    public static String classes = "火箭6班";
    //類方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正確
        System.out.println("類方法");
    }
    //成員方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //實例代碼塊
    {
        System.out.println("實例代碼塊!");
    }
    //靜態(tài)代碼塊
    static{
        classes = "16班";
        System.out.println("靜態(tài)代碼塊!");
    }

他們之間有什么關系呢

例子

情況一:看如下代碼會執(zhí)行什么?

class Student{
    //成員變量
    public String name;
    public int score;
    //構造方法
    public Student(){
        System.out.println("構造方法!");
    }
    //類變量
    public static String classes = "火箭6班";
    //類方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正確
        System.out.println("類方法");
    }
    //成員方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //實例代碼塊
    {
        System.out.println("實例代碼塊!");
    }
    //靜態(tài)代碼塊
    static{
        System.out.println("靜態(tài)代碼塊!");
    }
}
public class Test {
    public static void main(String[] args){
        Student stu = new Student();
    }
}

情況一運行結果:

情況二:看如下代碼會執(zhí)行什么?

class Student{
    //成員變量
    public String name;
    public int score;
    //構造方法
    public Student(){
        System.out.println("構造方法!");
    }
    //類變量
    public static String classes = "火箭6班";
    //類方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正確
        System.out.println("類方法");
    }
    //成員方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //實例代碼塊
    {
        System.out.println("實例代碼塊!");
    }
    //靜態(tài)代碼塊
    static{
        System.out.println("靜態(tài)代碼塊!");
    }
}
public class Test {
    public static void main(String[] args){
        System.out.println(Student.classes);
    }
}

情況二運行結果:

分析

  • 他們執(zhí)行的順序是:靜態(tài)代碼塊 -> 實例代碼塊 -> 構造方法(不論代碼塊的位置在哪,都是這個順序!若有多個靜態(tài),看定義順序即可)
  • 只要加載了類,靜態(tài)代碼塊就會被執(zhí)行
  • 若沒有實例化對象只會執(zhí)行靜態(tài)的
  • 若有多個實例,須看定義順序
  • 如果沒有實例化對象,靜態(tài)代碼塊只會執(zhí)行一次

到此這篇關于Java淺析代碼塊與構造塊及靜態(tài)塊三者之間的關系的文章就介紹到這了,更多相關Java 代碼塊 構造塊 靜態(tài)塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解JAVA抓取網頁的圖片,JAVA利用正則表達式抓取網站圖片

    詳解JAVA抓取網頁的圖片,JAVA利用正則表達式抓取網站圖片

    這篇文章主要介紹了詳解JAVA抓取網頁的圖片,JAVA利用正則表達式抓取網站圖片,非常具有實用價值,需要的朋友可以參考下。
    2016-12-12
  • Java中的對稱加密詳解

    Java中的對稱加密詳解

    大家好,本篇文章主要講的是Java中的對稱加密詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 詳解Springboot如何通過注解實現接口防刷

    詳解Springboot如何通過注解實現接口防刷

    本文主要為大家介紹一種極簡潔、靈活通用接口防刷實現方式、通過在需要防刷的方法加上@Prevent?注解即可實現短信防刷,感興趣的可以了解一下
    2022-09-09
  • 關于Java8中map()和flatMap()的一些事

    關于Java8中map()和flatMap()的一些事

    這篇文章主要給大家介紹了關于Java8中map()和flatMap()的一些事,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 通俗講解JVM的類加載機制

    通俗講解JVM的類加載機制

    這篇文章主要介紹了JVM的類加載機制的相關資料,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09
  • Spring中@Async注解執(zhí)行異步任務的方法

    Spring中@Async注解執(zhí)行異步任務的方法

    在業(yè)務處理中,有些業(yè)務使用異步的方式更為合理,這篇文章主要介紹了Spring中@Async注解執(zhí)行異步任務的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 利用Redis實現延時處理的方法實例

    利用Redis實現延時處理的方法實例

    這篇文章主要給大家介紹了關于利用Redis實現延時處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Redis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 淺談Java并發(fā)編程中的線程

    淺談Java并發(fā)編程中的線程

    這篇文章主要介紹了淺談Java并發(fā)編程中的線程,操作系統運行一個程序,就會創(chuàng)建一個進程,在一個進程里可以創(chuàng)建多個線程,因此線程也叫做輕量級進程,需要的朋友可以參考下
    2023-08-08
  • Java之MultipartFile和File類型互轉方式

    Java之MultipartFile和File類型互轉方式

    這篇文章主要介紹了Java之MultipartFile和File類型互轉方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 學Java做項目需要學習的一些技能

    學Java做項目需要學習的一些技能

    這篇文章主要介紹了學Java做項目需要學習的一些技能,例如JavaSE、Servlet、JSP等,總結了他們中需要學習的東西,都是一些經驗總結,需要的朋友可以參考下
    2014-07-07

最新評論