Java反射之Class,Constructor,Field

Java之反射四大核心类Class/Constructor/Method/Field 本文章主要介绍什么是反射?在反射操作中的四大核心类:Class类、Constructor类、Method类、Field类以及这些类常用的方法。 阅读详情


1.反射的基石-->Class

1.1.Class类
 一个类被类加载器加载到内存中,占用一片存储区域,这个空间里面的内容就是类的 字节码 .
 不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示;
 显然可以为这些组织字节码内容的类定义一个类型,它就是Class类型
 
1.2.如何得到各字节码对应的Class类实例对象
 三种方式:
(1)Class cls1=类名.class 相对简单,还是需要明确类名:System.class;
(2)Class cls1=对象.getClass();必须要明确具体的类,并创建对象:new Date().getClass();
(3)Class cls1=Class.forName("完整的类名(带包名)"):Class.forName("java.util.Date")

1.3.九个预定一个Class实例对象
 八个基本类型+void.Class
 Integer.class包装类的字节码

 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  String str1 = "abc";
  Class cls1 = str1.getClass();
  Class cls2 = String.class;
  Class cls3 = Class.forName("java.lang.String");
  System.out.println(cls1==cls2);
  System.out.println(cls1==cls3);
  
  System.out.println(cls1.isPrimitive());//是否基本类型,String不是基本类型
  System.out.println(int.class.isPrimitive());//true
  System.out.println(int.class==Integer.class);//false,Integer.class是包装类的字节码
  System.out.println(int.class==Integer.TYPE);//true,Integer.TYPE是其基本类型的字节码
  
  //数组类型的Class类型实例对象Class.isArray
  System.out.println(int[].class.isPrimitive());//false
  System.out.println(int[].class.isArray());//true
 }


 

 只要在源程序中出现的类型,都有各自的Class实例对,例如 int[],void 等等;

 

2.反射
 就是把JAVA类中的各种成分反射成为相应的JAVA类

 反射的好处: 大大的增强了程序的扩展性.

3.反射的基本步骤:
(1)获得Class对象,就是获取到指定的名称的字节码文件对象.
(2)实例化对象,获得类的属性/方法或构造函数.
(3)访问属性、调用方法、调用构造函数创建对象.

4.构造方法的反射应用
4.1.得到某个类中所有的构造方法
Constructor  constructors[]= Class.forName("").getConstructors();;

4.2.得到某一个具体的构造方法:用参数定义
Constructor  constructor= Class.forName("").getConstructor(StringBuffer.class);

4.3.用反射构建类的实例:中转作用
(1)class-->constructor-->new object:带参数的Constructor的newInstance()

 String  name="com.dsa.类名";
得到某一个指定构造方法
 onstructor  constructor= Class.forName("").getConstructor(String.class);
创建实例对象
     Object obj=constructor.newInstance("abc");

 通过构造方法的反射来new String(new StringBuffer("abc")):newInstance();
 
/*详细说明:
 //用getConstructor来获取构造方法,用StringBuffer.class反射的SB类定义了构造方法的参数类型,
 Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
 
 //使用Constructor的newInstance创建实例,注意构造参数对象参数保持之前定义的类型;
 //编译期不知道反射过来的对象是String,要加上该类句柄;
 String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));
 
 System.out.println(str2.charAt(2));*/

(2)class-->new object
 如果构造方法不带参数,可以直接用Class.newInstance();

 String  name="com.dsa.类名";

寻找该名称类文件,并加载进内存,并非产生Class对象
 Class cls=Class.forName(name);
用Class的newInstance()产生该类的对象
 Object obj=cls.newInstance();

