首页 > 编程语言 > 详细

Java反射初识

时间:2019-05-25 18:30:55      阅读:103      评论:0      收藏:0      [点我收藏+]

反射Class类

Class类是反射的根源,很多很多的类,经过抽象,得出了一个Class类,包括类名,构造方法,属性方法等。得到Class类的对象的三种方式:

  1. Object类中的getClass()方法
  2. 通过类名.class
  3. 通过Class.forName()方法

代码示例:

import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class ReflectionDemo {

    //JUnit测试的方法一定要是public

    /**
     * 获取Class对象的三种方式
     */
    @Test
    public void function() {
        //第一种方式:通过对象的getClass方法获得
        Dog dog = new Dog("Tom", "男", 5);
        Class dogClass1 = dog.getClass();

        //第二种方式:通过类.class
        Class dogClass2 = Dog.class;

        //第三种方式:通过Class.forName()方法
        try {
            Class dogClass3 = Class.forName("reflection.Dog");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过反射来实例化对象
     */
    @Test
    public void function2() {
        try {
            Class<Dog> dogClass = (Class<Dog>) Class.forName("reflection.Dog");

            //获取默认的构造器,并创建一个Dog对象
            Dog dog1 = ((Dog) dogClass.newInstance());//调用了默认的无参构造
            System.out.println("dog1:" + dog1);

            //获取一个指定的构造器,并通过构造器创建一个Dog对象
            Constructor<Dog> constructor = dogClass.getConstructor(String.class, String.class, int.class);
            Dog dog2 = constructor.newInstance("Tom", "female", 4);
            System.out.println("dog2:" + dog2);

            //获取所有的构造方法
            Constructor<?>[] constructors = dogClass.getConstructors();
            for (int i = 0; i < constructors.length; i++) {
                //获取构造方法的参数个数
                System.out.println("构造方法参数个数为:" + constructors[i].getParameterCount());
            }

            //获取所有属性(包括私有属性)
            Field[] fields = dogClass.getDeclaredFields();
            for (int i = 0, len = fields.length; i < len; i++) {
                //获得属性的修饰符
                int modifiers = fields[i].getModifiers();
                System.out.println(Modifier.toString(modifiers) + " " + fields[i].getType() + " " + fields[i].getName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

总结

通过反射获取到的Class对象,我们可以用于创建对象,获得构造器,获取参数类型等。

Java反射初识

原文:https://www.cnblogs.com/zxfei/p/10923212.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!