1. 程式人生 > >java中靜態初始化塊,例項初始化塊,建構函式區別

java中靜態初始化塊,例項初始化塊,建構函式區別

   
public class People
{
    public static int num=0;//靜態變數
    String name;
    static//靜態初始化塊
    {
    	System.out.println(num+":靜態初始化塊");
    }
    {//例項初始化塊
    	System.out.println(num+":例項初始化塊");
    }
    public People(String name)
    {
    	System.out.println(num+":建構函式初始化");
    	this.name=name;
    	num++;
    }
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
        People people=new People("lip");
        People people2=new People("xiaoli");
	}


}

執行效果:

 

   new兩個例項,從執行結果可以看出,靜態變數和靜態初始化塊都是在類載入到系統時,載入到系統中,靜態初始化塊只執行一次,例項初始化塊和建構函式都是執行兩次,也就是說,有一個物件就執行一次例項初始化塊和建構函式。 三個的執行順序也顯而易見:靜態初始化塊 -例項初始化塊- 建構函式 

     在eclipse中開啟編譯的People.class如下圖所示:

0 iconst_0 這個是將靜態變數載入到記憶體中

20 ldc <String ":靜態初始化塊"> [32] 執行靜態初始化塊,只加載一次到記憶體

相關推薦

Java靜態(static)成員何時才會初始

先談static static方法就是沒有this的方法。在static方法的內部不能呼叫非靜態方法,反過來倒是可以的,而且可以在沒有建立任何物件的前提下,僅僅通過類本身來呼叫static方法。

java靜態初始例項初始建構函式區別

   public class People { public static int num=0;//靜態變數 String name; static//靜態初始化塊 { System.out.println(num+":靜態初始化

Java靜態成員變數靜態程式碼靜態內部類何時被初始

關於這個問題,本文不扯理論,直接上程式碼,通過結果來驗證結論,廢話少說,測試程式碼如下: public class StaticTest { public static StaticMember staticMember = new Static

Java父類與子類的普通程式碼構造程式碼靜態程式碼 初始

//示例程式碼: public class HelloB extends HelloA{ public HelloB(){ System.out.println("子類構造方法"); }

java靜態變數靜態程式碼靜態方法例項變數匿名程式碼的載入順序

1. java中靜態變數,靜態程式碼塊,靜態方法,例項變數,匿名程式碼塊 在Java中,使用{}括起來的程式碼稱為程式碼塊,程式碼塊可以分為以下四種: (1)普通程式碼塊:就是類中方法的方法體 public void xxx(){ //code }

Java靜態初始例項初始以及構造方法

首先有三個概念需要了解: 一.靜態初始化:是指執行靜態初始化塊裡面的內容。 二.例項初始化:是指執行例項初始化塊裡面的內容。 三.構造方法:一個名稱跟類的名稱一樣的方法,特殊在於不帶返回值。 我們先來看一段程式結果:package com; class Book{

java靜態初始例項初始

public class Demo1 { public Demo1() { System.out.println("父類構造器"); } static{ System.out.println("父類靜態初始化塊"); } { System.out.pr

java靜態代碼(static{...})局部代碼(方法{...})構造代碼(類{...})區別

一個 什麽 控制 class 加載 我們 所有 變量 統一初始化 1、局部代碼塊:   格式:在方法中{局部代碼塊執行語句}   局部代碼塊,又叫普通代碼塊。它是作用在方法中的代碼塊。   作用:是控制變量的生命周期。   在程序中當我們定義完成一個局部變量x之後,並且在接

java靜態變數靜態方法靜態程式碼構造程式碼構造方法...執行順序

public class TestExeOrder { public TestExeOrder(){ System.out.println("類的構造方法執行了..."); } { System.out.println("構造程式碼塊執行了

Java靜態、非靜態程式碼 無參、有參構造方法執行順序

基本概念 1、靜態程式碼塊和非靜態程式碼塊: 相同點:都是JVM載入類時且在建構函式執行之前執行,在類中都可以定義多個,一般在程式碼塊中對一些static變數進行賦值。 不同點:靜態程式碼塊在非靜態程式碼塊之前執行。靜態程式碼塊只在第一次new時執行一次

Java靜態變數和非靜態變數的初始順序

  先看下面的程式: package c05.net; class Bowl {Bowl(int marker) {System.out.println("Bowl(" + marker + ")");} void f1() {System.out.println("Ok")

java靜態代碼的用法—— static用法詳解

super關鍵字 了解 裝載 static關鍵字 super 屬於 註意 lock 自動 (一)java 靜態代碼塊 靜態方法區別一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的

java 靜態的作用

(一)java 靜態程式碼塊 靜態方法區別 一般情況下,如果有些程式碼必須在專案啟動的時候就執行的時候,需要使用靜態程式碼塊,這種程式碼是主動執行的;需要在專案啟動的時候就初始化,在不建立物件的情況下,其他程式來呼叫的時候,需要使用靜態方法,這種程式碼是被動執行的. 靜態方法在類載入的時候 就已經載

淺析java靜態方法靜態方法和構造方法的執行順序問題

https://blog.csdn.net/qq_42401622/article/details/81190406 對於java中的靜態方法,非靜態方法和構造方法的理解: 靜態方法是隨著的java中虛擬機器的類的載入而載入,是跟隨繫結在一起的。 public class Main{ s

java父類宣告子類例項

問題: 1、比如兩個類父類:Person 子類 Student extends Person在使用時候,這樣寫:Person person=null; //宣告物件person=new Student(); //建立物件這樣看來 宣告的時候,是父類,而在產生物件的時候,實際的物件是子類。怎麼理解

java靜態程式碼、構造程式碼、構造方法、main函式的執行順序?

靜態程式碼塊:在類被載入的時候就運行了,且只執行一次。static{} 構造程式碼塊:在建立物件時被呼叫,每次建立物件都會呼叫一次。比靜態程式碼塊少了static。{} 構造方法:用於建立物件時定義初始化的狀態。建構函式不能直接呼叫,必須通過new運算子在建立物件時才會自動呼叫,一般方法是在程式

java靜態代碼、構造代碼、構造方法、main函數的執行順序?

style 狀態 構造代碼塊 方法 構造函數 java 順序 png 執行順序 靜態代碼塊:在類被加載的時候就運行了,且只運行一次。static{} 構造代碼塊:在創建對象時被調用,每次創建對象都會調用一次。比靜態代碼塊少了static。{} 構造方法:用於創建對象時定義

面試題--JAVA靜態靜態變數載入順序詳解

public class test { //1.第一步,準備載入類 public static void main(String[] args)

java靜態的作用

(一)java 靜態程式碼塊 靜態方法區別 一般情況下,如果有些程式碼必須在專案啟動的時候就執行的時候,需要使用靜態程式碼塊,這種程式碼是主動執行的;需要在專案啟動的時候就初始化,在不建立物件的情況下,其他程式來呼叫的時候,需要使用靜態方法,這種程式碼是被動執行

java靜態程式碼靜態方法、static關鍵字詳解

最近在準備面試,複習java基礎知識,對java中和static關鍵字相關的靜態方法、靜態程式碼塊、非靜態程式碼塊、靜態成員變數的用法進行了詳細的總結。 1. 靜態成員變數 宣告為static關鍵詞修飾的變數叫做靜態成員變數,也叫作全域性變數。被static修飾的成員變數和