5.成员变量 Filed类的反射: 代表某个类中的一个成员变量

 ReflectPoint pt1=new ReflectPoint(3,5);
 Field fieldY=pt1.getClass().getField("y");
 System.out.println(fieldY.get(pt1));//get()获得具体对象中的值
 
 Field fieldX=pt1.getClass().getDeclaredField("x");//获得变量不管私有或保护;
 fieldX.setAccessible(true);//暴力反射!
 System.out.println(fieldX.get(pt1));
 
 成员变量的综合应用:
 changeStringValue(pt1);
 System.out.println(pt1);

private static void changeStringValue(Object obj) throws Exception {
 Field[] fields=obj.getClass().getFields();//获得obj的所有变量
 for(Field field: fields){
//  if(field.getType().equals(String.class))//都是字节码用==;
  if(field.getType()== String.class){
   String oldValue = (String)field.get(obj);
   String newValue = oldValue.replace('b', 'a');//用a替换b;
   field.set(obj, newValue);//两个对象交换;
  }
 }
 
}



 

Oracle19c集群节点故障恢复:从主机重装到重新加入集群的完整指南 本文详细介绍了Oracle19c集群节点故障恢复的全过程,从主机重装到重新加入集群的完整指南。重点讲解了保持集群配置一致性、彻底清理故障节点残留信息和分阶段验证等关键恢复原则,帮助DBA高效解决节点故障问题,确保集群稳定运行。 阅读详情

相关推荐

一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法

这篇博客发出来后,我用 Rust 复现代码出现问题。为此,我对对照了 sklearn 的相关代码,反复比较了两天,发现一处 bug,把 += 误写成了 =,导致数据量大的时候完全无法聚类。这个debug过程让我仔细梳理的 AP 算法的计算过程,今天我对这篇博客做了大规模修改,以便能原样展现原论文思想。

程序猿视角 3219

Java 反射四大核心类:Class、Constructor、Method、 Filed

【代码】【无标题】

林夕 1321

Matlab子图排版终极指南:从tight_subplot到tiledlayout的实战对比

本文深入对比Matlab中两大子图排版工具:社区经典函数tight_subplot与官方现代布局管理器tiledlayout。针对默认subplot产生的子图间距与边缘距离问题,详细解析两者的设计哲学、参数控制与实战应用,帮助用户根据版本与需求选择最佳方案,实现高效、精确且美观的多子图排版。

weixin_29048309的博客 360

java 反射基础、Class、Field、Method、Constructor类 简介

反射可以在运行时动态分析类,解析一个类的构造器、字段、方法、接口等等。反射有何作用,或者说为什么要学习反射?作为应用程序员,一般情况下,并不直接使用反射,它更多在构建系统级程序时发挥用处,如实现Java的Spring框架、框架Mybatis时,反射的使用处处可见。Java的其他特性或技术也依赖于反射,如代理(Proxy)等等。所以,学习反射,很大程度上并不是让我们直接使用反射,而是更好地理解框架的实现,更好地操纵框架。

whatday的专栏 1502

WorkVisual传输程序报错_发现一个内部错误

WorkVisual传输程序报错_发现一个内部错误

qq_16401025的博客 2458

网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。

网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。

HWP18612324139的博客 3637

2019初级JAVA面试题(一)

JAVA开发工程师笔试题 1. 下列哪个叙述是正确的() A) class中的constructor不可省略 B) Constructor必须与class同名,但方法不能与class同名 C) Constructor在对象被new时执行 D) 一个class只能定义一个constructor 答案:C 解析:class中的constructor是可以省略的;Constructor必须...

ACGkaka的博客 7405

7 中望CAD二次开发-标注(一)(ZRX C++)

尺寸标注是CAD设计中最常用的功能之一,软件内置了很多标注功能,可以通过使用这些标注工具,对需要标注的长度、角度等一个个进行标注。但这显然效率很低,学习CAD二次开发,就是要把人从重复的劳动中解放出来,实现批量标注。本文介绍,如何通过二次开发进行标注。

cilvsuanna的博客 339

Java中的构造器(Constructor)

