尚学堂211 反射机制的介绍

反射的初步:

    动态语言: 程序运行时,可以改变程序结构或变量类型,如:Python,ruby,javascript等等。

package com.bjsxt.test.bean;

public class User {
    
    private int id;
    private int age;
    private String uname;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getUname() {
        return uname;
    }
    
    public void setUname(String uname) {
        this.uname = uname;
    }
    
    public void setUname() {
        this.uname = "高淇";
    }
    
    public User(int id, int age, String uname) {
        super();
        this.id = id;
        this.age = age;
        this.uname = uname;
    }
    
    //javabean必须要有无参的构造方法!
    public User() {
    }
}
package com.bjsxt.test;

/**
 * 测试各种类型(class,interface,enum,annotation,primitive type,void)对应的java.lang.Class对象的获取方式
 * @author 尚学堂高淇    www.sxt.cn
 *
 */
@SuppressWarnings("all")
public class Demo01 {
    
    public static void main(String[] args) {
        String path = "com.bjsxt.test.bean.User";
        
        try {
            
            Class clazz = Class.forName(path);
            //对象是表示或封装一些数据。  一个类被加载后,JVM会创建一个对应该类的Class对象,类的整个结构信息会放到对应的Class对象中。
            //这个Class对象就像一面镜子一样,通过这面镜子我可以看到对应类的全部信息。
            System.out.println(clazz.hashCode());
            
            Class clazz2 = Class.forName(path);    //一个类只对应一个Class对象
            System.out.println(clazz2.hashCode());
            
            Class strClazz = String.class;
            Class strClazz2 = path.getClass(); 
            System.out.println(strClazz==strClazz2);
            
            Class intClazz =int.class;
            
            int[] arr01 = new int[10];
            int[][] arr02 = new int[30][3];
            int[] arr03 = new int[30];
            double[] arr04 = new double[10];
            
            System.out.println(arr01.getClass().hashCode());
            System.out.println(arr02.getClass().hashCode());
            System.out.println(arr03.getClass().hashCode());
            System.out.println(arr04.getClass().hashCode());
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
}

程序的运行结果是:

true
319454176
357218532
319454176
1555073959

一般来说反射是这样实现的:
Class class = Class.forName(className);
Object object= class.newInstance();
所以需要一个无参的构造器来生成对象(因为没有给初始值)。所以在上面定义了:

  //javabean必须要有无参的构造方法!
    public User() {
    }
原文地址:https://www.cnblogs.com/kebibuluan/p/7268781.html