当前位置: 首页 > news >正文

反射-Class类分析

反射相关的主要类

  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、输出 aClassSystem.out.println(aClass);//显示aClass对象 是哪个类的Class对象 这里是com.kuang.reflection.CarSystem.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 = "耀夜黑";@Overridepublic String toString() {return "Car{" +"brand='" + brand + '\'' +", price=" + price +", color='" + color + '\'' +'}';}
}

反射优点和缺点

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

http://www.lryc.cn/news/61197.html

相关文章:

  • Let’s Make C++ Great Again——string与常用字符处理函数
  • 〖Python网络爬虫实战⑰〗- 网页解析利器parsel实战
  • 中电金信:生成式AI热潮下,文本智能走向何方?
  • 探索Linux设备树:硬件描述与驱动程序的桥梁
  • UNION ALL用法 以及 UNION ALL和UNION的区别
  • Ubuntu Linux操作
  • MongoDB常用语句(CURD)
  • 一篇文章让你彻底学会--节流(并且自己可以手写)
  • C++ 形参是类的指针 class * 通过new的方式创建对象
  • 手把手教你将项目部署到服务器!
  • OpenHarmony应用开发-ArkUI方舟开发框架简析
  • 【Transformer系列(4)】Transformer模型结构超详细解读
  • Idea启动运行报错:Error:java: 无效的源发行版: 13
  • 【元分析研究方法】学习笔记1.形成问题
  • 2023年3月 青少年软件编程(Python) 等级考试试卷(五级)
  • 必须要知道的hive调优知识(上)
  • 什么是Cache Aside Pattern与延迟双删
  • frp 流量特征
  • Unity --- UGUI(Unity Graphical user interface)--- Canvas画布
  • c++积累6-内联函数
  • ESP32学习笔记13-MCPWM主要用于无刷电机驱动
  • MyBatis-plu 和 JPA 对比
  • 一文详解Python中多进程和进程池的使用方法
  • 前端部署发布项目后,如何通知用户刷新页面、清除缓存
  • 项目上线|慕尚集团携手盖雅工场,用数字化推动人效持续提升
  • Java重载 与封装、继承
  • sed正则表达式替换字符方法
  • 不讲废话普通人了解 ChatGPT——基础篇第一课
  • MATLAB计算气象干旱指标:SAPEI
  • GPT对SaaS领域有什么影响?