舉例說明Java中代碼塊的執行順序

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

結論
??? 這里先把整理好的結論拋給大家,然后我在寫個程序來驗證我們的結論。在Java類被new的過程中,執行順序如下:

  • ??? 實現自身的靜態屬性和靜態代碼塊。(根據代碼出現的順序決定誰先執行)
  • ??? 實現自身的非靜態屬性和非靜態代碼塊。
  • ??? 執行自身的構造函數。

??? 在實現繼承的類被new的過程中,初始化執行順序如下:

  • ??? 實現父類的公共靜態屬性和靜態塊級代碼。
  • ??? 實現自身的靜態屬性和靜態塊級代碼。
  • ??? 實現父類的非靜態屬性和非靜態代碼塊。
  • ??? 執行父類的構造函數。
  • ??? 實現自身的非靜態屬性和非靜態代碼塊。
  • ??? 執行自身的構造函數。

??? 這里需要簡單的介紹一下靜態代碼塊和非靜態代碼塊。
1. 靜態代碼塊:

??? static {??
??? }?

2. 非靜態代碼塊

??? {??
??? }?

??? 靜態代碼塊和非靜態代碼塊的異同點如下:

  • ??? 相同點:都是JVM加載類時且在構造函數執行之前執行,在類中都可以定義多個,一般在代碼塊中對一些static變量進行賦值。
  • ??? 不同點:靜態代碼塊在非靜態代碼塊之前執行(靜態代碼塊 > 非靜態代碼塊)。靜態代碼塊只在第一次new時執行一次,之后不再執行。而非靜態代碼塊每new一次就執行一次。


驗證
??? 對于結論的最好驗證就是寫出代碼來進行結果證明。首先,來看一下無繼承的類初始化時的執行順序,代碼如下:

?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
publicclass InitOderTest {
??publicstatic String STATIC_FIELD = "靜態屬性";
????
??// 靜態塊
??static{
????System.out.println(STATIC_FIELD);
????System.out.println("靜態代碼塊");
??}
????
??publicString field = "非靜態屬性";
????
??// 非靜態塊
??{
????System.out.println(field);
????System.out.println("非靜態代碼塊");
??}
??
??publicInitOderTest() {
????System.out.println("無參構造函數");
??}
????
??publicstatic void main(String[] args) {
????InitOderTest test = newInitOderTest();
??}
}

??? 執行結果:

  • ??? 靜態屬性?
  • ??? 靜態代碼塊?
  • ??? 非靜態屬性?
  • ??? 非靜態代碼塊?
  • ??? 無參構造函數?

??? 接下來,我們驗證一下,當Java類實現繼承后,執行順序是否和我們的結論吻合。測試代碼如下:

???

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
classParentTest {
???publicstatic String PARENT_STATIC_FIELD = "父類-靜態屬性";
???
???// 父類-靜態塊
???static{
?????System.out.println(PARENT_STATIC_FIELD);
?????System.out.println("父類-靜態代碼塊");
???}
???
???publicstatic String parentField = "父類-非靜態屬性";
???
???// 父類-非靜態塊
???{
?????System.out.println(parentField);
?????System.out.println("父類-非靜態代碼塊");
???}
???
???publicParentTest() {
?????System.out.println("父類—無參構造函數");
???}
?}
???
?publicclass InitOderTest extendsParentTest {
???publicstatic String STATIC_FIELD = "靜態屬性";
???
???// 靜態塊
???static{
?????System.out.println(STATIC_FIELD);
?????System.out.println("靜態代碼塊");
???}
???
???publicString field = "非靜態屬性";
???
???// 非靜態塊
???{
?????System.out.println(field);
?????System.out.println("非靜態代碼塊");
???}
???
???publicInitOderTest() {
?????System.out.println("無參構造函數");
???}
???
???publicstatic void main(String[] args) {
?????InitOderTest test = newInitOderTest();
???}
?}

??? 執行結果如下:

  • ??? 父類-靜態屬性?
  • ??? 父類-靜態代碼塊?
  • ??? 靜態屬性?
  • ??? 靜態代碼塊?
  • ??? 父類-非靜態屬性?
  • ??? 父類-非靜態代碼塊?
  • ??? 父類—無參構造函數?
  • ??? 非靜態屬性?
  • ??? 非靜態代碼塊?
  • ??? 無參構造函數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451245.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Google 正式開源 Jib ,幫助 Java 應用快速容器化

Google 本周宣布開源一款新的 Java 工具 Jib ,旨在讓開發者使用他們熟悉的工具更輕松地將 Java 應用程序容器化。在7月9日發布的博客文章中,Google 軟件工程師 Appu Goundan 和 Qingyang Chen 將 Jib 描述為一個容器鏡像構建器,旨在處理將 Ja…

“公敵”京東:眾同行將其拖入價格戰

倒京東語錄 當當網董事長李國慶: 京東的資金只能維持到8月至12月。當當網是賺一個花兩個,而京東則是賺一個花四個。 蘇寧電器董事長張近東: 我至今沒有看見過哪個企業能通過這種方式取得最后勝利。這種違背正常商業邏輯的做法&#xff0c…

跨域與跨域訪問

