尚学堂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() {
    }

posted on   luzhouxiaoshuai  阅读(202)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示