1. 程式人生 > >java類載入以及靜態類部類

java類載入以及靜態類部類

1、屬性的載入以及初始化的問題

當要例項化一個類時,JVM會首先載入該類,並且在載入過程中檢查這個類是否有靜態屬性以及靜態程式碼塊,如果有,就按順序分配記憶體並初始化他們,並且只在類載入的過程中初始化一次。

對於構造程式碼塊,以及普通屬性,是在類例項化時進行的,並且每次例項化都會呼叫,並且構造程式碼塊先於構造方法執行(無論程式碼塊出現在構造方法前後,總是優先於構造方法)。

下面看這段程式碼:

首先JVM會載入這個類,通過斷點除錯發現當執行到靜態程式碼塊時,staticValue已經有值,這說明靜態屬性和靜態程式碼塊按順序執行;

這段程式碼的結果請看下圖:

如果把主方法的內容全部註釋掉,只留一個System.out.println("***********");可以發現結果為

通過以上結果可以很清晰的驗證屬性的載入順序。

2、static與final的區別

static屬性在載入時就已經分配記憶體,並且只分配一次,可以用於物件間共享屬性。

final定義的變數為常量,不能被改變,方法不能被覆蓋,類不能被繼承。

3、對於父類以及子類中的情況

會按照如下順序載入,1、父類中的靜態塊、靜態方法;2、子類中的靜態塊、靜態方法;3、父類的構造塊;4、父類的構造方法;5、子類的構造塊;6、子類的構造方法。

我們看如下程式碼:


對於在StaticIniBlockOrderTest類中例項化子類時,JVM首先會載入Parent類,並且同時給Parent類的靜態屬性分配記憶體和初始化、執行靜態程式碼塊;

其次,JVM會載入Child類,並對其進行與父類中相同的過程;

然後JVM會初始化父類,並按順序執行父類的構造程式碼塊與構造方法;

最後,JVM初始化子類,並執行構造程式碼塊,執行構造方法,完成例項化。

那麼輸出結果為:

相關推薦

java載入以及靜態部類

1、屬性的載入以及初始化的問題當要例項化一個類時,JVM會首先載入該類,並且在載入過程中檢查這個類是否有靜態屬性以及靜態程式碼塊,如果有,就按順序分配記憶體並初始化他們,並且只在類載入的過程中初始化一次。對於構造程式碼塊,以及普通屬性,是在類例項化時進行的,並且每次例項化都會

Java載入以及靜態部類的問題。

1、屬性的載入以及初始化的問題 當要例項化一個類時,JVM會首先載入該類,並且在載入過程中檢查這個類是否有靜態屬性以及靜態程式碼塊,如果有,就按順序分配記憶體並初始化他們,並且只在類載入的過程中初始化

Java載入以及靜態部類

1、屬性的載入以及初始化的問題 當要例項化一個類時,JVM會首先載入該類,並且在載入過程中檢查這個類是否有靜態屬性以及靜態程式碼塊,如果有,就按順序分配記憶體並初始化他們,並且只在類載入的過程中初始化一次。 對於構造程式碼塊,以及普通屬性,是在類例項化時進行的,並且每次例項化都會呼叫,並且構造程式碼塊

java靜態巢狀 或叫 靜態部類

一. 什麼是巢狀類及內部類?  可以在一個類的內部定義另一個類, 這種類稱為巢狀類(nested classes), 它有兩種型別: 靜態巢狀類和非靜態巢狀類。 靜態巢狀類使用很少, 最重要的是非靜態巢狀類, 也即是被稱作為內部類(inner). 巢狀類從JDK1.1開始引

利用java反射機制 讀取配置檔案 實現動態載入以及動態型別轉換

