質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

解決済

1回答

793閲覧

java package コンパイルから実行まで

tmp0

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

2クリップ

投稿2020/08/01 11:55

次の3つのソースコードをクラスに分けて実行したいのですがコンパイルはできても、実行までいたりません。
ご助言をいただけましたら幸いです。
以前も同じような投稿があったかと思いましたが見当たらないので投稿させていただきました。

コンパイルから実行までのjavaコードは以下のように行ました。
javac Main_61.java Main_Zenhan.java Main_Kouhan.java(コンパイル)
実行の指定はメインメソッドがあるファイルだけでいいはずなので
java main_61.Main_61
ちなみにコンパイル後の3つのclassファイルは
Main_61.classはmain_61フォルダへ
Main_Zenhan.classはmain_Zenhanフォルダへ
Main_Kouhan.classはmain_Kouhanフォルダへ移動しています。
なぜ実行されないのでしょうか。

メインメソッド

package comment; import comment.Main_Zenhan; public class Main_61 { public static void main(String[] args)throws Exception{ Main_Zenhan.doWarusa(); Main_Zenhan.doTogame(); comment.Main_Kouhan.callDeae(); comment.Main_Kouhan.showMondokoro(); } }

前半メソッド

package comment; public class Main_Zenhan{ public static void doWarusa(){ System.out.println("きな粉でござる。食えませんがの"); } public static void doTogame(){ System.out.println("この老いぼれの目はごまかせませんぞ。"); } } ```後半メソッド ```ここに言語を入力 package comment; public class Main_Kouhan { public static void callDeae(){ System.out.println("えぇい、こしゃくな。くせ者だ!であえい!"); } public static void showMondokoro() throws Exception{ System.out.println("飛車さん、角さん。もういいでしょう。"); System.out.println("この紋所が目に入らぬか!"); System.out.println(); //もう一度とがめる } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2020/08/01 12:59

> ちなみにコンパイル後の3つのclassファイルは Main_61.classはmain_61フォルダへ Main_Zenhan.classはmain_Zenhanフォルダへ Main_Kouhan.classはmain_Kouhanフォルダへ移動しています。 これは『手動で移動している』という意味でしょうか?
tmp0

2020/08/01 14:14

はい。Finderから作って手動で移動してます。
LouiS0616

2020/08/01 14:16

keicha_hrsさんの回答にもあるように、Javaのパッケージ階層はディレクトリ階層に対応しています。 classファイルだけ移動するのはちょっとまずいです。
tmp0

2020/08/01 16:01

classファイルだけ移動するのはなぜは悪いのでしょうか。よろしければ教えてください。
tmp0

2020/08/01 16:06

javahackさん なぜか出来が悪く解決できませんでした。完全な理解に至らないままとりあえず実行できた→理解となったようです。 そして同じコードのやつは課題というかjava入門の参考書です。スクールでこの参考書を中心に進めています。わからない場合はインストラクターに質問するのですが読んで解決できると思いますという返信もあるので解決できない場合もあって、、、。
guest

回答1

0

ベストアンサー

パッケージに属させたJavaソースファイルを正しくコンパイルして実行するには、パッケージと同じ名前のディレクトリーの中にclassファイルを配置する必要があります。

今回の例で言えば、commentというパッケージ名なので、commentというディレクトリーを作成してその中に3つのJavaソースファイルを全て移動し、commentディレクトリーがあるのと同じ階層上で

javac comment/Main_61.java java comment.Main_61

とコマンド実行すればコンパイルと実行ができるはずです。


こちらはLinuxなので多少違うかもしれないけど、操作例として。ホームディレクトリーにworkディレクトリーを作り、workディレクトリーの中にcommentディレクトリーを作り、commentディレクトリーに3つのJavaソースファイルを移動して、commentディレクトリーで端末を開いた状態から始めるとしたら、下記のような流れで動作するはずです。Javaソースファイルが存在する階層と、javacやjavaのコマンド実行を行うディレクトリーの階層の位置関係がこれでわかるでしょうか。

~/work/comment $ ls Main_61.java Main_Kouhan.java Main_Zenhan.java ~/work/comment $ cd .. ~/work $ javac comment/Main_61.java ~/work $ java comment.Main_61 きな粉でござる。食えませんがの この老いぼれの目はごまかせませんぞ。 えぇい、こしゃくな。くせ者だ!であえい! 飛車さん、角さん。もういいでしょう。 この紋所が目に入らぬか! ~/work $ cd comment ~/work/comment $ ls Main_61.class Main_61.java Main_Kouhan.class Main_Kouhan.java Main_Zenhan.class Main_Zenhan.java

投稿2020/08/01 13:50

編集2020/08/03 07:57
keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tmp0

2020/08/01 14:26

回答ありがとうございます。 追加で申し訳ありません。パッケージと同じ名前のディレクトリー構造というのが自分にはまだ理解に至っていません。 commentディレクトリーがあるのと同じ階層上でというのもなんのことを指しているのかピンときません。 本当に物わかりの悪いもので申し訳ありません。自己嫌悪です。 そして私の中でコンパイル→教えていただいた実行をするとすんなりいくのでしょうか。 これまでjava入門で / をターミナルで使ったことがないのに教えてくださる方はこの方法を。とおっしゃりますが スラッシュをこれまで使ってコンパイル→実行したことがありません。このスラッシュを使うことは必須なのでしょうか。意味のわからない質問であれば本当に申し訳ありません。
tmp0

2020/08/01 14:34

ちなみに今、教えていただいた実行方法。 javac comment/Main_61.java の時点でファイルが見つかりませんというエラーが出ました。 やはり私の中でcommentディレクトリーがある階層上で。というのが理解できていないというのが前提にあるようです。申し訳ありません。
keicha_hrs

2020/08/01 16:06 編集

> パッケージと同じ名前のディレクトリー構造というのが自分にはまだ理解に至っていません。 「パッケージと同じ名前のディレクトリー構造」というのはちょっと言い回しがまずかったかも。回答の文章を推敲しているうちにこうなってしまいましたが、要するにパッケージ名とディレクトリー名を合わせてくれというだけの話です(回答訂正しました)。パッケージ名とディレクトリー名を同じ名称にするのはJavaがそういう仕様であるからであって、これは「そういうもの」として飲み込んでいただくしかありません。 これがcom.example.commentのようなドットで区切られたパッケージ名になるともう少し話が複雑になりますが、今は混乱するので詳しい説明は避けます。ただ、そのようなパッケージ名のときのディレクトリー構造(ここは構造で誤っていない)の作り方はいずれは求められる知識となるでしょう。 > commentディレクトリーがあるのと同じ階層上でというのもなんのことを指しているのか OSが何なのかわかりませんが、Windowsだとしたらdirコマンドを実行したときにリストにcommentディレクトリーが表示されるような場所です。例えば今回の作業のためにC:¥work¥commentというディレクトリーを作成したのならば、C:¥workを作業ディレクトリーとしてくださいという意味です。 > スラッシュをこれまで使ってコンパイル→実行したことがありません その方法でコンパイルを実行すると、mainメソッドから呼ばれる他のJavaソースファイルもまとめてコンパイルされます。今回の例ならば、指定しているソースファイルは1つでも、3つともコンパイルされることになるはずです。ソースファイルがある階層でjavacコマンドのパラメーターに3つのJavaソースファイル名を並べてもコンパイルを通すことはできますが、その方法だけしか修めていないと、複数のパッケージで構成される複雑なプロジェクトのコンパイルが面倒になります。 > ファイルが見つかりませんというエラーが出ました。 作業ディレクトリーが誤っているのだと思います。
keicha_hrs

2020/08/02 01:16 編集

> スラッシュをこれまで使ってコンパイル→実行したことがありません。 前質問 https://teratail.com/questions/280859 でやってるじゃないですか・・・。「自分の習った入門では無かった方法」だから未だに納得できないということですか?
tmp0

2020/08/02 04:22

keicha_hrsさん、ご丁寧にありがとうございます。 はい。習った入門にはなかった方法なので納得できていない状況だったと思います。OSはmacです。
keicha_hrs

2020/08/02 06:21

それで結局コンパイルはできたのでしょうか。できなかったとしても、commentディレクトリーに3つのJavaソースファイルを格納するところまでは作業されましたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問