基本的な Java プログラムのコンパイルと実行
Java の統合環境を使わない意義
Java でアプリケーションを開発するときには、IntelliJ、NetBeans や Eclipse などの統合開発環境 (IDE) が利用される場合が多いです。
こうした統合開発環境は「開発に欠かせない」といっても過言ではないくらい便利です。プログラムの開発時には IDE を使うことをおすすめします。
Java の統合開発環境 (IDE) 選びに迷ったら IntelliJ をお勧めします。JetBrains 社が開発している IDE であり、Android Studio のベースとなっています。
しかし、そうした統合環境は時として、裏で実際に Java コンパイラがどのように動いているのか、素の Java が何を必要としているのか覆い隠してしまいます。
このために最初から統合開発環境ばかり利用していると、Java コンパイラでどのようにプログラムをコンパイルしていいかわからない、ということになりかねません。
また、少し仕組みを知っているだけで、IDE がどんな作業を簡単にしているのか、ということを理解できるようになります。
ここでは簡単な Java プログラムをテキストエディタとコンパイラから作成して、コンパイルはどのように行なうのか、どのように実行するのか体験してみたいと思います。
javac によるコンパイル
Java コンパイラは javac (Windows では javac.exe) です。これは JDK をインストールすると bin ディレクトリ以下にインストールされます。
準備として javac にパスが通っていることを確認してください。
ターミナルまたはコマンドプロンプトを立ち上げ、javac -version を実行してバージョン情報が表示されれば OK です。
javac -version
javac 11.0.5
インストールしている JDK のバージョンでバージョン表示は異なります。
もしコマンドとして認識されない場合は、PATH に JDK の bin ディレクトリを追加してください。
Windows ではコマンドプロンプト上で SET PATH=%PATH%;C:\Program Files\Java\jdk1.7.0_51\bin のようにするか、システムの環境変数設定で PATH を設定します。
システムの環境変数設定を変更した場合は、コマンドプロンプトを立ち上げなおします。(cmd.exe の起動時に cmd.exe が使う環境変数が設定されるためです。)
次の内容をメモ帳などのテキストエディタで作成して、 HelloWorld.java として保存します。
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello, world!");
}
}
このソースコードをコンパイルするには次のように、javac にファイル名を渡します。
javac HelloWorld.java
問題がなければ HelloWorld.java と同じディレクトリ内に HelloWorld.class というファイルが生成されるはずです。
入力の誤りなどがあれば次のようにエラー内容が表示されます。
javac HelloWorld.java
HelloWorld.java:3: error: package Syste does not exist
Syste.out.println("Hello, world!");
^
1 error
もしコンパイルの詳細を表示するには -verbose オプションを指定します。
javac -verbose HelloWorld.java
[parsing started SimpleFileObject[/Users/user1/test/HelloWorld.java]]
[parsing completed 23ms]
...
[loading /modules/java.base/java/lang/AutoCloseable.class]
HelloWorld.java:3: error: package Syste does not exist
Syste.out.println("Hello, world!");
^
[total 177ms]
1 error
Java の *.class ファイルの実行
さて、HelloWorld.class がコンパイラが生成したバイトコードということになります。
これを実行するには、次のように java にクラス名を渡します。
> java HelloWorld Hello, world!
このように "Hello, world!" が表示されれば OK です。
確かに上で書いたプログラムを javac でコンパイルし、その結果生成されたバイトコード HelloWorld.clss を java コマンドで実行できました。
「Java の分割コンパイルと CLASSPATH」では複数のソースコードからなるプログラムをコンパイルして実行します。