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

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

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

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

コンパイル

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

コンパイルエラー

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

Q&A

解決済

3回答

12974閲覧

エラー: クラスにmain(String[])メソッドが見つかりません を解決したい

KokiOya

総合スコア27

Java

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

コンパイル

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

コンパイルエラー

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

0グッド

0クリップ

投稿2020/11/01 09:12

編集2020/11/01 09:24

前提・実現したいこと

javaを学習中なのですが、javaのmainメソッドが1番上のクラスにないと
クラスにmain(String[])メソッドが見つかりません
というエラーが出てしまう。コンパイルはできる。

発生している問題・エラーメッセージ

エラー: クラスにmain(String[])メソッドが見つかりません: Parent

該当のソースコード

java

1class Parent { 2 // クラスフィールド(気質・知力・体力の下限と上限) 3 int property = -10; 4 // コンストラクタ 5 Parent() { 6 setData(0); 7 } 8 // コンストラクタ 9 Parent(int property) 10 setData(property); 11 } 12 13 void setData(int property) { 14 this.property = property; 15 } 16} 17 18public class EffortTest { 19 public static void main(String[] args) { 20 Parent mom = new Parent(100); 21 System.out.println(mom.property); 22 } 23}

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

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

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

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

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

Peya

2020/11/01 09:18

すみません、 public static void main(String[] args) { の波括弧が、閉じされていないようなのですが,, これでコンパイルが通ることは無いはずです。
KokiOya

2020/11/01 09:23

申し訳ございません。これは僕のタイプミスです。閉じてても同じエラーが起こってしまいます
Peya

2020/11/01 09:24

下の回答者さんの解決法でやってみてください,,
KokiOya

2020/11/01 09:25

解決はしたのですが、なぜmainメソッドを一番上にしないとエラーが起こるのでしょうか?調べても一番上でないといけないという記述がないため、疑問なのですが、、
Peya

2020/11/01 09:34 編集

通常、上にあるクラスがメインクラス(main()があり、実行できるクラス)とJavaさんが解釈する仕様です。 そのため、上のクラスにmain(String[] args)がないと、Javaさんとしてはおかしい という結果になってしまっています。 --追記 Java15で試したところ、正常にコンパイル、実行ができました。 Java環境にも依存するようです。 Java8以降を使用してみてください。 https://paiza.io/projects/umiN8mibl-RQiTGIRGL0TA
KokiOya

2020/11/01 09:42

ありがとうございます!ぜひ、ベストアンサーにしたいので、上記を回答にしていただけないでしょうか?
Peya

2020/11/01 09:45

了解です。ありがとうございます
LouiS0616

2020/11/01 10:03

Javaの仕様は関係ない筈です。実行環境を教えて下さい。
guest

回答3

0

javaのmainメソッドが1番上のクラスにないと

クラスにmain(String[])メソッドが見つかりません
というエラーが出てしまう。コンパイルはできる。

エラーメッセージは「1番上のクラスにないと」とは言っていません。
java Parent で実行を開始させようとすると、
Parent クラスに main メソッドがないので、そのエラーメッセージが出ます。
java EffortTest で実行を開始させると、問題ありません。
上とか下とかは関係ありません。

現在のコードでは、Parent(int property) に { がなくてコンパイルエラーになります。

投稿2020/11/01 14:48

編集2020/11/01 16:37
kazuma-s

総合スコア8224

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

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

0

クラスの記述を上下入れ替えればいいのでは

投稿2020/11/01 09:17

y_waiwai

総合スコア87747

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

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

KokiOya

2020/11/01 09:23

上下を入れ替えれば、解決するのですが、なぜ下にあるとエラーが起こるのですか?
y_waiwai

2020/11/01 09:32

そういうふうに決まっている、としかいいようがないですねー
guest

0

ベストアンサー

通常、上にあるクラスがメインクラス(main()があり、実行できるクラス)とJavaさんが解釈する仕様です。
そのため、上のクラスにmain(String[] args)がないと、Javaさんとしてはおかしい という結果になってしまっています。

また、Java15で試したところ、正常にコンパイル、実行ができました。
Java環境にも依存するようです。
Java8以降を使用してみてください。
テスト環境

投稿2020/11/01 09:43

Peya

総合スコア9

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

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

LouiS0616

2020/11/01 11:16

> 通常、上にあるクラスがメインクラス(main()があり、実行できるクラス)とJavaさんが解釈する仕様です。 すみません、私の不勉強かもしれませんが、そのような仕様は聞いたことが無いです。リファレンスのどの辺りに書いてあるでしょうか?
Peya

2020/11/01 11:24

すみません。リファレンスというより、私がまだ何もわからなかった頃、 私の先輩から「メインクラスを先に記述しないと動かない」と言う話を聞いた次第でございます
LouiS0616

2020/11/01 11:33

どのような実行環境でしょうか?
Peya

2020/11/01 11:34

たしかJDK5だったと記憶しています
LouiS0616

2020/11/01 11:36

Java Tigerですか。今となっては検証が難しいですね。 調べてみます。ありがとうございます。
Peya

2020/11/01 11:39

ありがとうございました。
LouiS0616

2020/11/01 12:24

ところでJavaって実行するときクラスを指定するわけですが(最近だとプログラムファイルを直接起動したりもできますけど)、Java1.5までは違ったのでしょうか?
Peya

2020/11/01 12:39

$ java Main のような形で実行できたと思います。(多分) 私今Java8の人間なので、知識がごちゃまぜになってしまっていまして,,,
dodox86

2020/11/01 14:54

実は私もLouiS0616さんと同様に、「上にあるクラスがメインクラス(main()があり、実行できるクラス)とJavaさんが解釈する仕様」の記述が気になっていました。 質問の当初の問題は、ファイル名をParent.java にしていて、publicなEffortTestクラスをファイル名にしていないせいではないかな、と思ったのですが。
dodox86

2020/11/01 15:06 編集

本質問を見かけたときには閉じそうだったものの、こちらで試したところではまったく同じ内容のエラー内容では再現しなかったのでそのままにしていました。OpenJDK 1.8.0_252ではParent.javaで以下のエラー、EffortTest.java に直せばエラー無し、です。参考までに載せておきます。 $ java -version openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1~18.04-b09) OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode) $ javac Parent.java Parent.java:18: error: class EffortTest is public, should be declared in a file named EffortTest.java public class EffortTest { ^ 1 error
LouiS0616

2020/11/01 15:08

実行時のエラーに見えます。java Parent で再現する筈です。
dodox86

2020/11/01 15:21

@LouiS0616さん > 実行時のエラーに見えます。java Parent で再現する筈です。 コメントいただきどうもありがとうございます。「javac Parent.java」では上記コンパイルエラーで*.classファイルが生成されませんでした。が、「javac EffortTest.java」でコンパイルすると成功するので、EffortTest.class, Parent.class が生成されます。これで試したところ、「Java EffortTest」なら実行OKですが、無理やり「Java Parent」で実行すると質問とまぁ同等の実行時エラーでした。 $ javac EffortTest.java $ ls *.class EffortTest.class Parent.class $ java EffortTest 100 $ java Parent Error: Main method not found in class Parent, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問