首先说明,构造器和构造方法是一个东西,翻译的问题。假设一个场景,通常我们在实例化一个类的对象时,例如实例化人类的对象,一般是先new一个对象,然后再给该对象的属性赋值(名字、年龄等)。但是如果我想在实例化对象的时候,就直接设置该对象的属性,这时就要用到构造器。构造器的作用是初始化对象,要注意在调用构造器之前,对象已经实例化了(已经存在),调用构造器只不过是将对象初始化。[修饰符] 方法名(参数列表){方法体;}Tips: Tips:构造器Person是真真实实要被调用的,"构造器被调用了"这句话是会被输

SakuraMG的博客 2371

动力学约束下的运动规划算法——Hybrid A*算法(附程序实现及详细解释)

本文主要介绍动力学约束下的运动规划算法中非常经典的Hybrid A*算法,大致分为三部分,第一部分是在传统A * 算法的基础上,对Hybrid A * 算法的原理、流程进行理论介绍。第二部分是详细分析 MotionPlanning运动规划库中Hybrid A * 算法的源码,进一步深入对Hybrid A * 算法的具体细节 进行理解。 第三部分是结合前面第一部分的理论和第二部分的详细源码,对Hybrid A * 算法的流程进行综合的概括总结。

慕羽★的博客 1万+

Linux ARM平台开发系列讲解(网络篇)1.3 MDIO总线设备device和设备driver匹配

在设备和驱动都载入内核后,设备和驱动是如何匹配起来的呢?其实他们就是通过的唯一标识phyID进行匹配phy_dev和phy_drv是通过phy_bus_match函数进行匹配,匹配成功后会建立链表链接,具体流程如下图: 返回总目录......

DSMGUOGUO的博客 1098

Java面试题八

(此系列试题来源于Java面试宝典书籍) 一、选择题 1. 下列说法正确的是 A. class 中的 constructor 不可忽略 B.constructor 可以作为普通方法被调用 C. constructor 在一个对象被 new 时被调用 一个 class 只能定义一个 constructor 2. 下面正确的是 constructor 必须与 class 同名,但是...

qq_28400629的博客 1900

ICM20948 DMP代码详解(69)

ICM20948 DMP代码详解(69)

phmatthaus的专栏 617

Java 反射机制核心类详解:Class、Constructor、Method、Field

Java反射机制是一种强大的动态编程技术,允许程序在运行时获取和操作类的元数据(属性、方法、构造器等)。其核心包含四大类:Class(类元数据入口)、Constructor(构造方法操作)、Method(方法调用)和Field(属性读写)。反射提供了极高的灵活性,支持动态加载类、调用私有成员等特性,是Spring、MyBatis等框架的底层基础。但反射也存在性能开销、安全隐患等缺点,适用于框架开发、动态代理等场景,在常规业务中应谨慎使用。

qq_40303030的博客 3570

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java的反射技术(Class类,Constructor类,Method类, Field类)

Java编码时知道类和对象的具体信息,此时直接对类和对象进行操作即可,无需反射 如果编码时不知道类或者对象的具体信息,此时应该使用反射来实现 为什么要使用反射 反射就是把Java类中的各种成分映射成一个个的java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。 反射技术常见于框架中。 比如类的名称放在XML文件...

不思量 2266

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java 反射 (Class、ClassLoader、Constructor、Method、Field)

反射是Java中一个非常重要、非常强大的机制。曾看到一句话“反射是框架的灵魂”,初学时不懂,等到学完框架之后才慢慢理解其意。 什么是反射?我们先通过几个类和示例来初步体会一下反射。 一、ClassLoader类 什么是类加载器? ClassLoader是一个抽象类,它的实例是类加载器。磁盘上存在的xxx.class文件需要被加载进JVM才能执行。类加载器则是负责加载.class文件的...

paullinjie的博客 806

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java 反射 method_Java 反射 (Class、ClassLoader、Constructor、Method、Field)

