ホーム > カテゴリ > 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


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律