<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## [反射:運行時類信息](https://lingcoder.gitee.io/onjava8/#/book/19-Type-Information?id=%e5%8f%8d%e5%b0%84%ef%bc%9a%e8%bf%90%e8%a1%8c%e6%97%b6%e7%b1%bb%e4%bf%a1%e6%81%af) 如果你不知道對象的確切類型,RTTI 會告訴你。但是,有一個限制:必須在編譯時知道類型,才能使用 RTTI 檢測它,并對信息做一些有用的事情。換句話說,編譯器必須知道你使用的所有類。 起初,這看起來并沒有那么大的限制,但是假設你引用了一個不在程序空間中的對象。實際上,該對象的類在編譯時甚至對程序都不可用。也許你從磁盤文件或網絡連接中獲得了大量的字節,并被告知這些字節代表一個類。由于這個類在編譯器為你的程序生成代碼后很長時間才會出現,你如何使用這樣的類? 在傳統編程環境中,這是一個牽強的場景。但是,當我們進入一個更大的編程世界時,會有一些重要的情況發生。第一個是基于組件的編程,你可以在應用程序構建器*集成開發環境*中使用*快速應用程序開發*(RAD)構建項目。這是一種通過將表示組件的圖標移動到窗體上來創建程序的可視化方法。然后,通過在編程時設置這些組件的一些值來配置這些組件。這種設計時配置要求任何組件都是可實例化的,它公開自己的部分,并且允許讀取和修改其屬性。此外,處理*圖形用戶界面*(GUI)事件的組件必須公開有關適當方法的信息,以便 IDE 可以幫助程序員覆寫這些事件處理方法。反射提供了檢測可用方法并生成方法名稱的機制。 在運行時發現類信息的另一個令人信服的動機是提供跨網絡在遠程平臺上創建和執行對象的能力。這稱為*遠程方法調用*(RMI),它使 Java 程序的對象分布在許多機器上。這種分布有多種原因。如果你想加速一個計算密集型的任務,你可以把它分解成小塊放到空閑的機器上。或者你可以將處理特定類型任務的代碼(例如,多層次客戶機/服務器體系結構中的“業務規則”)放在特定的機器上,這樣機器就成為描述這些操作的公共存儲庫,并且可以很容易地更改它以影響系統中的每個人。分布式計算還支持專門的硬件,這些硬件可能擅長于某個特定的任務——例如矩陣轉換——但對于通用編程來說不合適或過于昂貴。 類`Class`支持*反射*的概念,`java.lang.reflect`庫中包含類`Field`、`Method`和`Constructor`(每一個都實現了`Member`接口)。這些類型的對象由 JVM 在運行時創建,以表示未知類中的對應成員。然后,可以使用`Constructor`創建新對象,`get()`和`set()`方法讀取和修改與`Field`對象關聯的字段,`invoke()`方法調用與`Method`對象關聯的方法。此外,還可以調用便利方法`getFields()`、`getMethods()`、`getConstructors()`等,以返回表示字段、方法和構造函數的對象數組。(你可以通過在 JDK 文檔中查找類`Class`來了解更多信息。)因此,匿名對象的類信息可以在運行時完全確定,編譯時不需要知道任何信息。 重要的是要意識到反射沒有什么魔力。當你使用反射與未知類型的對象交互時,JVM 將查看該對象,并看到它屬于特定的類(就像普通的 RTTI)。在對其執行任何操作之前,必須加載`Class`對象。因此,該特定類型的`.class`文件必須在本地計算機上或通過網絡對 JVM 仍然可用。因此,RTTI 和反射的真正區別在于,使用 RTTI 時,編譯器在編譯時會打開并檢查`.class`文件。換句話說,你可以用“正常”的方式調用一個對象的所有方法。通過反射,`.class`文件在編譯時不可用;它由運行時環境打開并檢查。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看