什么是跨域 跨域是指從一個域名的網頁去請求另一個域名的資源。比如從www.baidu.com 頁面去請求 www.google.com 的資源。跨域的嚴格一點的定義是:只要 協議,域名,端口有任何一個的不同,就被當作是跨域 為什么瀏覽器要限制跨域訪…

thymeleaf 使用javascript定義數組報錯

js中免不了的要用的數組,一維的二維的三維的 但是當用到thymeleaf作為模版時候會有一些坑,導致數組不能用 org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "{checkbox: true, fixed: true}, {field: origi…

解決:Failed to execute goal on project aopcore: Could not resolve dependencies for project com.cmos:

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、問題描述 maven工程 jar包無法下載,報錯如下 : [ERROR] Failed to execute goal on project aopcore: Cou…

從Xbox和Zune中學到的四門創業課

導讀:微軟前娛樂與設備部門總裁Robbie Bach領導他的團隊,實現了Xbox的暢銷。然而,他領導該部門推出的Zune音樂播放器,卻沒那么成功。從Robbie這兩個經歷中,我們們能學到什么?本文是Robbie自己的總結&#x…

服務容錯保護斷路器Hystrix之七:做到自動降級

從《高可用服務設計之二:Rate limiting 限流與降級》中的“自動降級”中,我們這邊將系統遇到“危險”時采取的整套應急方案和措施統一稱為降級或服務降級。想要幫助服務做到自動降級,需要先做到如下幾個步驟: 可配置的降級策略&am…

from表單提交和JSON區別

form表單是“鍵值對”的數據格式,例如: a1&b2&c3 而json格式則與之不同,如下: {"a":1,"b":2,"c":3} 傳遞的數據比較簡單,那么兩種方式基本上沒什么大區別(當然后臺接…

在一個數組中,如何確定所需元素在數組中的位置.

package wac.wev.LianXi; public class CiShu {public static void main(String[] args){//創建一個數組int[] arr {101,23,123,34,13};int y Yuan(arr,13);System.out.println(y);}//1)明確返回值:int//2)明確形式參數:int[] arr 和 int value(value表示所需元素)public stati…

Java實現Excel導入數據庫,數據庫中的數據導入到Excel

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 實現的功能: Java實現Excel導入數據庫,如果存在就更新數據庫中的數據導入到Excel1、添加jxl.jar mysql-connect…

FreeBSD 10 將使用 Clang 編譯器替換 GCC

來自 phoronix 的消息稱,根據 FreeBSD 2012 第一季度的狀態報告 顯示,來自 LLVM 的 Clang 編譯器將成為 FreeBSD 10 的默認 C/C 編譯器,廢棄使用 GPL 授權協議的 GCC,而 Clang 的授權協議是 BSD。 Clang 是一個 C 編寫、基于 L…

HashMap中數組初始化的秘密

2019獨角獸企業重金招聘Python工程師標準>>> 我們知道,在新建一個HashMap對象時,無論傳的initialCapacity參數值為多少,最總HashMap中數組的長度始終為2的n次方,代碼如下: static final int tableSizeFor(i…

PLSQL 安裝+配置( Oracle數據庫連接工具 )

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.找到免安裝版本 PLSQL 解壓到自己想放的位置 (比如 D:\ChengXu\PLSQL\PLSQL) 2.配置環境變量 : 系統變量…

什么是Nginx?為什么使用Nginx?

一、前言為毛要用nginx服務器代理,不直接用tomcat 7.0,還做多了一次接請求?這個是我想問的,公司的新項目是要用Nginxtomcat7jdk開發的,用戶命名可以直接訪問tomcat,為啥還要用Nginx?這貨是個啥玩…

遵循五大設計理念 打造出色設計師

與其他設計不同,網頁設計會隨著時間的改變而不斷改變著。因此,網頁設計師需要不斷的自我提升,了解最前沿的設計趨勢以便能夠設計出更加新穎的網站。 兩年前,網頁設計呈現出一片新的思維方式和新穎的設計趨勢使得該領域彰顯出一片…

shell符號

*: 通配符 *.c : c結尾的文件 *v : v結尾的文件 v* : v開頭的文件轉載于:https://www.cnblogs.com/runlgs/p/9685751.html

偽共享和緩存行填充,Java并發編程還能這么優化!

前言 關于偽共享的文章已經很多了,對于多線程編程來說,特別是多線程處理列表和數組的時候,要非常注意偽共享的問題。否則不僅無法發揮多線程的優勢,還可能比單線程性能還差。隨著JAVA版本的更新,再各個版本上減少偽共享…

mysql中like % %模糊查詢

1,%:表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。 比如 SELECT * FROM [user] WHERE u_name LIKE %三% 將會把u_name為“張三”,“張貓三…

Java中判斷字符串是否為數字的五種方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 推薦使用第二個方法,速度最快。 方法一:用JAVA自帶的函數 Java代碼 public static boolean isNumeric(String…

慕學在線網0.4_xadmin后臺管理

admin是基于Django開發的后臺管理框架,方便,快捷,而且簡單;   而xadmin就相當于admin的升級版,更加強大。    1、安裝xadmin(源碼安裝方式)  教程 PS: - 卸載pip安裝的xadminp…