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
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









