Java反射机制学习–2

Java反射机制详解—-感谢该博主提供内容以供学习

获取一个对象的父类与实现的接口

package net.xsoftlab.baike;
import java.io.Serializable;
public class TestReflect implements Serializable {
    private static final long serialVersionUID = -2862585049955236662L;
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("net.xsoftlab.baike.TestReflect");
        // 取得父类
        Class<?> parentClass = clazz.getSuperclass();
        System.out.println("clazz的父类为:" + parentClass.getName());
        // clazz的父类为: java.lang.Object
        // 获取所有的接口
        Class<?> intes[] = clazz.getInterfaces();
        System.out.println("clazz实现的接口有:");
        for (int i = 0; i < intes.length; i++) {
            System.out.println((i + 1) + ":" + intes[i].getName());
        }
        // clazz实现的接口有:
        // 1:java.io.Serializable
    }
}

这是那位博主的实现类,我看着太类了于是大致看了一下使用的方法,自己实现了一个。

package com.azrael.p;

public class Test extends NewClass implements impl{
    public static void main(String[] args) throws ClassNotFoundException{
        String o = "com.azrael.p.Test";
        Class<?> class1 = Class.forName(o);
        System.out.println("父类是"+class1.getSuperclass().getName());

        Class[] im = class1.getInterfaces();
        System.out.println("实现的接口有:");
        for(int i=0;i<im.length;i++){
            System.out.println(im[i].getName());
        }
    }
}

之前运行那位博主的代码打印的是最终父类Object,感觉不是很合适,于是自己创建了一个空的类NewClass以及一个空接口impl来测试结果。
打印结果:

父类是com.azrael.p.NewClass
实现的接口有:
com.azrael.p.impl

可以看到打印的是类与接口在项目内的绝对路径,再测试一下继承外部类会打印怎样的结果。
由于使用的是SE的开发环境,于是我导入了mysql的JDBC驱动程序,随便找了一个类进行继承后进行测试,可以看到结果依旧是包+类路径,这里可能理解有错误,请忽略。
打印结果:

父类是com.mysql.jdbc.AssertionFailedException
实现的接口有:
com.azrael.p.impl

这里应该是导入到了项目所以应该是Java虚拟机解决了这个问题,所以输出还是包类地址。

发表评论

您的电子邮箱地址不会被公开。