ホーム > カテゴリ > Java・Android >

Javaのリフレクション/システムプロパティ/メモリ

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

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

その他のシステムプロパティは公式の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





関連記事



公開日:2018年05月06日
記事NO:02645