Java class文件格式總結(jié)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
我們都知道JVM能夠識別的只有class格式的文件, 而源文件只是我們?nèi)四茏R別的, 不能被JVM識別。 那我們要在更深的層次上理解Java語言, 理解JVM, 只懂源文件是不夠的, 因?yàn)樘摂M機(jī)的很多的行為, 是在class文件中定義的, 而我們要理解JVM的行為, 就必須也學(xué)會(huì)JVM能理解的“語言”, 那就是class文件格式 。 就像我們想要深入的了解一個(gè)外國人, 只站在自己的角度上是不可能了解他的, 只有你學(xué)會(huì)了他的語言, 才能對他更了解, 因?yàn)橹挥心憷斫饬怂f的話, 才能知道他做的事, 進(jìn)而了解他的行事方式和性格特點(diǎn)。 當(dāng)然, 也有另外一個(gè)方式可以讓你了解外國人, 那就是讓他學(xué)會(huì)中國話, 你們用中文交流。 但是在Java的世界里, 這是不可能的, 因?yàn)槟悴豢赡茏孞VM識別源文件, 所以, 只能你去學(xué)習(xí)JVM能理解的語言 ---- class文件。
理解了class文件的格式, 不僅對理解JVM的行為有指導(dǎo)性的意義, 它還能讓我們對Java代碼有更加清晰深刻的認(rèn)識, 畢竟class文件是由我們寫的java代碼“翻譯”過來的。 明白了class文件的格式, 你就能知道方法是如何表示的, 字段是如何表示的, 繼承是如何表示的 , 方法體是如何表示的, 等等。 所有源文件中的東西, 都會(huì)在class文件中有相應(yīng)的描述形式。 這樣會(huì)讓我們在寫代碼時(shí)做到胸有成竹。 當(dāng)代碼出了問題時(shí), 也能更快的找出原因所在,因?yàn)槲覀兛梢园言创a生成的class文件反編譯出來, 看看它內(nèi)部是如何實(shí)現(xiàn)的。 畢竟原理明白了, 源代碼只是表象罷了。
此外, class文件不只是可以由Java代碼生成。 其他很多基于JVM的語言, 也是生成標(biāo)準(zhǔn)的class文件, 然后被虛擬機(jī)執(zhí)行。 如我最近正在學(xué)習(xí)的scala語言, 它就是基于虛擬機(jī)的。 scalac編譯器可以將scala代碼編譯成class文件。 這樣的話, 了解class文件格式, 可以對學(xué)習(xí)其他基于JVM的語言起到很好的作用, 你會(huì)發(fā)現(xiàn), 如果你對class文件和JVM足夠了解的話, 學(xué)習(xí)這些語言會(huì)感到非常輕松。 class文件是JVM的一個(gè)接口, 不管你源文件中寫的是什么代碼, 不管是java還是scala, 只要通過一定的方式, 讓你寫的代碼可以轉(zhuǎn)化成格式正確的class文件, 那么JVM就能替你執(zhí)行。 如果你足夠牛, 完全可以自己創(chuàng)建一門語言, 實(shí)現(xiàn)一個(gè)針對這個(gè)語言的編譯器, 將之編譯成class, 那么虛擬機(jī)也能執(zhí)行, 并且Scala,Groovy等語言的設(shè)計(jì)者已經(jīng)在這么干了。
相關(guān)文章
WIN10環(huán)境 Maven的安裝與配置詳細(xì)教程
這篇文章主要介紹了WIN10環(huán)境 Maven的安裝與配置詳細(xì)教程,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot通過自定義注解實(shí)現(xiàn)參數(shù)校驗(yàn)
實(shí)現(xiàn)參數(shù)校驗(yàn)說實(shí)話方式還挺多,個(gè)人使用過直接在Controller代碼里面寫、AOP+自定義注解、ConstraintValidator。本文主要和大家講的是ConstraintValidator實(shí)現(xiàn),感興趣的可以了解一下2022-12-12
使用eclipse + maven一步步搭建SSM框架教程詳解
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三個(gè)開源框架整合而成,常作為數(shù)據(jù)源較簡單的web項(xiàng)目的框架.這篇文章主要介紹了eclipse + maven搭建SSM框架 ,需要的朋友可以參考下2017-11-11
myatisplus的saveOrUpdate的提交總是update問題
這篇文章主要介紹了myatisplus的saveOrUpdate的提交總是update問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
SpringCloud兩種注冊中心的實(shí)現(xiàn)
本文主要介紹了SpringCloud兩種注冊中心的實(shí)現(xiàn),包括服務(wù)注冊、服務(wù)拉取、負(fù)載均衡和實(shí)例權(quán)重配置等,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01
Mybatis實(shí)現(xiàn)插入數(shù)據(jù)后返回主鍵過程解析
這篇文章主要介紹了Mybatis實(shí)現(xiàn)插入數(shù)據(jù)后返回主鍵過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
淺析Java中String與StringBuffer拼接的區(qū)別
String拼接會(huì)創(chuàng)建一個(gè)新的String對象,存儲拼接后的字符串,StringBuffer拼接是直接在本身拼接,會(huì)即時(shí)刷新。下面通過本文給大家介紹Java中String與StringBuffer拼接的區(qū)別,感興趣的朋友一起看看吧2017-06-06

