Class文件格式總結(十)

到此, 全部關於class文件格式的重要內容都已經講解完了, 不敢說面面俱到, 可是敢說大部分重要的內容都包含在內了。前先後後用了9篇博客來專門講解class文件結構, 爲何花那麼多的時間和精力來介紹class文件呢? 簡而言之,由於它很重要。在前面的文章中, 也講到過爲何對於理解Java體系結構來講, 理解class文件的格式相當重要。 其實這篇短文也不是對class文件格式細節上的總結, 而是我在學習class文件和JVM的過程當中的一些感悟和理解。 java


咱們都知道JVM可以識別的只有class格式的文件, 而源文件只是咱們人能識別的, 不能被JVM識別。 那咱們要在更深的層次上理解Java語言, 理解JVM, 只懂源文件是不夠的, 由於虛擬機的不少的行爲, 是在class文件中定義的, 而咱們要理解JVM的行爲, 就必須也學會JVM能理解的「語言」, 那就是class文件格式 。 就像咱們想要深刻的瞭解一個外國人, 只站在本身的角度上是不可能瞭解他的, 只有你學會了他的語言, 才能對他更瞭解, 由於只有你理解了他說的話, 才能知道他作的事, 進而瞭解他的行事方式和性格特色。 固然, 也有另一個方式可讓你瞭解外國人, 那就是讓他學會中國話, 大家用中文交流。 可是在Java的世界裏, 這是不可能的, 由於你不可能讓JVM識別源文件, 因此, 只能你去學習JVM能理解的語言 ---- class文件。 學習

理解了class文件的格式, 不只對理解JVM的行爲有指導性的意義, 它還能讓咱們對Java代碼有更加清晰深入的認識, 畢竟class文件是由咱們寫的java代碼「翻譯」過來的。 明白了class文件的格式, 你就能知道方法是如何表示的, 字段是如何表示的, 繼承是如何表示的 , 方法體是如何表示的, 等等。 全部源文件中的東西, 都會在class文件中有相應的描述形式。 這樣會讓咱們在寫代碼時作到成竹在胸。 當代碼出了問題時, 也能更快的找出緣由所在,由於咱們能夠把源碼生成的class文件反編譯出來, 看看它內部是如何實現的。 畢竟原理明白了, 源代碼只是表象罷了。scala


此外, class文件不僅是能夠由Java代碼生成。 其餘不少基於JVM的語言, 也是生成標準的class文件, 而後被虛擬機執行。 如我最近正在學習的scala語言, 它就是基於虛擬機的。  scalac編譯器能夠將scala代碼編譯成class文件。 這樣的話, 瞭解class文件格式, 能夠對學習其餘基於JVM的語言起到很好的做用, 你會發現, 若是你對class文件和JVM足夠了解的話, 學習這些語言會感到很是輕鬆。 class文件是JVM的一個接口, 無論你源文件中寫的是什麼代碼, 不論是java仍是scala, 只要經過必定的方式, 讓你寫的代碼能夠轉化成格式正確的class文件, 那麼JVM就能替你執行。 若是你足夠牛, 徹底能夠本身建立一門語言, 實現一個針對這個語言的編譯器, 將之編譯成class, 那麼虛擬機也能執行, 而且Scala,Groovy等語言的設計者已經在這麼幹了翻譯

相關文章
相關標籤/搜索