import java.lang.reflect.*;
class Stu{
private String name;
private int age;
public boolean flag =true;
public Stu(){}
public Stu(String name,int age){
this.setName(name);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void study(){
System.out.println("i can study");
}
private void speak(String languge,int x){
System.out.println("I can speak :"+languge+" "+x);
}
public String toString(){
return this.name+" : "+this.age;
}
}
public class ReflectThree {
public static void classForInstance() throws Exception{
//第一步:我们通过上面的三种方式可以得到类的信息;
@SuppressWarnings("unchecked")
Class<Stu> stuClass = (Class<Stu>)Class.forName("GeneIterAdaptReflect.com.Stu");
//第二步:如果该类Stu有无参的构造器,那么就可以用类信息调用newInstance();来创建一个实例
//好处:降低了于类(子类)之间的耦合,比如Stu是一个接口或者超类,我们就可以利用多态直接与接口打交道,来调用子类的方法
Stu stu1 = stuClass.newInstance();
stu1.setName("丽丽");
System.out.println(stu1.getName());
//第三步:通过有参数的构造器实例对象;
@SuppressWarnings("unchecked")
Constructor<Stu>[] constructor = (Constructor<Stu>[])
stuClass.getConstructors();
Stu stu2 = constructor[1].newInstance("qian",36);
System.out.println(stu2.toString());
}
public static void methodInfo() throws Exception{
@SuppressWarnings("unchecked")
Class<Stu> stuClass = (Class<Stu>)
Class.forName("GeneIterAdaptReflect.com.Stu");
//第四步:获取类的全部方法 public void study();
Method[] methods = stuClass.getDeclaredMethods();
for(Method m:methods){
StringBuilder s = new StringBuilder();
//返回修饰符:
int x = m.getModifiers();
String modifyString = Modifier.toString(x);
//返回值类型;
Class<?> returnType = m.getReturnType();
//Type returnType = m.getGenericReturnType();
//参数个数及类型:
Class<?>[] paraClass = m.getParameterTypes();
if(paraClass.length==0){
s.append("");
}
else{
for(int i=0;i<paraClass.length;i++){
s.append(paraClass[i].getSimpleName()+" ");
}
}
System.out.println(modifyString+"
"+returnType.getSimpleName()+" "+m.getName()
+"("+s+")");
}
}
public static void fieldInfo() throws Exception{
Class<Stu> stuClass = (Class<Stu>)
Class.forName("GeneIterAdaptReflect.com.Stu");
Field[] fields = stuClass.getDeclaredFields();
for(int i=0;i<fields.length;i++){
System.out.println(Modifier.toString(fields[i].
getModifiers())+" "+fields[i].getName());
}
}
public static void callSpeakMethod()throws Exception{
//第一步拿到对象
Class<Stu> stuClass = (Class<Stu>) Class.forName
("GeneIterAdaptReflect.com.Stu");
Constructor<Stu>[] constructor=
(Constructor<Stu>[]) stuClass.getConstructors();
Stu stu3 = constructor[1].newInstance("qian",26);
//第二步拿到方法
Class<?>[] paraClass =new Class[]
{String.class,int.class};
Method privateMethod =
stuClass.getDeclaredMethod("speak",paraClass);
//设置私有方法的可访问权
privateMethod.setAccessible(true);
//调用方法
privateMethod.invoke(stu3, "English French",2);
}
/**
* @param obj: 对象
* @param fieldName :属性名称(字段名)
* @param paraType : 参数类型
* @param value :想赋予的值
* @throws Exception
*/
public static void setter(Object obj,String fieldName,Class<?> paraType,Object value) throws Exception{
//set的方法的标准写法:setName,而传进来的fieldName是字段
名 比如 name;要转换成标准形式;
String firstChar =
fieldName.substring(0, 1).toUpperCase();
String methodName = firstChar+fieldName.substring(1);
obj.getClass().getDeclaredMethod
("set"+methodName, paraType).invoke(obj, value);
}
/**
* @param obj :对象名
* @param fieldName :要get的字段名
* @return Object :返回任意类型值
* @throws Exception
*/
public static Object getter(Object obj,String fieldName) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
String firstChar =
fieldName.substring(0, 1).toUpperCase();
String methodName = firstChar+fieldName.substring(1);
//return obj.getClass().getDeclaredMethod("get"+methodName,null).invoke(obj,null);
return obj.getClass().getDeclaredMethod("get"+methodName).invoke(obj);
}
public static void main(String[] args) throws Exception {
Class<Stu> stuClass = (Class<Stu>) Class.forName("GeneIterAdaptReflect.com.Stu");
Stu stuObj = stuClass.newInstance();
setter(stuObj,"name",String.class,"zhangsan");
String getString =(String)getter(stuObj,"name");
System.out.println(getString);
}
}
相关推荐
llama.cpp部署大模型
llama.cpp如何部署大模型
系统学习】Java基础3之反射
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。
2023 年全国网络安全行业职业技能大赛-电子数据取证分析师-决赛WP_2023网络安全行业赛取证
数据库取证工具里面可以恢复删除掉的数据带红叉的就说删除过的,game库下面announcement_detail表里面update_time字段使用sql语句时间戳最大为1513243355转换时间为2017-12-14 17:22:35。
java学习之线程3与反射
线程Daemon(),守护线程,该方法必须在启动线程前调用,主线程结束时,子线程也结束.join() 插队,哪个线程调用这个方法 就会拿到CPU的执行权,先完成执行.分析:在多线程程序中 这个单例安全吗? 为什么?如何解决?加锁来保证同一时间只有一个线程来创建对象这样效率高不高?如何提高效率public class Test { public static void main(String[] ...
Ubuntu 20.04 上 Geant4 安装避坑全记录:从源码编译到 B1 示例跑通(含数据包加速下载)
本文详细记录了在Ubuntu 20.04系统上从源码编译安装Geant4的全过程,包括环境准备、依赖安装、CMake参数解析、多线程编译优化以及数据包加速下载等关键步骤。特别针对B1示例的测试与验证提供了完整流程,帮助科研人员和学生避开常见安装陷阱,提升粒子物理模拟效率。
利用李雅普诺夫函数开发航天器姿态控制系统
本文基于李雅普诺夫函数控制方法,采用修正罗德里格斯参数(MRP)描述航天器姿态,设计了姿态控制律。通过构造能量型李雅普诺夫函数,推导出保证系统稳定的控制闭环方程,实现了航天器从初始状态到目标状态的稳定转换。针对MRP参数可能出现的奇异性问题,采用影子集进行规避。仿真实验包含两种模式:非追踪模式(目标状态为0)和追踪模式(目标为三角函数轨迹)。结果表明,该控制方法能够有效实现姿态稳定和轨迹跟踪,在短暂调整后即可精确跟随目标轨迹。控制律设计考虑了不同参考系间的转换,通过DCM矩阵处理目标角速度的坐标变换问题。
Java反射学习总结(3)——反射的基本操作
方法的反射主要由下面两个步骤完成:第一步先通过Class类的基本API获取到某一个方法,第二部通过method.invoke(对象,参数列表)函数实现反射 package reflectTest; import java.lang.reflect.Method; public class MethodDemo { public static void main(String[] args)
腾讯开源CubeSandbox:为Agent打造可随时丢弃的安全沙箱环境
在人工智能与自动化技术快速发展的今天,智能体(Agent)在执行复杂任务时往往需要独立、完整的计算环境,但环境失控带来的安全风险一直是落地瓶颈。为解决这一痛点,可丢弃式沙箱技术应运而生。它通过轻量虚拟化原理实现环境秒级重建,并严格隔离宿主资源,即使Agent执行了恶意或误操作,也不会波及其他系统。这种技术价值在于平衡了灵活性与安全性,使开发者敢于赋予Agent更多自主操作权限。目前,这类技术已广泛应用于AI编程、自动化测试、数字员工、恶意代码分析等真实场景,成为Agent可靠运行的基石。腾讯开源的CubeS
Java反射reflect学习笔记_3:反射类的方法
今天给大家po出我的第三份关于学习反射的笔记,关于对类的方法的反射。其中包括静态方法,普通方法,带参数的方法,以及最重要的String[]数组的方法的反射以及需要注意的细节问题,都是基础,所以请各位多多包涵! 有关前面两篇文章请看下面: Java反射reflect学习笔记_1:反射的简述 Java反射reflect学习笔记_2:反射类的构造函数
3. 动手运行第一个 SAP Fiori Elements 应用(ListReport 类型)
这个代理服务器能够自动监听我们 Fiori Elements 应用里向 ES5 Demo 系统发送的 OData 请求,拦截这个请求,并通过 Node.js 代码向 ES5 服务器转发,拿到响应数据后再交还给 Fiori Elements 应用。后者对自己发出的请求被代理这件事情一无所知。本文的任务是,大家按照我的介绍,在本地成功运行笔者准备的这个 Fiori Elements 应用。的错误消息, 说明大家安装的 Node.js 版本没有达到本地运行 Fiori Elements 的最低要求。
Unity之ASE+ShaderGraph+VFX入门到精通 目录
这里是ASE+ShaderGraph+VFX从入门到精通专栏的目录,不停更新中,有问题随时留言或者私信。
Java反射学习-3 - 反射获取属性,方法,构造器
1 package cn.tx.reflect; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.Method; 6 import java.util.Arrays; 7 /** 8 * 三 ...
【信息系统项目管理师】高分论文:论信息系统项目的整合管理(绩效考核系统)
我们将项目管理计划中的子计划包括项目范围、进度、成本、质量管理计划,过程改进计划,人力资源管理计划,风险、采购管理计划,干系人管理计划,项目范围、成本、进度基准作为依据,查看项目的各个方面,通过组织全体团体成员会议来解读由各监控过程提供的信息,之后我与项目管理团队一起制订所需措施,确保项目绩效达到预期要求。在一个项目中,变更是必然的,也是不可避免的,进度拖延,成本失控,客户有新的需求等都会引起项目的变更。在本项目中,我要求有处于工作状态的产品,开发人员才可以对其任意修改,修改完成后,重新入库即可。
java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器
1 packagecn.tx.reflect;23 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 importjava.lang.reflect.Method;6 importjava.util.Arrays;7 /**8 * 三 、Class类中要掌握的方法:9 * 反射获取具体属性、方法、构造器10 ...
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
Java学习笔记3——注解与反射
所有框架的底层:Mybatis、SpringBoot 1. 注解 Annotation是从JDK5.0开始引入的新技术。Annotation不是程序本身,可以对程序作出解释,可以被其他程序(如编译器)读取。Annotation的格式以“@注释名”在代码中存在,还可以添加一些参数值,例如@SuppressWarnings(value=“unchecked”)。Annotation可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息,可以通过反射机制编程实现对这
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
Java学习总结3——枚举类和反射机制
Java枚举类和反射机制 一、Java枚举类(Enum): 在某些情况下,一个类的对象是有限且固定的,对于这种对象的实例有限且固定的类,在 Java 中被称为枚举类(Enum);枚举类是为了提高代码可读性,原始值是int类型(从0开始)。 创建角色类型枚举类(RoleTypeEnum):Java 中使用 enum 关键字来定义枚举类 // 定义一个角色类型的枚举类 public enum Rol...
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
Java学习之反射机制学习笔记--3
3、深入学习反射机制----取得类的结构 java.lang.reflection包中的几个类: Constructor--表示类中的构造方法 Field--表示类中的属性 Method--表示类中的方法 这三个都是AccessibleObject的子类 操作类: packa...
Java反射机制的学习(3)
Java反射机制的学习 Java反射机制是Java语言被视为准动态语言的关键性质。Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法)。 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制。你会嗤之以鼻地告诉我,Java反射机制
J2SE学习笔记2.3Java中的反射
Java中的反射 一.java中反射的概述 java反射机制是运行状态中,对于任意一个类,能够知道这个类的所有属性和方法、对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态调用对象的方法的功能就是java的反射机制。 在博客看到的一个特别简洁的概念解释:反射就是把java类中的各种成分映射成一个个的Java对象 例如:一个类有:成员变量、方法、构造方法、包等等的许多信...
Java反射机制学习3
代理静态代理方法interface ClothFactory{ void productCloth(); }class NikeClothFactory implements ClothFactory{ @Override public void productCloth() { System.out.println("Nike Factory product
Java反射学习(3)(“反射“机制获取成员变量及详细信息(Field类))
本篇博客的内容:对"Class"对象实例化的常见三种方式以及使用时机的回顾。java中使用"反射"机制获取成员变量(字段)及内部的详细信息。使用Field类以及提供的相关方法进行成员变量(字段)的相关操作(获取成员变量对象、获取访问修饰符、获取存储的值、设置成员变量的值...)
java高级开发学习之--反射机制(3)
1.通过前面的学习,自己感觉其实反射机制也没有很神秘,无非就是类本身就是一个对象,通过类的类类型去动态加载类。 2.今天学习类的方法的反射操作以及通过反射来了解集合泛型的本质。A.方法的反射操作: 首先我们创建一个类class A{ public void print(int a,int b){ System.out.println(a+b); } pub
JAVA技术之——反射 学习笔记-3 Method
JAVA反射机制定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 本笔记讲述如何使用反射获取一个类的所有方法并改变其内容。 [code="java"] import java.lang.reflect....
传智播客java学习3--静态导入、反射
今天我在听张孝祥老师讲的Java加强视频,张老师说:Java基础加强知识代表了一种java功力,也代表了你的学习能力,能掌握这些知识说明你以前的学习能力不错,具备这些知识,也说明你未来掌握新知识的潜能不错。我觉得张老师说的有道理,我的Java基础不是很好,因此,我要好好学学张老师讲的基础加强视频。 首先张老师讲了Myeclipse的一些使用技巧,讲了如何配置自己的Workspace与如何新
973



被折叠的 条评论
为什么被折叠?



