0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Java SE 17 Silver] javaコマンドについて

Last updated at Posted at 2025-06-02

概要

いつも忘れがちなjavaコマンドについてまとめておく

javaコマンドとは

  • JVMを起動するためのコマンド
  • JVM起動後は、指定されたクラスをロードし、このクラスのmainメソッドを実行する
  • java 完全修飾クラス名 [引数]の形式で実行する
  • ※ 完全修飾クラス名:パッケージ名を含むクラス名

例:以下のようなクラスがある場合

package com.example.demo.original;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
  • Java SE11以降で、javacコマンドを使わずに「ソースファイルモード」で直接実行できる。
    • java ソースファイル名.java [引数]の形式で実行する
    • この場合、メモリ上にコンパイル後のクラスファイルに相当するバイトコードを出力している
> java /Users/takumi.kuroiwa/java-silver-se-17-practice/demo/src/main/java/com/example/demo/original/Main.java
Hello, World!
  • javacコマンドを使ってコンパイルしてから実行する場合は、コンパイルして生成されたクラスファイルを実行する
    • javac 完全修飾クラス名.javaでコンパイル:javacコマンドは「ソースファイル名.java」を指定する
    • javac -d . demo/src/main/java/com/example/demo/original/Main.javaでコンパイル:-dオプションを使うと、指定したディレクトリにクラスファイルを出力する
    • java 完全修飾クラス名 [引数]で実行: javaコマンドで実行する際には「完全修飾クラス名」を指定する
> javac -d . /Users/takumi.kuroiwa/java-silver-se-17-practice/demo/src/main/java/com/example/demo/original/Main.java
> java com.example.demo.original.Main
Hello, World!

実行時はjava com.example.demo.original.Mainのように、パッケージ名を含む完全修飾クラス名を指定する。

  • ソースファイルモードでの実行の際には、ファイル拡張子が.javaはなしでも実行可能
    • --sourceオプションを使うと、Java SE11以降でソースファイルモードでの実行が可能
> mv Main.java Main
> java --source 21  Main
Hello, World!

クラス内にインナークラスがある場合

  • インナークラスを含むクラスを実行する場合、インナークラスの名前も含めて完全修飾クラス名を指定する必要がある
    • javacでコンパイルすると、Main.class と Main$InnerClass.class が生成される
package com.example.demo.original;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
        InnerClass inner = new Main().new InnerClass();
        inner.innerMethod();
    }

    class InnerClass {
        public void innerMethod() {
            System.out.println("This is an inner class method.");
        }
    }
}

ソースファイルモードで実行

> java /Users/takumi.kuroiwa/java-silver-se-17-practice/demo/src/main/java/com/example/demo/original/Main.java
Hello, World!
This is an inner class method.

クラスファイルをコンパイルして実行
javacコマンドでコンパイルすると、インナークラスのクラスファイルも生成される

> javac -d . /Users/takumi.kuroiwa/java-silver-se-17-practice/demo/src/main/java/com/example/demo/original/Main.java
> java com.example.demo.original.Main                                                                        
Hello, World!
This is an inner class method.

javaコマンドの引数

  • javaコマンドの引数は、スペースで区切られた文字列として渡される
package com.example.demo.original;

public class Main {
  public static void main(String[] args) {
    System.out.println(args.length);
    for (String arg : args) {
      System.out.println(arg);
    }
  }
}
  • バッククォートでエスケープされると文字として扱われるので注意
> java Main.java a \" a\" "a "b c
5
a
"
a"
a b
c

まとめ

  • java 完全修飾クラス名 [引数]で実行
  • Java11以降はソースファイルモードあり(java ソースファイル名.java
  • javacでコンパイルする場合は-dオプションで出力先を指定
  • インナークラスはコンパイル後、$記法でクラスファイルが作成される

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?