Java Classクラス

Classクラスは、オブジェクトやインターフェースのランタイム状態を保存する。Class型のオブジェクトは、クラスがロードされるときに自動的に生成される。Classオブジェクトを明示的に宣言することはできず、一般的にはObjectクラスのgetClass()メソッドを利用してClassオブジェクトを取得する。

Classメソッド

メソッド 説明
static Class<?> forName(String className) パラメータとしてclassNameを受け取り、クラスをロードした後、そのクラスに該当するClassオブジェクトを返す。
String getName() クラス名を返す。
Class<? super T> getSuperclass() スーパークラスを返す。
T newInstance() Classが含んでいるクラスのインスタンスを生成する。

Classの例

例 1)

package com.devkuma.tutorial.java.lang;

class Parent {
    int a = 2;
    int b = 3;
}

class Child extends Parent {
    int c = 4;
}

public class ClassClass {

    public static void main(String[] args) {
        Parent p = new Parent();
        Child c = new Child();

        Class<?> pc = p.getClass();
        Class<?> cc = c.getClass();

        System.out.println("pc ClassName:" + pc.getName());
        System.out.println("pc Super ClassName:" + pc.getSuperclass().getName());

        System.out.println("cc ClassName:" + cc.getName());
        System.out.println("cc Super ClassName:" + cc.getSuperclass().getName());
    }
}

実行結果:

pc ClassName:com.devkuma.tutorial.javalang.Parent
pc Super ClassName:java.lang.Object
cc ClassName:com.devkuma.tutorial.javalang.Child
cc Super ClassName:com.devkuma.tutorial.javalang.Parent

例を見ると、クラス名とスーパークラス名を画面に表示していることを確認できる。

例 2)

package com.devkuma.tutorial.javalang;

class Calc {

    int a = 2;
    int b = 3;

    public int sum() {
        return a + b;
    }
}

public class ClassClass2 {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class<?> clazz = Class.forName("com.devkuma.tutorial.javalang.Calc");

        Calc calc = (Calc) clazz.newInstance();

        System.out.println("sum : " + calc.sum());

    }
}

実行結果:

sum : 5

これまではオブジェクトを生成するためにnewを使用してきた。上の例では、newを使わずにClass.forNamenewInstance()メソッドを利用してオブジェクトを生成している。これはクラスが通常のロード時にロードされるのではなく、Class.forName()を実行したときにロードされるということである。これをランタイム動的ロードという。この方式はセキュリティや品質面で問題がある可能性があるため、JDBCロードのような特別な場合を除き、このようにクラスを生成することは避けるべきである。