スッキリわかるJava入門 実践編 第7章 JVM制御とリフレクション
第7章 JVM制御とリフレクション
外部プログラムの実行
Javaプログラムから他のプログラムを実行したいときは、ProcessBuilderクラスを使って起動させることができます。
TeraPadを起動する
TeraPadを起動し"calcreport.txt"というファイルを作成します。
public class Main { public static void main(String[] args) throws Exception { System.out.println("計算を開始します。"); System.out.println("計算を終了しました。TeraPadを起動します。"); ProcessBuilder pb = new ProcessBuilder( "\"C:\\Program Files (x86)\\TeraPad\\TeraPad.exe\"", "calcreport.txt" ); pb.start(); } }
システムプロパティの利用
システムプロパティを利用することでJavaを実行する環境に依存せずにプログラムを作ることができます。これは、クラスファイルのバイトコードが特定のハードウェアにOSに依存しないため、JVMが動作する環境ならば同じように振る舞うからです。
例えば、改行コードはOSによって異なりますが、システムプロパティを利用して、改行コードを
final String BR = System.getProperty(line.separator);
とすることで、どのOSでも正しく改行を実行することができます。
コンソールにシステムプロパティを出力する
一覧を表示する
import java.util.Iterator; import java.util.Properties; public class Main { public static void main(String[] args) { System.out.println("ご利用のJavaのバージョン"); System.out.println(System.getProperty("java.version")); Properties p = System.getProperties(); Iterator<String> i = p.stringPropertyNames().iterator(); /* システムプロパティ * JREのバージョン、OSの名前、ユーザの名前など */ System.out.println("[システムプロパティ一覧]"); while(i.hasNext()) { String key = i.next(); System.out.println(key + " = " + System.getProperty(key)); } } }
リフレクション
実行時型情報を取得します。型情報はあるクラスにはどのようなメソッドやフィールド変数があるかといった情報です。
リフレクションの用途は、プログラムのテストや解析のためであったり、privateメンバを操作したりしたいときに使われます。例えば、privateなメンバの値を書き換えることができます。その他に、メンバ名を用いた特殊な処理を作るときに使用されます。最後に、利用するクラスを動的に追加・変更できるようにしたいときに使用されます。
Stringクラスの型情報の取得
public class Main { public static void main(String[] args) { // Stringに関する情報を取得して表示する Class<?> info1 = String.class; System.out.println(info1.getSimpleName()); System.out.println(info1.getName()); System.out.println(info1.getPackage().getName()); } }
感想
なんか実践的な内容ですね。僕のプログラムの規模では使うことは多分あまりないと思いますが、こういうような情報があるということを頭にいれておきます。
参考サイト
スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)
- 作者: 中山清喬
- 出版社/メーカー: インプレス
- 発売日: 2014/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (7件) を見る