1. 程式人生 > >Java中類程式碼載入的順序詳解

Java中類程式碼載入的順序詳解

<span style="font-size:14px;">class GrandPa
{
	public String grandpaName="grandpaName1";	//例項變數
	public static int grandpaAge = 1;	//靜態變數
	
	//靜態程式碼塊
	static
	{	
		System.out.println("in staticBlock:grandpaName can not  be visited"+" grandpaAge="+grandpaAge);
		System.out.println("this is grandpa's staticBlock");
		grandpaAge = 2;
	}

	//構造程式碼塊
	{	
		System.out.println("in struBlock:grandpaName="+grandpaName+" grandpaAge="+grandpaAge);
		System.out.println("this is grandpa's struBlock");
		grandpaName = "grandpaName3";
		grandpaAge = 3;
	}

	//建構函式
	public GrandPa(){
		System.out.println("in struFunction:grandpaName="+grandpaName+" grandpaAge="+grandpaAge);
		grandpaName = "grandpaName4";
		grandpaAge = 4;
	}

	//例項函式
	//例項函式不影響類載入流程,寫出來是為了檢視最終一些變數的值
	public void grandpaShow(){
		System.out.println("finally:"+grandpaName+" grandpaAge="+grandpaAge);
	}
}

class Father extends GrandPa
{
	public String fatherName="fatherName1";	//例項變數
	public static int fatherAge = 1;	//靜態變數
	
	//靜態程式碼塊
	static
	{	
		System.out.println("in staticBlock:fatherName can not  be visited"+" fatherAge="+fatherAge);
		System.out.println("this is father's staticBlock");
		fatherAge = 2;
	}

	//構造程式碼塊
	{	
		System.out.println("in struBlock:fatherName="+fatherName+" fatherAge="+fatherAge);
		System.out.println("this is father's struBlock");
		fatherName = "fatherName3";
		fatherAge = 3;
	}

	//建構函式
	public Father(){
		System.out.println("in struFunction:fatherName="+fatherName+" fatherAge="+fatherAge);
		fatherName = "fatherName4";
		fatherAge = 4;
	}

	//例項函式
	//例項函式不影響類載入流程,寫出來是為了檢視最終一些變數的值
	public void fatherShow(){
		System.out.println("finally:"+fatherName+" fatherAge="+fatherAge);
	}
}


class Son extends Father
{
	public String sonName="sonName1";	//例項變數
	public static int sonAge = 1;	//靜態變數
	
	//靜態程式碼塊
	static
	{	
		System.out.println("in staticBlock:sonName can not  be visited"+" sonAge="+sonAge);
		System.out.println("this is Son's staticBlock");
		sonAge = 2;
	}

	//構造程式碼塊
	{	
		System.out.println("in struBlock:sonName="+sonName+" sonAge="+sonAge);
		System.out.println("this is Son's struBlock");
		sonName = "sonName3";
		sonAge = 3;
	}

	//建構函式
	public Son(){
		System.out.println("in struFunction:sonName="+sonName+" sonAge="+sonAge);
		sonName = "sonName4";
		sonAge = 4;
	}

	//例項函式
	//例項函式不影響類載入流程,寫出來是為了檢視最終一些變數的值
	public void sonShow(){
		grandpaShow();
		fatherShow();
		System.out.println("finally:"+sonName+" sonAge="+sonAge);
	}

	//靜態函式
	//靜態函式沒必要寫,不影響類載入流程


	//主函式
	public static void main(String[] args){
		Son son = new Son();
		son.sonShow();
	}
}</span>
程式輸出結果如下圖:

相關推薦

Java程式碼載入順序

<span style="font-size:14px;">class GrandPa { public String grandpaName="grandpaName1"; //例項變數 public static int grandpaAge = 1; //靜態變數 //靜態程式碼塊

面試題--JAVA靜態塊、靜態變數載入順序

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

Java的異常和處理

stat 一個 局部變量 lose 出了 object sta tof .html 原文出處:代碼鋼琴家 簡介 程序運行時,發生的不被期望的事件,它阻止了程序按照程序員的預期正常執行,這就是異常。異常發生時,是任程序自生自滅,立刻退出終止,還是輸出錯誤給用戶?或者用C語

Java==和equals和區別+案例

兩個 布爾型 整數 返回 boolean 和equal clas 定義 true 一開始遇見==和equals我也是分不清,後來看了很多博客,收益匪淺, 擔心以後給忘了,所以寫下這個,以後復習可以用。 (有哪裏寫得不對的,希望可以留言幫忙改進,大家一起共同進步) 一、Jav

java==和equals的區別

字符 blog 的區別 代碼塊 數組 sss oss 兩種 內存劃分 分析前基礎了解: 一)JVM把內存劃分成兩種:一種是棧內存,一種是堆內存。   ①在函數中定義的一些基本類型的變量和對象的引用變量(變量名)都在函數的棧內存中分配。   ②當在一段代碼塊定義一個變量時

