Javaの構文についての詳細について説明する前に、JavaソースファイルからJavaプログラムを実行するまでの流れについて説明します。
Javaアプリケーションを作成する時には、Jarファイルを作成して実行するのが正しい方法です。[図上]
Jarファイルは、classesディレクトリ以下に生成されたクラスファイルをZIP形式で圧縮したファイルです。
圧縮することにより、ファイルサイズや管理するファイルが減ることがメリットです。
1つのJavaクラスファイルでもJarファイルを作成する習慣をつけましょう。
Javaソースファイルが完成したら、javacコマンドを実行し、Javaソースファイルをコンパイルし、クラスファイルを作成します。
javacコマンドの実行例1
c:¥projects¥education>javac -d deploy¥classes -s src¥main¥java -encoding UTF8
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.java
c:¥projects¥education>
javacコマンドの実行例2
c:¥projects¥education>javac -d deploy¥classes -s src¥main¥java -encoding UTF8
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥*.java
c:¥projects¥education>
javacコマンドの実行例3 別ファイルに纏めて定義
c:¥projects¥education>javac @arglist @srclist
arglist(c:¥projects¥education配下)
-d deploy¥classes
-s src¥main¥java
-cp deploy¥classes
-encoding UTF-8
srclist(c:¥projects¥education配下)
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.java
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.java
src¥main¥java¥jp¥co¥yourcompany¥education¥util¥Test.java
javacコマンドは、Java8のインストールでPathにJDKのbinを設定し、
カレントディレクトリのどのディレクトリからも正しいパスを指定すれば、どこのディレクトリでも実行できます。
ただし、javacコマンドはプロジェクトディレクトリで実行するがJavaの作法です。
上記例では「c:¥projects¥education」ディレクトリから実行するのが正しいやり方です。
Javaソースファイル名は、絶対パスでする方法と相対パスで指定する方法がありますが、
プロジェクトディレクトリ(eduction)からの相対パスで指定する方法が一般的です。
GUIのEclipseもそのようになっています。
Javaソースファイルが1つの場合には、実行例1のように1つのファイルを指定します。
Javaソースファイルが同一パッケージに複数のある場合には、
実行例2のように「*.java」で指定します。指定したディレクトリ配下のJavaソースファイルが全てコンパイルされます。
実行例3のケースが、AntやEclipseなどの便利なツールが出る前はこの方法が多かったです。
javacのオプションファイルarglistとJavaソースファイルsrclistの2つを作成し、@で指定して利用します。
残念な事に*.javaの省略系はファイルには利用できません。全て列記します。
srclistの上から順にコンパイルされれるので、
結合密度の低い(他のクラスをimport節している数が少ない)順から定義しなくてはいけませんでした。
利用頻度の高いオプションについて説明します。
オプション | 利用例 | 説明 |
---|---|---|
-d ディレクトリ名 (相対パス/絶対パス) |
-d deploy¥classes | Javaソースファイル(*.java)をコンパイルし、 Javaクラスファイル(*.class)を出力するディレクトリ先を指定します。 指定するディレクトリは先に作成されている必要があります。 |
-s ディレクトリ名 (相対パス/絶対パス) |
-s src¥main¥java | Javaソースファイル(*.java)ソースファイルの格納先ディレクトリを指定します。 Javaソースファイル(*.java)がpackageに属している場合には、 そのパッケージ階層のディレクトリを作成する必要があります。 例)jp¥co¥yourcompany¥education¥samplesこのディレクトリは全て作成します。 |
-encoding エンコード名 | -encoding UTF-8 | Javaソースファイル(*.java)のエンコードを指定します。 前頁で説明したUTF-8やEUC_JP等です。 このオプションが指定されていない場合には、 プラットフォームのデフォルト・エンコードが利用されます。 |
-cp クラスパスディレクトリ名 | -cp deploy¥classes; lib¥sprig-mvc¥Hogehoge.jar; |
Javaソースファイル(*.java)をコンパイル時に参照するJavaクラスファイル(*.class) 「;」(セミコロン)で複数指定します。 -d で指定したクラスファイルの出力先ディレクトリが忘れがちになるのでご注意を |
注意-cpでクラスパスをしているする方法があります。
環境変数「classpath=クラスパスディレクトリ」で設定できます。
この方法は、コマンドプロンプトのsetLocalとendLocalのように一時的な変数としての利用は、良いです。
Webアプリケーションサーバのサーバ環境でシステム環境変数に設定されると保守性が著しく低下します。
その他オプションについては、Oracle社Java8のjavac説明頁をご参照下さい。
jarコマンドは、指定したディレクト及びファイルを指定したjarファイル名にZIP形式で圧縮します。
jarコマンドは、Javaのコマンドで一番重要で開発現場の問題発生時に一番利用されるコマンドです。
Linux,Unix系OSでCUIでコマンドベースで作業下で、Javaアプリケーション、Webアプリケーションが動かないなどのトラブル時に
配備したjarファイルの中身を確認する作業は多々あります。
jarコマンドや引数は色々ありますが、本書に記載された内容さえ抑えておけば十分開発現場で利用できます。
jarコマンド 新規作成時
c:¥projects¥education>jar -cvf deploy¥education-main.jar -C deploy¥clases .
マニフェストが追加されました
jp/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/samples/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/samples/BoxOnly.classを追加中です(入=224)(出=188)(16%収縮されました)
jp/co/yourcompany/education/samples/ExecBoxOnly.classを追加中です(入=1148)(出=598)(47%収縮されました)
jp/co/yourcompany/education/samples/HowToWriteJava.classを追加中です(入=1899)(出=1033)(45%収縮されました)
jp/co/yourcompany/education/util/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/util/Test.classを追加中です(入=360)(出=253)(29%収縮 されました)
javaコマンドによる実行確認
c:¥projects¥education>java -cp deploy¥education-main.jar
jp.co.yourcomapny.education.samples.HowToWrite
こんにちは 日本へ
-------- END outputMessage method------------
メッセージが指定されていません。
-------- END outputMessage method------------
インスタンス2のHello
-------- END outputMessage method------------
こんにちは 日本へ
> 結果を保存するファイル名
jar 閲覧コマンド
c:¥projects¥education>jar -tvf deploy¥education-main.jar > jar_result.txt
> jar_result.txt
はjar -tvf コマンド結果の標準出力への出力値をjar_result.txtにリダイレクトしてテキストに出力しています。javacコマンドの実行例1
c:¥projects¥education¥temp>jar -xvf education-main.jar
jarコマンドには、jarファイルに特定のファイルを追加及び抽出することができます。
本書では、その方法を説明しないのは、配備環境のjarファイルに手を加える行為はデグレなどの発生率が高くなるからです。
知っていても損はないので、Oracle社 jarコマンドを一通り学習するのも良いでしょう。
Javaソースファイルが完成したら、javacコマンドを実行し、Javaソースファイルをコンパイルし、クラスファイルを作成します。
通常の手順では、jarコマンドでjarファイルを作成してからjavaコマンドを実行します。
本書では、圧縮しないJavaクラスファイルの状態とjarファイルの両方について説明します。
javaコマンドの実行例 jarから実行する
c:¥projects¥education>java -cp deploy¥education-main.jar jp.co.yourcompany.education.samples.HowToWriteJava
こんにちは 日本へ
-------- END outputMessage method------------
メッセージが指定されていません。
-------- END outputMessage method------------
インスタンス2のHello
-------- END outputMessage method------------
こんにちは 日本へ
javaコマンドの実行例 classファイルのクラスパスを指定して実行する
c:¥projects¥education>java -cp deploy¥classes jp.co.yourcompany.education.samples.HowToWriteJava
※.結果割愛
「実行するクラス名 実行引数1 実行引数N」は指定したJavaクラスに引数を0~N個引き渡すことができます。
Javaの実行部メソッドpublic static void main( String[] args )
の String[] args
の引数が、
正に、実行引数1~実行引数Nを意味します。
実行引数を与えなければ、String[] args
のサイズは0です。
実行引数を与えた場合には、args配列に指定された順番で設定されます。
その他細かいオプションについては、Oracle社のjavaコマンドをご確認下さい。
このコマンドは、JavaソースコードからJavaAPIを生成するコマンドです。
Javaの前準備で説明させて頂いた
JavaAPI「C:¥developer¥java¥javaapi¥java8api¥api¥index.html」と同じように
指定したJavaソースファイルからJavaアプリケーションのAPIをhtmlで生成します。
javadocコマンドの実行例 srclistを利用
c:¥projects¥education>javadoc -cp deploy¥education-main.jar - -d docs¥api -encoding UTF-8 -docencoding UTF-8 @srclist
-header "<h1>IT生涯学習Tech 教育用サンプルアプリ</h>" -footer " ©raita.kuwabara "
ソース・ファイルsrc¥main¥java¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.javaを読み込んでいます...
ソース・ファイルsrc¥main¥java¥jp¥co¥yourcompany¥education¥samples¥ExecBoxOnly.javaを読み込んでいます...
ソース・ファイルsrc¥main¥java¥jp¥co¥yourcompany¥education¥util¥Test.javaを読み込んでいます...
Javadoc情報を構築しています..
標準Docletバージョン1.8.0_112
全パッケージとクラスの階層ツリーを作成しています...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥ExecBoxOnly.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥Test.htmlの生成中...
docs¥api¥overview-frame.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥package-frame.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥package-summary.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥package-tree.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥package-frame.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥package-summary.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥package-tree.htmlの生成中...
docs¥api¥constant-values.htmlの生成中...
全パッケージとクラスのインデックスを作成しています...
docs¥api¥overview-tree.htmlの生成中...
docs¥api¥index-all.htmlの生成中...
docs¥api¥deprecated-list.htmlの生成中...
全クラスのインデックスを作成しています...
docs¥api¥allclasses-frame.htmlの生成中...
docs¥api¥allclasses-noframe.htmlの生成中...
docs¥api¥index.htmlの生成中...
docs¥api¥overview-summary.htmlの生成中...
docs¥api¥help-doc.htmlの生成中...
srclist
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.java
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.java
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥ExecBoxOnly.java
src¥main¥java¥jp¥co¥yourcompany¥education¥util¥Test.java
オプション | 利用例 | 説明 |
---|---|---|
-d ディレクトリ名 (相対パス/絶対パス) |
-d docs¥api | javadocが生成するapiの出力先ディレクトリ 指定するディレクトリは先に作成されている必要があります。 |
-cp クラスパスディレクトリ名 | -cp deploy¥classes | Javaソースファイル(*.java)をjavadoc実行時に参照するJavaクラスファイル(*.class) 「;」(セミコロン)で複数指定します。 |
-encoding エンコード名 | -encoding UTF-8 | Javaソースファイル(*.java)のエンコードを指定します。 前頁で説明したUTF-8やEUC_JP等です。 このオプションが指定されていない場合には、 プラットフォームのデフォルト・エンコードが利用されます。 |
-docencoding エンコード名 | -docencoding UTF-8 | javadocで出力するAPI用のhtmlファイルのエンコードを指定します。 前頁で説明したUTF-8やEUC_JP等です。 このオプションが指定されていない場合には、 プラットフォームのデフォルト・エンコードが利用されます。 |
-header "ヘッダー用のHTMLタグ" | -header "<h1>IT生涯学習Tech 教育用アプリケーションAPI<h1>" | 出力されるapiのヘッダーに指定したhtmlタグを設定します。 通常開発したアプリケーション名やアプリケーションのログ画像などhtmlタグで設定します。 |
-footer "フッター用のHTMLタグ" | -footer "©raita.kuwabara " | 出力されるapiのフッターに指定したhtmlタグを設定します。 通常納品先の会社名のライセンス表記をします。 |
Oracle社 javadocコマンドにその他全てのオプションが記載されています。
このように綺麗にAPI中にコメントがしっかり記述されているのは、初めてのJavaの基本スタイルで
Javaソースファイルにコメントをきちんとjavadoc形式で記述しているからです。
次頁にコメントの記述方法について説明する際にjavadoc形式のコメントを説明します。