反射是Java中一个非常重要、非常强大的机制。曾看到一句话“反射是框架的灵魂”,初学时不懂,等到学完框架之后才慢慢理解其意。什么是反射?我们先通过几个类和示例来初步体会一下反射。一、ClassLoader类什么是类加载器?ClassLoader是一个抽象类,它的实例是类加载器。磁盘上存在的xxx.class文件需要被加载进JVM才能执行。类加载器则是负责加载.class文件的对象,然后在JVM中生...

weixin_39873325的博客 122

java 反射基础 万字详解(Class-Constructor-Method-Field一条龙)

java反射还不会用?(Class-Constructor-Method-Field)一条龙带你搞定,超详细!基础看这一篇就够了!

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 2552

JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射

我们继续聊JAVA,这次比较有意思,那就是反射了。

m0_67403076的博客 240

JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践

JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Fiald,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识Class类 想要反射,你就必须要了解一个类——Class,我们知道,java程序中的各个java类都属于同一事物,我们通常用Classliability描述对吧,反射这个概念从JDK1.2就出

刘桂林的博客 6700

2021-10-25 Java的反射技术(Class类,Constructor类,Method类, Field类)

目录 为什么要使用反射 如何使用反射 Class类 class类的常用方法 Constructor类 1.Constructor类代表某个类中的一个构造方法 2.创建实例对象 Method类 1.Method类代表某个类中的一个成员方法 2.调用方法 Field类 1.Field类代表某个类中的一个成员变量 实例演示 反射:类的构造函数 ,创建类的对象 Constructor 反射:类中的方法 Method 反射:类中的字段(属性)File 反射技术优缺点 原文链接—..

Yiyan__的博客 1201

java 反射 field method_Java 反射基础(Annotation Class Package Field Method Constructor)

知识点类是用来描述对象的,而反射就可以理解为是用来描述类的。类中的属性包括:Class 类本身Package 类所在的包Field 类中的属性Method 类中的方法Constructor 类中的构造方法Annotation 类中的注解如何获取 Class1.Class 的静态方法,forName ("全类名")2. 类.class 关键字3. 对象引用.getClass () 方法 Object...

weixin_35724794的博客 146

Java反射/四大核心类/Class 、Constructor、Method、Field

反射 反射指的是对象的反向处理操作,根据对象取得对象的来源信息,在反射的世界里面,看重的不再是一个对象,而是对象身后的组成(类、构造、普通、成员)。 Class类是描述整个类的概念,也是整个反射的操作源头,在使用Class类的时候需要关注的依然是这个类的对象。 而这个类的对象的产生模式一共有三种: ①、任何类的实例化对象可以通过Object类中的getClass()方法取得Class类对象...

Guijun6的博客 6139

【JAVA】反射中的四大核心类---》Class,Constructor,Method,Field类

在刚开始的时候,我们一直进行的是正向操作,即根据包名.类名找到类,进而产生类的实例化对象,现在,我们的反射指的是对对象的反向处理操作,所谓的“反”,就是根据对象来取得对象的来源信息,下面是关于反射中四大核心类 1. Class类—》用来描述整个类信息 取得Class类的对象有三种方式: a. “类的实例化对象.getClass()”—>该方法有Ob...

eternal_01的博客 396

Java反射学习日记一(反射的基本概念与Class、Constructor、Method、Field的基本应用)

反射的基本概念与Class、Constructor、Method、Field的基本应用·反射的基本概念    在正常情况下,如果要使用一个类,则必须按照如下步骤操作:        ·使用import导入类所在的包(类:java.lang.Class)        ·明确使用类名称或者接口名称定义对象        ·通过关键字new进行类对象实例化(构造方法:java.lang.reflect...

d582693456的博客 668
上一篇: Java枚举特殊类及其静态常量实例
下一篇: Java反射之method,数组与Object关系,泛型参数
marching21
博客等级 码龄12年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值