HTTP協議報文、工作原理及Java的HTTP通訊技術

一、web及網路基礎       1、HTTP的歷史            1.1、HTTP的概念:         &nb

自動載入方法

在瞭解這個函式之前先來看另一個函式:__autoload。 一、__autoload 這是一個自動載入函式,在PHP5中,當我們例項化一個未定義的類時,就會觸發此函式。看下面例子: printit.class.php <?php class PRINTIT { function do

Java 的異常和處理

原文出處: 程式碼鋼琴家 簡介 程式執行時,發生的不被期望的事件,它阻止了程式按照程式設計師的預期正常執行,這就是異常。異常發生時,是任程式自生自滅,立刻退出終止,還是輸出錯誤給使用者?或者用C語言風格:用函式返回值作為執行狀態?。 Java提供了更加優秀的

Spring Boot 配置載入順序

使用 Spring Boot 會涉及到各種各樣的配置,如開發、測試、線上就至少 3 套配置資訊了。Spring Boot 可以輕鬆的幫助我們使用相同的程式碼就能使開發、測試、線上環境使用不同的配置。 在 Spring Boot 裡面,可以使用以下幾種方式來載入配置。本章

Java的Iterable與Iterator

在Java中,我們可以對List集合進行如下幾種方式的遍歷: List<Integer> list = new ArrayList<>(); list.add(5); list.add(23); list.add(42); for (int i = 0; i < list.siz

Java的IO流的

在介紹IO流之前,需要首先給大家介紹一下File的使用,及一些常用的方法。 File類 :檔案和目錄路徑名的抽象表示形式。 通俗一點說,例項化File類的一個物件,其傳入的引數就是一個路徑名(可以是絕對路徑名,也可以是相對路徑名) 例:File  file=new   

java String 的equals方法

equals 方法的程式碼如下所示: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String)

Java I/O : Java的進位制

作者:李強強 上一篇,泥瓦匠基礎地講了下Java I/O : Bit Operation 位運算。這一講,泥瓦匠帶你走進Java中的進位制詳解。 一、引子 在Java世界裡,99%的工作都是處理這高層。那麼二進位制,位元組碼這些會在哪裡用到呢? 自問自答:在跨平臺的時候,就凸顯神功了。比如說檔

Java ( Iterator ) 迭代器 ( JDK8原始碼 )

Java集合框架的集合類,我們有時候稱之為容器。容器的種類有很多種,比如ArrayList、LinkedList、HashSet...,每種容器都有自己的特點,ArrayList底層維護的是一個數組;LinkedList是連結串列結構的;HashSet依賴的是雜湊表,每種容器都有自己特有的資料結構。

Java Cloneable 、Serializable 介面

Cloneable介面 clone:它允許在堆中克隆出一塊和原物件一樣的物件,並將這個物件的地址賦予新的引用。 Java 中 一個類要實現clone功能 必須實現 Cloneable介面,否則在呼叫 clone() 時會報 CloneNotSupported

JavaNullPointerException異常的原因以及解決方法

NullPointerException是當您嘗試使用指向記憶體中空位置的引用(null)時發生的異常,就好像它引用了一個物件一樣。 當我們宣告引用變數(即物件)時,實際上是在建立指向物件的指標。考慮以下程式碼,您可以在其中宣告基本型別的整型變數x: int x; x = 10; 在

JavacompareTo()方法比較字串

中心:String 是字串,它的比較用compareTo方法,它從第一位開始比較, 如果遇到不同的字元,則馬上返回這兩個字元的ascii值差值.返回值是int型別 1.當兩個比較的字串是英文且長度不等時, 1)長度短的與長度長的字元一樣,則返回的結果是兩個長度相減的值a="hello";b

【搞定Java併發程式設計】第22篇:Java的阻塞佇列 BlockingQueue

上一篇:Java併發容器之ConcurrentHashMap詳解 本文目錄: 1、阻塞佇列的基本概念 2、ArrayBlockingQueue 2.1、ArrayBlockingQueue的基本使用 2.2、ArrayBlockingQueue原理概要 2.3、ArrayBl

【搞定Java併發程式設計】第28篇:Java的執行緒池

上一篇:Java中的併發工具類之執行緒間交換資料的 Exchanger 本文目錄: 1、執行緒池的實現原理  2、執行緒池的使用 2.1、執行緒池的建立 2.2、向執行緒池提交任務 2.3、關閉執行緒池 2.4、合理地配置執行緒池 2.5、執行緒池的監控

java ClassLoader 的載入順序

原文引自:http://www.blogjava.net/lhulcn618/archive/2006/05/25/48230.html 當JVM(Java虛擬機器)啟動時,會形成由三個類載入器組成的初始類載入器層次結構: