反射获取Class对象的三种方式

Posted 北方丶有佳人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射获取Class对象的三种方式相关的知识,希望对你有一定的参考价值。

import cn.qujianlei.domain.Person;

public class ReflectDemo {

    public static void main(String[] args) throws ClassNotFoundException {

        /*
         * 
         * 反射技术:动态的获取类以及类中的成员,并可以调用该类的成员。
         * 以前有什么类就new什么对象。
         * 现在没有类,给什么类就new什么对象。
         * 
         * 
         * 反射技术的出现提高了程序的扩展性
         * 反射技术中最重要的一点:先获取到那个类。
         * 如何获取类呢?
         * 
         * 无论new什么对象,都需要先获取字节码文件
         * 如何获取呢?发现java已对字节码文件进行了描述用Class类完成的
         * 
         * 如何获取一个字节码文件的对象呢?
         * 
         * 方式一:Object getClass()方法,发现在反射技术里,该方法不合适,反射技术中不明确具体类
         * 
         * 方式二:所有的数据类型都由自己对应的class对象,表示方法很简单
         * 每一个数据类型都由一个默认的静态属性。.class用该属性就可以获取到字节码文件对象
         * 虽然不用对象调用,但还是要用具体的类调用静态属性。
         * 
         * 方式三:在Class类中找到了forName方法,通过名称就可以获取对应的字节码文件对象
         * 重点!!!!!
         * 
         */
        
//        methodDemo_1();
        
//        methodDemo_2();
        
        methodDemo_3();
        
        
    }
    
    public static void methodDemo_3() throws ClassNotFoundException {
        
        String className = "cn.qujianlei.domain.Person";
        
        Class clazz = Class.forName(className);
        
        System.out.println(clazz);
        
    }

    public static void methodDemo_2() {
        
        Class clazz = Person.class;
        Class clazz2 = Person.class;
        System.out.println(clazz==clazz2);
        
    }

    //获取Class对象的方式一
    public static void methodDemo_1(){
        
        //调用getClass先有对象
        Person p1 = new Person();
        Class c1 = p1.getClass(); 
        
        Person p2 = new Person();
        Class c2 = p2.getClass(); 
        
        System.out.println(c1==c2);
        
        
    }
    

}

 

public class Person {
        
    private String name;
    private int age;
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public Person() {
        super();
        System.out.println("person run");
        
    }
    
    public void show(){
        System.out.println("person show run");
    }
    
    public static void staticShow(){
        System.out.println("person static show run");
    }
    
    public void paramShow(String name,int age){
        System.out.println("show:"+name+"---"+age);
    }
    
    
}

 

以上是关于反射获取Class对象的三种方式的主要内容,如果未能解决你的问题,请参考以下文章

反射案例和反射获取字节码Class对象的三种方式

反射获取Class对象的三种方式

反射机制获取Class对象的三种方式

反射机制获取Class对象的三种方式:

Java反射获取类对象的三种方式

java 反射 获取Class对象的三种方式