Javaのリフレクション/システムプロパティ/メモリ
目次
1. リフレクション
2. システムプロパティ
3. メモリ
1. リフレクション
リフレクションで実行時にクラスの型情報を取得、クラス操作を行います。
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; // テスト用のクラス class MyClass{ public String name; public MyClass(String name){ this.name = name; } public String getName() { return this.name; } public int run(int val) { return (val + 10); } } public class Main { public static void main(final String[] args){ // クラス情報の取得 Class<?> info = MyClass.class;; System.out.println("クラス名 : " + info.getSimpleName()); System.out.println("親クラス : " + info.getSuperclass()); System.out.println("---"); // クラスの操作 try { // MyClassをインスタンス化 Class<?> cls = MyClass.class; Constructor<?> con = cls.getConstructor(String.class); MyClass my = (MyClass)con.newInstance("テスト"); // メンバ変数(フィールド)の値を取得する Field f = cls.getField("name"); System.out.println(f.get(my)); // メンバ変数(フィールド)の値を設定する f.set(my,"書き換え"); System.out.println(f.get(my)); // メソッドを実行する Method m = cls.getMethod("run", int.class); System.out.println(m.invoke(my, 5)); }catch (Exception e) { System.out.println(e.getMessage()); } } }
結果
クラス名 : MyClass
親クラス : class java.lang.Object
---
テスト
書き換え
15
親クラス : class java.lang.Object
---
テスト
書き換え
15
2. システムプロパティ
OS名や実行時のパスなどを取得します。
public static void main(final String[] args) { // JREのバージョン System.out.println(System.getProperty("java.version")); // OS System.out.println(System.getProperty("os.name")); // OSのアーキテクチャ System.out.println(System.getProperty("os.arch")); // 実行時のパスを取得する System.out.println(System.getProperty("user.dir")); // ファイル区切り文字(UNIXでは"/") System.out.println(System.getProperty("file.separator")); // 行区切り文字(UNIXでは"\n") String linefreed = System.getProperty("line.separator"); linefreed = linefreed.replace("\r", "CR").replace("\n", "LF"); System.out.println(linefreed); }
結果
1.8.0_162
Windows 7
amd64
C:\Pleiades\workspace\test1
\
CRLF
Windows 7
amd64
C:\Pleiades\workspace\test1
\
CRLF
その他のシステムプロパティは公式のAPI解説書サイトをご覧下さい。
公式のAPI解説 | getProperties |
---|
3. メモリ
JVM(Java仮想マシン)のメモリ状況を取得します。
public static void main(final String[] args) { // 空きメモリー System.out.println("空きメモリー:"+ Runtime.getRuntime().freeMemory()/1024/1024 + "MB"); // 現在のメモリー総容量 // ※状況に応じて最大メモリー容量まで自動的に増加する System.out.println("現在のメモリー総容量:" + Runtime.getRuntime().totalMemory()/1024/1024 + "MB"); // 最大メモリー容量 System.out.println("最大メモリー容量:" + Runtime.getRuntime().maxMemory()/1024/1024 + "MB"); }
結果
空きメモリー:121MB
現在のメモリー総容量:123MB
最大メモリー容量:1810MB
現在のメモリー総容量:123MB
最大メモリー容量:1810MB
スポンサーリンク
関連記事
公開日:2018年05月06日
記事NO:02645