Java反射之基础概念

0.实例准备

复制代码
package com.blueStarWei.invoke;

public class Student {
    private String name;
    
    public Student() { }

    public Student(String name) {
        super();
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + "]";
    }
}
复制代码

 

 

1. 什么是反射

  反射是在运行时(非编译时)动态获取类型的信息(比如:接口信息、成员信息、方法信息等),然后根据这些获取的信息创建对象、访问修改成员、调用方法。

 

2. 获取Class类的方式(3种):

//方式一:Class.forName("包名.类名")
Class stu1 = Class.forName("com.blueStarWei.invoke.Student");
//方式二:类名.class
Class stu2 = Student.class;
//方式三:实例.getClass()
Class stu3 = new Student().getClass();

 

3. 创建实例对象

    3.1 通过无参构造的方式创建实例

Student student = (Student) stu.newInstance();

备注:1)New一个对象的时候,类可以没有被加载;使用newInstance()方法的时候,必须保证这个类已经加载且已经连接【通过Class.forName()实现】。

Class clazz = Class.forName("com.blueStarWei.invoke.Student");
Student student1 = (Student) clazz.newInstance();
//等价于
Student student2 = new Student();

     3.2 通过有参构造的方式创建实例

Class clazz = Class.forName("com.blueStarWei.invoke.Student");
Constructor<?> constructor = stu.getConstructor(String.class);
Student winn = (Student) constructor.newInstance("Winn");

 

4. 反射的作用

  4.1 判断任意一个对象所属的类;

  4.2 判断任意一个类所具有的成员变量和方法;

  4.3 调用任意对象的方法;

  4.4 构造任意一个类的对象;

  4.5 生成动态代理操作。

posted @   blue星空  阅读(311)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示