S-JIS[2023-09-23/2024-09-24] 変更履歴
Java21〜24のmainメソッド簡略化(プレビュー版)について。
2023/9/19にリリースされたJava21で、プレビュー版としてmainメソッドが簡略化できるようになった。
従来は、javaコマンドによって実行が開始されるメソッドは、「public static void main(String[])
」だった。
(JDK1.5(Java5)で、引数には「String...
」も可能になったが)
これに対し、public・staticおよび引数(String[])を省略できるようになる。
また、クラスを定義せずにmainメソッドだけでコンパイルできるようになる。
(暗黙のクラス(暗黙に宣言されたクラス)という扱いになる)
Java23(3rdプレビュー)で、暗黙のクラス内では以下のメソッドが(importしなくても)使えるようになった。[2024-09-24]
このためにjava.io.IOというクラスが新設され、そのstaticメソッドとして上記のメソッドが定義されている。
そして、以下のimport文が暗黙に宣言された扱いになる。
import static java.io.IO.*;
さらに、java.util.Listやjava.math.BigDecimal等の、java.baseモジュールに含まれているクラスも暗黙にインポートされる。
これは、モジュールのインポートの構文(これもJava23時点ではプレビュー機能)を使って暗黙に宣言される。
import module java.base;
mainメソッド簡略化はJava21〜24ではプレビュー版の機能なので、この機能を使いたい場合はコンパイル時にjavacコマンドに--enable-previewを付ける必要があり、
また、実行時にjavaコマンドに--enable-previewを付ける必要がある。
JShellで試す場合もjshellコマンドに--enable-previewを付ける。
> javac --enable-preview --release 21 Example.java > java --enable-preview Example
> java --enable-preview --source 21 Example.java
mainメソッドの例。
パターン | 例 | 備考 |
---|---|---|
基本(Main.javaのMainクラスを定義) | public class Main { |
|
クラス定義を省略 | public static void main(String[] args) { |
Main.javaにこれを書いている場合、 コンパイルするとMain.classが生成される。 |
mainメソッドのpublic・static・引数を省略 | void main() { |
Java23の「暗黙にインポートされたメソッド」の例。[2024-09-24]
void main() { String line = readln("何か入れて"); println(line); var list = List.of(line); println(list); println(BigDecimal.valueOf(123)); }
暗黙に宣言されたクラスでは、readln()やprintln()といったメソッドが使える。
また、java.util.Listやjava.math.BigDecimal等もimport文無しで使える。
これらは暗黙に宣言されたクラスの場合のみ有効。
すなわち、package文を宣言したり、クラスを定義(class ImplicitClassExample{ }
)したりすると、使用できない。
> java --enable-preview --source 23 ImplicitClassExample.java