Hello World - 従来のバージョンと簡略版
プログラミング言語の学習では、通常、標準出力(一般には画面)に Hello World! という文字列を表示する Hello World と呼ばれるプログラムを書くことから始めます。Javaでは、次のように書くことができます。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
このプログラムには Hello という名前のクラスがあります。オブジェクト指向システムでは、クラスを使って対象となるアプリケーション領域の概念をモデル化します。クラスは、特定の概念に関連するデータと振る舞いの両方をカプセル化します。
Hello クラスには main という1つのメソッドがあります。このメソッドは、プログラムの実行時に指定されたコマンドライン引数(存在する場合)を含む文字列の配列を受け取ります。この例では、これらの引数は使用しません。
main メソッドは static です。つまり、インスタンスメソッドではなくクラスメソッドです。そのため、Hello クラスのオブジェクトを生成せずに呼び出すことができます。
main メソッドの内部では、println メソッドを呼び出しています。このメソッドは PrintStream クラスに属し、引数として渡された値を画面に出力した後、行終端を出力します。
println メソッドは System クラスの out フィールドを通じて呼び出されます。このフィールドの型は PrintStream で、システムの標準出力へのアクセスを提供します。
コンパイルと実行
Javaプログラムは、まず バイトコード と呼ばれる中間表現にコンパイルされるため、移植性が確保されます。その後、このバイトコードはJava Virtual Machine(JVM)によって実行され、基盤となるプラットフォームに適したマシンコードへ変換されます。
プログラムをコンパイルするには、Hello.java という名前のファイルに保存する必要があります。Javaでは、publicな型を含むファイルは通常、その型と同じ名前を持ちます。
統合開発環境(IDE)を使用することも、JDKがインストールされていれば、コマンドラインからコンパイラを直接呼び出すこともできます。
Javaプログラムは通常IDEで記述されます。IDEは、ソースコードのナビゲーション、リファクタリング、静的解析、コンパイル、テスト、デバッグなど、開発時の生産性を向上させる機能を提供します。
Javaでよく利用されるIDEには、次のようなものがあります。
javac コンパイラを使って、コマンドラインから直接プログラムをコンパイルすることもできます。
javac Hello.java
このコマンドは Hello.java を入力として受け取り、コンパイル済みのプログラムを含む Hello.class ファイルを生成します。
コンパイル後は、java コマンドを使ってプログラムを実行できます。
java Hello
出力は次のようになります。
Hello World!
Java 25以降のより簡単な方法
Java 25から、Java 21以降プレビューとして開発されてきた機能 Compact Source Files and Instance Main Methods が正式な機能になりました。これにより、明示的なクラス宣言を省略し、main メソッドを簡略化することで、少ない定型コードで小さなプログラムを書くことができます。
したがって、先ほどのプログラムは、現在のバージョンであるJava 26では次のように書けます。
void main() {
IO.println("Hello World!");
}
この場合、クラスを明示的に宣言したり、public static void main(String[] args) と記述したりする必要はありません。コンパイラは、このファイルが暗黙的にクラスを宣言しているものとして扱い、main メソッドはインスタンスメソッドにできます。
また、コンソールの簡単な入出力操作を提供する IO クラスも使用できます。Java 26では、IO は java.lang パッケージに属しているため、暗黙的に利用可能です。ただし、そのメソッドを呼び出すには、IO.println(...) のようにクラス名を使用する必要があります。
この機能はもはや preview ではないため、特別なコンパイルオプションは必要ありません。プログラムは通常どおりコンパイルできます。
javac Hello.java
そして、同じ方法で実行できます。
java Hello
java ランチャーを使ってソースファイルを直接実行することもできます。
java Hello.java
この場合、実行前にランチャー自身がソースコードをメモリ上でコンパイルします。この仕組みにより、明示的に .class ファイルを生成することなく、ソースファイルから直接プログラムを実行できます。
コンパクトなソースファイルは、小さな例、学習用プログラム、スクリプト、実験などで特に有用です。プログラムが大きくなり、より複雑な構造が必要になった場合には、明示的なクラスやメソッドの宣言を持つ従来の形式に自然に戻すことができます。
IDEが行う処理も基本的には同様です。コンパイルと実行に加えて、デバッグ、テスト、リファクタリング、プロジェクトの作成と管理、ライブラリの作成、バージョン管理など、多くの機能を提供します。
この記事は、Orientação a Objetos com Java(Eduardo Kessler Piveta 著)の内容をもとにしたものです。