作者:54dabang 在spring的學習過程之中,我們可以看出通過配置檔案來動態管理bean物件的好處(鬆耦合 可以讓零散部分組成一個整體,而這些整體並不在意之間彼此的細節,從而達到了真正的物理上的疏散耦合,而非邏輯,有了IOC之後,我們可以讓SPRING充當各框架

java載入靜態變數、靜態方法與靜態程式碼塊詳解與初始化順序

我們知道java中類的生命週期為裝載、連線、初始化、使用和解除安裝五個過程,如下圖所示:1.載入     我們編寫一個java類的程式碼,經過編譯之後生成一個字尾名為.class的檔案,java虛擬機器就能識別這種檔案。java的生命週期就是class檔案從載入到消亡的過程。

java什麼時候使用靜態以及靜態的特點

這裡的靜態,指以static關鍵字修飾的,包括類,方法,塊,欄位。非靜態,指沒有用static 修飾的。靜態有一些特點:1.全域性唯一,任何一次的修改都是全域性性的影響2.只加載一次,優先於非靜態3.使用方式上不依賴於例項物件。4.生命週期屬於類級別,從JVM 載入開始到JV

JAVA 特征以及基本、抽象、接口

抽象 類的繼承 網站 {} 類的定義 關鍵字 說明 實現 string   Java是一個面向對象的語言,java面向對象一般有三大特征:封裝、繼承、多態。   封裝:就是把一些屬性和方法封裝到一個類裏。   繼承:就如子類繼承父類的一些屬性和方法。   多態:就如一個父類

載入時獲取絕對路徑(靜態程式碼塊獲取絕對路徑)

    發生的情況: 線上專案CFCA簽章需要一個類似安全證書檔案路徑,在本地只需要獲取弄個靜態變數path="D:/*******"就可以,但是線上就需要從專案路徑下找到這個安全證書的位置.用下面的方法會報空指標異常    &

Java載入器1.載入器概述

類載入器概述 一、類的載入 (1)類的載入 當Java程式要使用某個類時,如果該類還未被載入到記憶體中,則系統會通過載入、連線、初始化三步來實現對這個類進行初始化。 載入:就是指將類的cla

python例項方法、方法以及靜態方法

不多說,直接上程式碼示例講解。 下面三個方法一次為:示例方法、類放大、靜態方法。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- class Kls(object): def foo(self, x):

java動態載入指定的或者jar包反射呼叫其方法-涉及其他jar中的就報ClassNotFound問題分析及解決思路

       在這篇博文中java動態載入指定的類或者jar包反射呼叫其方法,介紹動態載入指定的類,當時我是拿URLClassLoader介紹的,當然可以自定義一個ClassLoader重寫對應的方

Class 載入器,內部類載入實驗

最近實驗通過jdk編譯後的Class多出一個內部類class檔案,美元$符號的class檔案,如A.class ,A$B.class,載入A.class總是報錯。 除了載入內部類方法,還有就是把class檔案打包成jar,通過自定義URLClassLoader  載入jar

jvm之java載入機制和載入器(ClassLoader)的詳解

     當程式主動使用某個類時,如果該類還未被載入到記憶體中,則JVM會通過載入、連線、初始化3個步驟來對該類進行初始化。如果沒有意外,JVM將會連續完成3個步驟,所以有時也把這個3個步驟統稱為類載入或類初始化。                             

Java--利用介面以及抽象解決銀行問題。

/* 02.*煙臺大學計算機學院學生 03.*All right reserved. 04.*檔名稱*煙臺大學計算機學院學生 05.*All right reserved. 06.*檔名稱:抽象基類 07.*作者:王洪海 08.*完成日期:2014年11月4

Java虛擬機器-載入器和載入過程

類載入器 java.lang.ClassLoader類及其子類可以讓java程式碼動態地載入到JVM中。每一個類都有載入它的ClassLoader的引用。每一個類載入器類都有一個載入它的父類載入器,類載入器的頂端稱為啟動類載入器(Bootstrap Class

Java原始碼編譯機制、載入機制、執行機制

----------------------------------------------------------------------------------------------------------------- Java程式碼編譯和執行的整個過程包含了以下三

jvm 靜態及非靜態的變數,方法載入順序

  2 class data{  3         private static final data mInstance = new data();  4         private static int mx = 0;  5         private dat

Java 載入之匿名和主相互依賴問題

Qestion /** * ClassInitializedOrder for : Java Classload Order Test * * @author <a href="mailto:[email protected]">Isaac.Zhang | 若

推薦一款IDEA神器!一鍵檢視Java位元組碼以及其他資訊

由於後面要分享的一篇文章中用到了這篇文章要推薦的一個外掛,所以這裡分享一下。非常實用!你會愛上它的! ![](https://img2020.cnblogs.com/other/1843652/202010/1843652-20201013195000028-149190655.png) **開始推薦 I