2
2

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の代名詞とも言えるあの構文が消えた...!?HelloWorldが3行で書けてしまう!?

Last updated at Posted at 2025-03-28

概要

オブジェクト指向の申し子と言っても過言では無いJavaのmain()関数の実装について大きな変更が追加され公開されたという噂を以前から耳にしていました。先日、ネットで以下の記事を見付けました。記事によると、Javaプログラムのmain()関数の実装は随分シンプルな構文になるとのことです。そこで、実際に記事に掲載されている内容を検証してみることにしました。

現状この変更はプレビュー指定となっており、今後変更される可能性が有ります。

おさらい

従来Javaのmain()関数は、Main.javaファイルにMain Classを実装し、public static voidな関数main()関数として実装していました。筆者は、Javaのプログラムは入社した時の研修でやったぐらいで、それ以降は殆どJavaのプログラムは書いていませんが、今でもあのガチガチにオブジェクト指向に則った実装は覚えています。世界で最も有名な?サンプルプログラムHelloWorldを実装すると以下の様になります。

従来のHelloWorld
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

因みにC言語とPythonでHelloWorldを実装すると以下の様になります。

C言語のHelloWorld
#include <stdio.h>

int main(void)
{
    printf("Hello, world!\n");

    return 0;
}
PythonのHelloWorld
print('Hello, world!')

これを見るといかにJavaでHelloWorldを実装しようとすると沢山呪文を入力しなければならないか分かります。

ところがこうなった

しかし、この数年でJavaを取り巻く情勢に変化?が訪れたのか、言語仕様に大きな変更が(試験的に)加わりました。Main Classの実装は不要(ビルド時に暗黙的に追加)となり、そもそもファイル名もMain.javaを強制されないという大盤振る舞い。。。:scream: :scream_cat: 試みに記事の内容を参考に新しい構文でHelloWorldを実装してみます。以下の様になりました。

新しい構文での実装
static void main() {
    System.out.println("Hello, world!");
}

たった三行で書けてしまっています。。。:scream: :scream_cat:

検証

検証環境

この新しい構文で実装したHelloWorldをNewHelloWorld.javaというファイルに保存した上で、ビルド→実行してみようと思います。今回検証に用いた環境は以下です。

  • OS: macOS Sequoia 15.3.2
  • JDK: Amazon Corretto 24

ビルド

従来の方法でビルドしようとすると、以下の様にエラーとなります。

$ javac NewHelloWorld.java 
NewHelloWorld.java:1: エラー: 暗黙的に宣言されたクラスはプレビュー機能であり、デフォルトで無効になっています。
static void main() {
       ^
  (暗黙的に宣言されたクラスを有効にするには--enable-previewを使用します)
エラー1個

ビルドコマンドは以下の様にオプションを指定して実行します。警告は出力されますが、無事ビルドが出来ました。

$ javac --release 24 --enable-preview -Xlint:preview NewHelloWorld.java 
NewHelloWorld.java:1: 警告: [preview] 暗黙的に宣言されたクラスはプレビュー機能であり、今後のリリースで削除される可能性があります。
static void main() {
       ^
NewHelloWorld.java:1: 警告: [preview] IOはプレビューAPIであり、今後のリリースで削除される可能性があります。
static void main() {
^
警告2個

従来のMain Classの方式で実装したmain()関数をMain.javaではないファイル名で保存し、ビルドしようとすると以下の様に、ビルドエラーになります。

$ javac test.java 
test.java:1: エラー: クラス Mainはpublicであり、ファイルMain.javaで宣言する必要があります
public class Main {
       ^
エラー1個

実行

以下の様に、実行時にも--enable-previewが必要です。無事Hello, world!のメッセージが出力されました。

$ java --enable-preview NewHelloWorld 
Hello, world!

まとめ

以前から噂を耳にして気になっていたJavaの新構文を試してみました。プレビュー機能ということで今後正式に採用されるか分かりませんが、正式に導入されれば、少なくともmain()関数の実装は楽になるのではないかと思います。

とても詳しく経緯をまとめられている素晴らしい記事を見付けたので参考資料として掲載します。

余談ですが、Amazon CorrettoはAmazon版のOpenJDKとのことで、筆者はつい最近知りました。Oracle OpenJDKからの乗り換え先を探していた所だったので、今後は贔屓にさせてもらおうと思います。サポート期間もOracle OpenJDKより一般に長い様です。但し、Correto 24は今年の10月までのサポートなので次のLTS版に今後アップグレード予定です。(この新構文がプレビュー機能から正式機能になりますように :pray: :pray_tone1: :pray_tone2:

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?