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