簡體   English   中英

控制台引用變量如何引用其他類方法

[英]How Console reference variable refers to some other class method

我在無法為Console類創建新實例的地方感到震驚。 因此,我獲取了jdk的源代碼,然后對其進行了研究。 然后我得到了清除,它被聲明為“公共最終課程控制台........” ...因此,我知道最終課程無法實例化。 但這不是我真正的疑問。 在SCJP書中,我遇到了一段代碼,告訴我Console c = System.console()

在這里,我們不能為控制台類創建新的實例,因此創建一個引用變量c。 那那個System.console實際上是什么? 在書中被告知為

    Keep in mind that it's possible for your Java program to be running in an environment that doesn't have access to a console object, so be sure that your invocation of System.console() actually returns a valid console reference and not null.

因此,我進入查找System.console()的源代碼。

我碰巧看到System是最終類,而console()是其中的靜態方法。

因此,控制台引用對象如何在系統類中引用該控制台方法。兩者之間的聯系是什么。 我想到了一個多態參考。 但這不是因為它沒有通過IS-A測試。 因此,請對此詳細說明。

希望我的問題清楚。 提前致謝。

最終課程無法實例化

錯了, final類不能被子類化。 如果其構造函數可見,則可以使用new運算符對其進行實例化。 我猜Console類有private構造函數。 抽象類無法實例化。 參見JLS 8.1.1.2

如果一個類的定義完整並且不需要或不需要子類,則可以將其聲明為final。

如果最終類的名稱出現在另一個類聲明的extends子句(第8.1.4節)中,則是編譯時錯誤。 這意味着最終類不能有任何子類。

System.console()

返回與當前Java虛擬機關聯的唯一Console對象(如果有)。

虛擬機是否具有控制台取決於底層平台以及虛擬機的調用方式。 如果從交互式命令行啟動虛擬機而不重定向標准輸入和輸出流,則其控制台將存在,並且通常會連接到鍵盤和從中啟動虛擬機的顯示器。 如果虛擬機是自動啟動的(例如由后台作業調度程序啟動),則該虛擬機通常將沒有控制台。

如果此虛擬機具有控制台,則由該類的唯一實例表示,可以通過調用System.console()方法獲得該實例

如果沒有控制台設備可用,則對該方法的調用將返回null。

console()是某種工廠方法,它為您提供了與當前JVM相關聯的Console對象。 System類具有運行它的JVM的知識,並且是將Console對象還給您的理想選擇。

Console c = System.console();

System.console()向我們提供了對Console對象的引用,並且您正在將對象引用分配給變量c 這樣,您可以使用該引用變量c訪問Console對象的屬性或方法。

我相信您所理解的錯誤在這里:

所以我知道最終課程無法實例化

最終類不能擴展,但可以實例化。 僅供參考,它是無法實例化的抽象類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM