87934


windowsでvscodeを使用しています。Javaで作ったのですが、ターミナルでjava
Student.javaと入力しても「クラスにmain(String[])メソッドが見つかりません:
Student」と出て結果が出ません。どうすればよろしいでしょうか。

[code]

    class Student{
        String name = "satou";
    
        public void calculateAvg(int math,int english){
            System.out.println((math + english)/2);
        }
    }
    
    class Lesson13_01{
        public static void main(String[] args){
            Student a001 = new Student();
            a001.name = "satou";
    
            System.out.println(a001.name);
            a001.calculateAvg(90,80);
        }
    }
    
[/code]


CC BY-SA 4.0
2022-03-20T08:34:45.930
87931
2022-03-20T12:41:52.950
2022-03-20T09:48:55.513
19110
51897
question
java
「クラスにmain(String[])メソッドが見つかりません: Student」と出て結果が出ません


実行のさせ方が違います。`javac` コマンドでプログラムをバイトコードにし、`java` コマンドで実行させてください。

手元だと以下で実行できました。

[code]

    javac Student.java
    java Lesson13_01
    
[/code]


CC BY-SA 4.0
2022-03-20T10:17:18.203
87933
2022-03-20T10:17:18.203
19110
87931
answer


> ターミナルでjava Student.javaと入力しても「クラスにmain(String[])メソッドが見つかりません:
> Student」と出て結果が出ません。

エラーメッセージのとおり、クラスにmainメソッドが見つかっていません。  
Student.javaにはmainメソッドを定義したクラスをソースファイルの先頭にかけば実行するエラーは解消されます。

## Student.java

[code]

    class Lesson13_01{
        public static void main(String[] args){
            Student a001 = new Student();
            a001.name = "satou";
    
            System.out.println(a001.name);
            a001.calculateAvg(90,80);
        }
    }
    
    class Student{
        String name = "satou";
    
        public void calculateAvg(int math,int english){
            System.out.println((math + english)/2);
        }
    }
    
[/code]

[code]

    java Student.java
    satou
    85
    
[/code]

ツール・リファレンスの[ソース・ファイル・モードで単一ファイルのソース・コードのプログラムを起動する方法](https://docs.oracle.com/javase/jp/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE__USINGSOURCE-
FILEMODETOLAUNCHSINGLE--B5E57618)によると

> ソース・ファイル・モードでは、ソース・ファイルがメモリーにコンパイルされた場合と同様に、ソース・ファイル内で最初に検出されたクラスが実行されます。

とあります。

* * *

ソース・ファイル・モードはJava 11から導入されたようです。  
ソース・ファイル・モードはちょっとしたコードを試してみるとき非常に便利ですが、本格的なJavaのプログラムを書くときはJavacで明示的にコンパイルして実行することをお勧めします。

* * *

Javaソースのファイル名はクラス名.javaとするのが一般的です。

動作確認に使用したJavaのバージョンは以下です。

[code]

    openjdk version "17.0.2" 2022-01-18
    OpenJDK Runtime Environment (build 17.0.2+8-86)
    OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
    
[/code]


CC BY-SA 4.0
2022-03-20T10:39:07.883
87934
2022-03-20T10:46:20.943
2022-03-20T10:46:20.943
35558
35558
87931
answer


VSCode の GUI で Run(実行) ボタンを押して実行するのに相当するコマンドラインは

[code]

    javac -d classes *.java
    java -cp classes Lesson13_01
    
[/code]

です。

関連:

  * [Javaプログラムがターミナルから実行できない](https://ja.stackoverflow.com/a/54441/2808)
  * [VSCode から Java の実行時、class ファイルが生成されないのはなぜ？](https://ja.stackoverflow.com/a/84058/2808)
    * 前述コマンドラインでは `classes` ディレクトリに`.class`ファイルが生成されますが、VSCode上で実行した場合にはVSCodeが定めた別の場所に生成されています

* * *

質問文中のコードを見た感じ、何か入門書などを参考にされているように見えます。

入門書ではあまり質問文に書かれているようなやり方(`Lesson13_01` クラスと `Student` を同一ファイルに書き下したり、コンパイルせずに
`java` コマンドで直接実行したり)はしないと思うので、もし何か参考にされているのであれば、説明を理解し間違えている可能性があるかと考えます。


CC BY-SA 4.0
2022-03-20T12:41:52.950
87937
2022-03-20T12:41:52.950
2808
87931
answer