近年はEclipseなどの統合開発環境を利用することが多く、コマンド操作に慣れていない方も多いかと思います。
一方で、javaコマンドはJavaアプリケーションを起動するための基本であり、最低限のコマンド操作を理解することはJavaプログラムを理解する上でも役に立ちます。
本記事では、javaコマンドの基本的な操作方法とオプションの使い方を初心者向けにご紹介していきます。
javaコマンドとは
javaコマンドは、Javaプログラムを実行する際に利用するコマンドです。
使い方
Javaのクラスファイルを実行する際の記述は下記です。
java [オプション] クラス名 [引数]
実行内容
javaコマンドを実行すると、指定したクラスがロードされ、クラスに定義されたmainメソッドを呼び出します。
[引数]に指定した値は、mainメソッドの引数args[]で受け取ることが可能です。
public static void main(String args[])
javacコマンドとjavawコマンド
javaコマンドと似たコマンドに「javac」コマンドと「javaw」コマンドが利用出来ます。
それぞれ少しずつ役割が異なるので確認しておきましょう。
javacコマンド
javacコマンドは、Javaのソースコードをコンパイルするためのコマンドです。
Javaのソースコードが記述された拡張子「.java」ファイルを、実行可能な拡張子「.class」ファイルに変換します。
Java言語のコンパイラ(Compiler)なので「javac」コマンドという名称になっています。
javawコマンド
javawコマンドは、javaコマンドと同じく、Javaアプリケーション実行用のコマンドです。
javaコマンドとの違いは、javawコマンドは元々ウィンドウアプリケーション用のコマンドであるため、コンソールとの繋がりがなくコンソールへの入出力が出来ません。
そのため、コンソールに何も出力したくない場合には、javawコマンドが利用されます。
javaコマンドのオプション
javaコマンドにはたくさんのオプションが用意されていますので、利用される頻度の高いオプションを中心にご紹介していきます。
標準オプション
標準オプションは、JVM全ての実装でサポートされるオプションです。
- -help
- -version
- -client
- -server
- -classpath(-cp)
- -jar
helpオプション
helpオプションを実行することで、javaコマンドの利用方法や利用可能なオプションが一覧表示されます。
困ったときはhelpオプションを実行してみましょう。
$java -help 使用方法: java [options] [args...] (クラスを実行する場合) 省略・・・ オプションは次のとおりです: -cp <ディレクトリおよびzip/jarファイルのクラス検索パス> -classpath <ディレクトリおよびzip/jarファイルのクラス検索パス> 省略・・・
versionオプション
versionオプションを実行すると、JREのバージョン情報が出力されます。
$java -version java version "13.0.1" 2019-10-15 Java(TM) SE Runtime Environment (build 13.0.1+9) Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
clientオプション
clientオプションは、Java HotSpot Client VMを利用するように指定するオプションです。
従来のデフォルト設定でしたが、Java8以降はLinux・Mac・Windowsの64bit版では-serverがデフォルト指定になったようです。
java -client
serverオプション
serverオプションは、Java HotSpot Server VMを利用するように指定するオプションです。
java -server
上述したように64bit版のOSでは大抵-serverがデフォルト指定となっているため、javaコマンド実行時、特に指定しない場合には-serverオプションが適用されている状態です。
classpathオプション
classpathオプションでは、Javaプログラム実行に必要なクラスファイルのディレクトリやjarファイル・zipファイルのパスを指定します。
classpathは複数指定することが可能で、Windowsの場合は「;(セミコロン)」Unix系の場合「:(コロン)」で区切ります。
java -classpath ファイルパス クラス名
最後のクラス名は、実行したいクラスファイルの名前です。
実行したいクラスファイルから参照するファイルパスをclasspathオプションで指定します。
jarオプション
jarオプションは、クラスファイルではなくjarファイルを実行する際に利用します。
java -jar jarファイル名
jarファイルからJavaプログラムを実行する際、マニフェストファイルが必要となります。
マニフェストファイルにはMain-Classパラメータの記述が必要で、起動するクラスを指定します。
非標準オプション
非標準オプションは、JVM全ての実装でサポートされるオプションではなく、「-x」から始まるオプションを指します。
- -X
- -Xms
- -Xmx
Xオプション
Xオプションは、-helpの非標準オプション版です。
非標準オプションとして利用可能なオプション一覧が表示されます。
$java -X -Xbatch バックグラウンド・コンパイルを無効にします -Xbootclasspath/a: ブートストラップ・クラス・パスの最後に追加します -Xcheck:jni JNI関数に対する追加のチェックを実行します 省略・・・
Xmsオプション
Xmsオプションでは、Javaの初期ヒープ・サイズを設定します。
サイズを設定する際、単位まで指定することが重要です。
java -Xms:64m クラス名
サンプルの場合は、初期ヒープ・サイズとして64メガバイトを指定しています。
Xmxオプション
Xmxオプションでは、Javaの最大ヒープ・サイズを設定します。
ヒープに設定出来る最大値はOS環境によって異なるようです。
java -Xmx:1g クラス名
サンプルの場合は、最大ヒープ・サイズとして1ギガバイトを指定しています。
ちなみにヒープ・サイズはガベージコレクションが実施された際に解放されるメモリ領域です。
さいごに: javaコマンドのオプションは都度調べて活用しよう
本記事では、javaコマンドの基本とオプションの使い方についてご紹介してきました。
javaコマンドのオプションはたくさんあるので全てを覚えようとする必要はありません。
helpオプションやインターネット上の情報を活用して、都度必要な情報だけを利用していく方法がおすすめです。
mainメソッドは「public」「static」「void」でString型の配列を引数として受け取る記述にする必要があります。