私はEclipseでいくつかのJavaコードに取り組んでいます。Adder
コードは、Eclipseではパッケージに含まれていると呼ばれる単一のクラスに含まれていますorg.processing
。クラスファイルの最初のものは行です
package org.processing
Q1) この行は正確に何をしているのですか?なぜそこにあるのか、それはどのような役割なのか。
コードはEclipseで正常に実行されますが、ワークスペースに移動すると、のsrc/org/processing/
フォルダーに移動src
し、javac Adder.class
を使用して実行しようとするとjava Adder
、次のエラーが発生します。
java.lang.NoClassDefFoundError: Adder (wrong name: org/processing/Adder)
一方、srcからコンパイルする場合は
javac org/processing/Adder.java
src
を使用して実行することはできますjava org.processing.Adder
が、処理ディレクトリ内からは実行できません。
Q2) これは、コンパイルが常にディレクトリ構造に関連していることを意味しますか?
最後に、 package org.processing
最初から行を削除すると、ファイルのディレクトリ.class
内からコンパイルして実行できるファイルになります。.class
Q3) なんでこんな感じなの?コード開発のためにディレクトリ構造を適用することは完全に理解できますが、バイトコードに入ると、これは少しやり過ぎのように見えます。これは、(どうやら)1つのダイレクタ(src
)からのバイトコードしか実行できないためjava org.processing.Adder
です。さて、私はここでポイントを逃していると確信しているので、誰かがそれが何であるかを指摘することができれば、それは素晴らしいことです。