プロが教える店舗&オフィスのセキュリティ対策術

Javaについて学習中です。
①Mainクラスで「Hello World」と出力するテストを行ったところ、無事コンパイル、実行が出来ました。Mainクラスは、language/Java/Main.java に位置します。
②しかし、ディレクトリ内がファイルだらけで見えにくくなると思ったので、Javaディレクトリ内にクラスファイルだけを入れるClassディレクトリを作成しました。 language/Java/Class
③①でデバッグできたMainクラスを再度コンパイルすると成功しましたが、実行すると、
 「Main.classが見つからなかったか、ロードされなかった」と出力されます。
 コンパイル : javac -d Class Main.java // success
 実行    : java Class/Main.class // error

なぜ、エラーが出たのでしょうか?どのように対処したらよいのでしょうか?

A 回答 (3件)

例えばカレントディレクトリに対し


ソースの検索場所を src
クラスファイルの格納場所を classes
とすると

パッケージ info.nakamuri.app.hello の Mainクラスをコンパイルする
してみましょう。

ソースファイルは

Main.java
----------
package info.nakamuri.app.hello;

public class Main {
public static void main(String[] argv) {
System.out.println("Hello World\n");
}
}
----------

を src\info\nakamuri\app\hello
に置き
javac -d classes -sourcepath src src\info\nakamuri\app\hello\Main.java
でコンパイル

クラスファイルは classes\info\nakamuri\app\hello に
Main.class ができます。

実行は
java -cp classes info.nakamuri.app.hello.Main

これでだいたい雰囲気はわかりますか?

パッケージ名は会社のドメインや個人のドメイン名から作るのが
普通です。

めんどくさいけど、クラスの分類と、他人とクラス名が
重複しないようにする工夫です。大人数でソフトを作る時や
ライブラリを公開する時に必要。

#因みに info.nakamuri は私個人のドメインなので、
#使わないでください(^^;
    • good
    • 0
この回答へのお礼

2階も詳しい説明ありがとうございました。
package有無どちらでも出来ました。

大規模な開発となればpackage使った方がいいですね。ただ、個人で学習する程度であれば、packageを書かない方がディレクトリの移動だったりめんどくさくないのでいいかもしれません。
packageに慣れるために、きちんと書くことも重要だと思いますが…

お礼日時:2020/10/21 21:26

取り合えず、パッケージ無し (ソース内に package の記述が無い)


を前提に説明すると

コンパイルは

javac -d クラスファイルの格納位置 -sourcepath ソースファイル検索位置 ソースファイル名 ・・・・

カレントディレクトリが language/Java なら

javac -d Class Main.java

カレントディレクトリが language なら

javac -d Java\Class -sourcepath Java Java\Main.java

実行は
カレントディレクトリが language/Java なら

java -cp Class Main

-cp は実行時のクラスファイルの格納位置を指定します。

カレントディレクトリが language なら
java -cp java\Class Main

クラスファイルの格納位置 や ソースファイル検索位置 は
package の表すクラス階層のルートレベルを表すので注意!

packageを使っていない場合は、単なるファイルの格納ディレクトリです。

Javaではクラスの階層構造 =ソースやクラスファイルのディレクトリの階層構造 なので、
早めに package に慣れておくことをおすすめします。
    • good
    • 0
この回答へのお礼

詳しくありがとうございます。
今回はソースコードにpackage文を入れていません。
もし、package文を入れるとしたら、コンパイル、実行方法はどのように変わるのでしょうか?各ファイルは以下の場所にあります。

ソースコード : language/Java/Main.java
クラスファイル : language/Java/Class/Main.class

お礼日時:2020/10/20 14:42

そもそも実行するときに


.class
って付けちゃダメだよね.

あと, たぶんクラスファイルに書かれているクラス名が Class.Main にならないので
java Class/Main
でも動かないはず. クラスパスを指定するかな.
    • good
    • 0
この回答へのお礼

あ!.classは間違えてつけてますね。気が付きませんでした。ありがとうございます

お礼日時:2020/10/19 09:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!