反射-Class类分析

本文介绍了Java反射机制中的主要类,如Class、Method、Field和Constructor,以及如何通过Class对象获取类的信息和动态创建对象。示例代码展示了Class类的常用方法,如获取包名、全类名、创建实例以及访问和修改属性。同时,文章提到了反射的优缺点,如灵活性和性能影响。
摘要由CSDN通过智能技术生成

反射相关的主要类

  1. java.lang.Class:代表一个类,Class对象表示某个类加载后在堆中的对象
  2. java.lang.reflect.Method:代表类的方法,Method对象表示某个类的方法
  3. java.lang.reflect.Field:代表类的成员变量,Field对象表示某个类的成员变量
  4. java.lang.reflect.Constructor:代表类的构造方法, Constructor对象表示构造器 

Class类基本介绍

  1. Class也是类,,因此也继承Object类
  2. Class类对象不是new出来的,而是系统创建的
  3. 对于某个类的Class类对象,在内存中只有一份,因为类只加载一
  4. 每个类的实例都会记得自己是由哪个Class 实例所生成
  5. 通过Class可以完整地得到一个类的完整结构,通过一系列API
  6. Class对象是存放在堆的
  7. 类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据 (包括方法代码,变量名,方法名,访问权限等等)https://www.zhihu.com/question/38496907

Class常用方法

常用方法演示-应用实例

/**
 * 演示 Class类常用方法
 */
public class Class01 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        String classAllPath = "com.kuang.reflection.Car";
        //1、获取Car类对应的Class对象,<?>表示不确定的Java类型
        Class<?> aClass = Class.forName(classAllPath);
        //2、输出 aClass
        System.out.println(aClass);//显示aClass对象 是哪个类的Class对象 这里是com.kuang.reflection.Car
        System.out.println(aClass.getClass());//输出aClass运行类型 java.lang.Class
        //3、得到包名
        System.out.println(aClass.getPackage().getName());//包名 com.kuang.reflection
        //4、得到全类名
        System.out.println(aClass.getName()); //com.kuang.reflection.Car
        //5、通过 aClass 创建对象实例
        Object o = aClass.newInstance();
        System.out.println(o);
        //6、通过反射得到属性
        Field brand = aClass.getField("brand");
        System.out.println(brand.get(o));//得到品牌:梅德塞斯-奔驰
        //7、通过反射给属性赋值
        brand.set(o,"宝马");
        System.out.println(brand.get(o));
        //8、得到所有字段属性
        Field[] fields = aClass.getFields();
        for (Field f :fields) {
            System.out.println(f.getName()); //s属性名称
        }
    }
}

class Car {
    public String brand = "梅德塞斯-奔驰";
    public int price = 500000;
    public String color = "耀夜黑";

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                '}';
    }
}

反射优点和缺点

  1. 优点:可以动态的创建和使用对象(也是框架底意亥心),使用灵活,没有反射机制,框架技术就失去底层支撑。
  2. 缺点:使用反射基本是解释执行,对执行速度有影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值