Java classファイルフォーマットのまとめ動力ノードJava学院の整理


JVMが認識できるのはクラス形式のファイルだけで、ソースファイルは私達だけが識別できるもので、JVMに認識されてはいけません。じゃ、もっと深いレベルでJava言語を理解して、JVMを理解して、ソースファイルだけを理解するのは足りないです。仮想マシンの多くの行為は、classファイルで定義されています。JVMの行動を理解するためには、JVMが理解できる「言語」を習得しなければなりません。私たちが外国人を深く理解したいのと同じように、自分の角度だけでは彼を知ることはできません。あなたが彼の言語を習得したからこそ、彼の話を理解してこそ、彼のしたことを知ることができます。さらに彼の行動様式と性格の特徴を知ることができます。もちろん、他の方法もあります。外国人を知ることができます。彼に中国語をマスターさせることです。中国語で話してください。しかし、Javaの世界では、これは不可能です。JVMにソースファイルを識別することは不可能です。だから、JVMが理解できる言語であるクラスファイルを勉強するしかないです。 
classファイルのフォーマットを理解しました。JVMの行動を理解することに指導的な意味があるだけでなく、Javaコードをより明確に深く認識させることもできます。結局、classファイルは私達が書いたjavaコードの「翻訳」によって来ました。classファイルのフォーマットが分かりました。方法はどのように表していますか?フィールドはどのように表していますか?継承はどのように表していますか?方法体はどのように表していますか?など。すべてのソースファイルの中のものは、クラスファイルに該当する記述形式があります。コードを書く時、胸に成算があるようにします。コードが問題が発生した時、原因の所在も早く探し出せます。ソースから発生したclassファイルを逆コンパイルして、内部がどのように実現されているかを見てください。結局原理が分かりました。ソースコードはイメージだけです。
また、クラスファイルはJavaコードだけでは生成できません。他の多くのJVMベースの言語も標準のクラスファイルを生成して仮想マシンで実行されます。最近勉強しているscala言語のように、仮想マシンに基づいています。 scalacコンパイラは、scalaコードをclassファイルにコンパイルすることができます。そうすれば、クラスのファイル形式を理解して、他のJVMに基づく言語を勉強するのにとてもいい効果があります。classファイルとJVMに対して十分理解すれば、これらの言語を勉強するのはとても楽です。classファイルはJVMのインタフェースです。ソースファイルにどんなコードが書かれていても、javaであれscalaであれ、一定の方式を通じて、あなたの書いたコードをフォーマットの正しいclassファイルに変換することができます。JVMはあなたのために実行できます。もしあなたが十分な牛であれば、自分で言語を作って、この言語に対するコンパイラを実現して、それをクラスにコンパイルします。仮想マシンも実行できます。Scal、Grouvyなどの言語の設計者はもうこのようにしています。