首页 > 编程语言 >Java反射机制

Java反射机制

时间:2024-09-22 18:03:50浏览次数:8  
标签:反射 Java reflection Student Constructor test 机制 com Class

1、什么是Java反射机制?Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。 这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。

2、

3、获取Class对象,有4种方法
//
package com.test.reflection;
public class Student {
private String studentName;
public int studentAge;
public Student() {
}
private Student(String studentName) {
this.studentName = studentName;
}
}
//

// 1.通过字符串获取Class对象,这个字符串必须带上完整路径名
Class studentClass = Class.forName("com.test.reflection.Student");
// 2.通过类的class属性
Class studentClass2 = Student.class;
// 3.通过对象的getClass()函数
Student studentObject = new Student();
Class studentClass3 = studentObject.getClass();
//4.对于基本数据类型(如 int、double 等),可以通过包装类的 TYPE 字段来获取对应的 Class 对象。
Class<?> intClass = Integer.TYPE;
Class<?> doubleClass = Double.TYPE;

4、获取这个类的成员变量

getDeclaredFields用于获取所有声明的字段,包括公有字段和私有字段,getFields仅用来获取公有字段:
// 1.获取所有声明的字段
Field[] declaredFieldList = studentClass.getDeclaredFields();
for (Field declaredField : declaredFieldList) {
System.out.println("declared Field: " + declaredField);
}
// 2.获取所有公有的字段
Field[] fieldList = studentClass.getFields();
for (Field field : fieldList) {
System.out.println("field: " + field);
}
运行程序,输出如下:
//
declared Field: private java.lang.String com.test.reflection.Student.studentName
declared Field: public int com.test.reflection.Student.studentAge
field: public int com.test.reflection.Student.studentAge

5、获取构造方法

// 获取所有声明的构造方法
Constructor[] declaredConstructorList = studentClass.getDeclaredConstructors();
for (Constructor declaredConstructor : declaredConstructorList) {
    System.out.println("declared Constructor: " + declaredConstructor);
}
```plaintext
运行程序,输出如下:

declared Constructor: public com.test.reflection.Student()
declared Constructor: private com.test.reflection.Student(java.lang.String)
6、反射可以通过Class类动态创建类的实例。使用5中的构造方法创建对象
通常有两种方式:
1使用无参构造函数创建实例。
2使用带参构造函数创建实例。
如果类有一个无参构造函数,可以直接使用newInstance()方法创建对象
// 使用无参构造函数创建实例
Class studentClass = Class.forName("com.test.reflection.Student");
Constructor c1 = studentClass.getDeclaredConstructor()
Object s1 = c.newInstance();
// 使用含参构造函数创建实例
根据5中输出的信息可知Student类的含参构造方法的参数是String类型
Constructor c2 = studentClass.getDeclaredConstructor(String.class)
Object s2 = c2.newInstance(“torrentgz”)

7、Java反射创建对象效率高还是通过new创建对象的效率高?
通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低

标签:反射,Java,reflection,Student,Constructor,test,机制,com,Class
From: https://www.cnblogs.com/torrentgz/p/18425603

相关文章

  • 使用java做一个微信机器人
    微信机器人这个功能,目前在市面上运用的还是不是很多,每个人实现机器人的目的也不一样,有的为了自动加好友;有的为了自动拉群:也有的为了机器人对话聊天等等一系列。想必大家对微信机器人感兴趣的伙伴,也在aithub上面搜索了很多吧,但是大多数走到一半遇到各种bug就没有继续坚持走下去,原......
  • java基础
    java基础语法对象/类/方法/实例/继承对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色,名字,品种;行为有:摇尾巴,叫,吃等。类:类是一个模版,它描述一类对象的行为和状态方法:方法就是行为,一个类可以有很多方法。逻辑运算,数据修改以及所有动作都是在方法......
  • java计算机毕业设计抗疫资源调配平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球抗击新冠疫情的持久战中,资源的有效调配成为决定战役成败的关键因素之一。面对突如其来的疫情高峰,各地医院对医疗物资、人力资源的需求急剧增加......
  • java计算机毕业设计篮球论坛系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在数字化时代,篮球运动作为一项广受欢迎的全民健身活动,其爱好者群体日益庞大且需求多元化。随着互联网的普及,篮球爱好者们渴望一个集信息交流、技术分......
  • java计算机毕业设计吕梁学院微门户(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,高等教育领域正经历着深刻的变革。吕梁学院作为一所充满活力与潜力的高等学府,其信息化建设对于提升教学质量、优化管理效率、......
  • 论 JAVA 集合框架中 接口与类的关系
    前言这是笔者在学习过程中的一篇"备忘录",其目的是能用最EZ最粗鄙的语言口述出JAVA集合框架中所有类与接口的关系本人在不断地学习中,总会混淆集合框架中的类和接口,以及它们的作用关系,虽然不影响我的使用,但是我也不想一直糊涂下去,故而趁知识还没混淆之际,赶紧写下来.......
  • JavaScript二进制浮点数和四舍五入错误
    二进制浮点数和四舍五入错误实数有无数个,但JS通过浮点数的形式,只能表示有限个数,JS表现的常常是真实值的近似表示。二进制无法表示类似于0.1这样的十进制数字,只能机器近似于0.1,看如下代码:<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>3......
  • JavaScript中的Math对象详解
    JS中的算术运算基本运算:加减乘除求余数,+-*/%.复杂运算:通过Math对象的属性定义的函数和常量来实现。代码实现:<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>3.1.3JS中的算术运算</title></head><body>......
  • 关于​​Vue学习笔记6中纯JavaScript实现的改进优化1
    0前言在 Vue学习笔记6:分别使用纯JavaScript和Vue的v-if指令来有条件地渲染网页元素_PurpleEndurer@5lcto的技术博客_51CTO博客的纯JavaScript实现有条件地渲染网页元素中,我们列举了苹果、桔子和葡萄3种水果,并使用3个<p>...</p>来对应,在实现显示用户选择的水果的showFruit函数中,......
  • 【计算机专业毕设最新Java必过毕设选题2025】基于springboot的高校跳蚤市场管理系统(源
    作品简介 Hi,各位同学好呀!今天向大家分享一个最新完成的高质量毕业设计项目作品基于springboot的XXX管理系统项目评分(最低0分,满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分使用技术前端:html/js/css后端:springboot数据库:MySql服务器:apache-tomcat......