JavaSE 第二次學習隨筆(關於記憶體的小題)

来源:https://www.cnblogs.com/chinashenkai/archive/2018/08/09/9451893.html
-Advertisement-
Play Games

class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); } } p... ...


	class HelloA {
		public HelloA() {
			System.out.println("HelloA");
		}

		{
			System.out.println("I'm A class");
		}

		static {
			System.out.println("static A");
		}

	}

	public class HelloB extends HelloA {
		public HelloB() {// 優先調用父類的構造方法
			System.out.println("HelloB");
		}

		{
			System.out.println("I'm B class");
		}
		static {
			System.out.println("static B");
		}

		public static void main(String[] args) {
			new HelloB();
			new Dervied();
		}

	}



	class Dervied extends Base {  
		private String name = "dervied";
		public Dervied() {
			tellName();
			printName();
		}
		
		public void tellName() {
			System.out.println("Dervied tell name: " + name);
		}
		
		public void printName() {
			System.out.println("Dervied print name: " + name);
		}

	//    public static void main(String[] args){ 
	//        //1.執行父類的構造方法  2.給自己的成員變數賦值   3。調用構造方法中的調用的方法    多態
	//    }
	}

	class Base { 
		private String name = "base";
		public Base() {
			tellName();
			printName();
		} 
		public void tellName() {
			System.out.println("Base tell name: " + name);
		} 
		public void printName() {
			System.out.println("Base print name: " + name);
		}
	}

	輸出:
	static A
	static B
	I'm A class
	HelloA
	I'm B class
	HelloB
	Dervied tell name: null
	Dervied print name: null
	Dervied tell name: dervied
	Dervied print name: dervied
	
	1, 原因, 類載入時發現B.class 還有父類, 好先去載入 A.class
	眾所周知 static 塊 是在.class 里的其執行的比main優先順序更高, 所以先執行父類的static 方法, 好 然後繼續回去載入B.class 的方法 又遇到個static 塊,
	ok執行它, 終於進 main() 了, new HelloB() ,額等等, 它裡邊隱藏了一部分代碼 : 自動調用的 super(), 好的...先去執行父類的初始化... 執行父類的實例代碼塊,
	終於輪到自己了,,,執行自己的實例代碼塊, ok 執行 自身的構造方法 -_-|||
	2, 原因, 引用《瘋狂Java講義》中的一段話。因為Java里的方法不能獨立存在,它必須屬於一個類或一個對象,因此方法也不能直接像函數那樣被獨立執行,執行方法時必須使用類或對象作為調用者,即所有的方法都必須使用“類.方法”或“對象.方法”的形式來調用。這裡可能產生一個問題:同一個類里不同方法之間相互調用時,不就可以直接調用嗎?這裡需要指出的是:同一個類的一個方法調用另一個方法時,如果被調用方法是普通方法,則預設使用this作為調用者;如果被調用方法時靜態方法,則預設使用類作為調用者。也就是說錶面上看起來某些方法可以被獨立執行,但實際上還是使用this或類來作為調用者。
	那麼這不就和多態似的了嗎 this.tellName();this.printName();....由於初始化父類時對兩個變數還沒賦值(執行super()時,這時的name時被子類覆蓋的, 子類的name還沒初始化呢, 接下來開始執行執行sysout, 然後子類初始化, 初始化變數~, 執行sysout)

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 SqlSession是Mybatis最重要的構建之一,可以簡單的認為Mybatis一系列的配置目的是生成類似 JDBC生成的Connection對象的SqlSession對象,這樣才能與資料庫開啟“溝通”,通過SqlSession可以實現增刪改查(當然現在更加推薦是使用Mapper介面形式), ...
  • 前面寫過關於傅里葉演算法的應用例子。 《基於傅里葉變換的音頻重採樣演算法 (附完整c代碼)》 當然也就是舉個例子,主要是學習傅里葉變換。 這個重採樣思路還有點瑕疵, 稍微改一下,就可以支持多通道,以及提升性能。 當然思路很簡單,就是切分,合併。 留個作業哈。 本文不講過多的演算法思路,傅里葉變換的各種變種 ...
  • 註: Nginx版本必須大於等於1.9,linux我使用的是7.0版本,記得關閉防火牆 開始正文: 這裡只提一下兩個比較會出錯的配置,consul,upsync,PCRE庫,SSL庫,ZLIB庫的配置網上很多不一一詳解(我是在/usr/local中配置的) Nginx的配置: cd /usr/loc ...
  • 先來看看這個關鍵字是什麼意思:volatile [ˈvɒlətaɪl] adj. 易變的,不穩定的; 從翻譯上來看,volatile表示這個關鍵字是極易發生改變的。volatile是java語言中,最輕量級的併發同步機制。這個關鍵字有如下兩個作用:1、任何對volatile變數的修改,java中的其 ...
  • 資料庫的配置 1 django預設支持sqlite,mysql, oracle,postgresql資料庫。 <1> sqlite django預設使用sqlite的資料庫,預設自帶sqlite的資料庫驅動 , 引擎名稱:django.db.backends.sqlite3 <2> mysql 引擎 ...
  • RocketMQ是一款分散式、隊列模型的消息中間件,具有以下特點: 能夠保證嚴格的消息順序 提供豐富的消息拉取模式 高效的訂閱者水平擴展能力 實時的消息訂閱機制 億級消息堆積能力 RocketMQ網路部署特 (1)NameServer是一個幾乎無狀態的節點,可集群部署,節點之間無任何信息同步 (2) ...
  • 註:本面試題來源於網路,轉載自http://www.cnblogs.com/goodhacker/p/3366618.html。 1. (1)python下多線程的限制以及多進程中傳遞參數的方式 python多線程有個全局解釋器鎖(global interpreter lock),這個鎖的意思是任一 ...
  • Java代碼自動部署 【 ①Java代碼自動部署-總結簡介】 代碼部署是每一個軟體開發項目組都會有的一個流程,也是從開發環節到發佈功能必不可少的環節。對於Java開發者來說,Java代碼的發佈部署也是經常需要做的一件事,特別是互聯網公司。代碼的發佈上線關係到保證生產環境能夠正常啟動及功能是否能正常運 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...