package com.heji.reflection;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class MyReflection {
private int a = 0;
public float b = 1.0f;
public void printf(String str) {
System.out.println(str);
}
public static void main(String[] args) {
try {
System.out.println("=======打印出所有的方法=======");
Class<?> cls = Class.forName("java.lang.Object");
Method[] methods = cls.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.toString());
}
System.out.println("----------------------------");
System.out.println();
System.out.println("=======打印出所有的public方法=======");
Method[] methods1 = cls.getMethods();
for (Method method : methods1) {
System.out.println(method.toString());
}
System.out.println("----------------------------");
System.out.println();
System.out.println("=======获取构造函数=======");
Constructor<?>[] constructors = cls.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor.toString());
}
System.out.println("----------------------------");
System.out.println();
System.out.println("=======获取变量=======");
Class<?> cls1 = Class.forName("com.heji.reflection.MyReflection");
Field[] fields = cls1.getDeclaredFields();
for (Field field : fields) {
System.out.println(field.getName() + "; " + field.getType()
+ "; " + Modifier.toString(field.getModifiers()));
}
System.out.println("----------------------------");
System.out.println();
System.out.println("=======调用方法=======");
Method method = cls1.getMethod("printf", new Class[] { String.class });
Object object = cls1.newInstance();
System.out.println(method.invoke(object, new Object[] { "Hello" }));
System.out.println("----------------------------");
System.out.println();
System.out.println("=======改变变量的值=======");
MyReflection myReflection = new MyReflection();
Field field1 = cls1.getDeclaredField("a");
Field field2 = cls1.getField("b");
System.out.println("before a = " + field1.get(myReflection));
System.out.println("before b = " + field2.get(myReflection));
field1.set(myReflection, 100);
field2.set(myReflection, 20.0f);
System.out.println("after a = " + field1.get(myReflection));
System.out.println("after b = " + field2.get(myReflection));
System.out.println("----------------------------");
System.out.println();
System.out.println("=======数组=======");
Class<?> cls2 = Class.forName("java.lang.String");
Object os = Array.newInstance(cls2, 8);
Array.set(os, 7, "kjdkl");
System.out.println(Array.get(os, 7));
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
下面我们将详细探讨如何利用Spring的注解AOP和反射来实现日志记录。 首先,我们需要理解Spring的AOP注解。最常用的两个注解是`@Aspect`和`@Pointcut`。`@Aspect`用于定义一个切面类,而`@Pointcut`则用来声明一个...
本资源介绍了一种基于雷克子波和反射系数进行褶积的方法,用于生成地震记录。褶积是一种数学运算,用于描述两个函数之间的相互影响。通过将雷克子波与反射系数进行褶积,我们可以模拟地震波在地下介质中的传播和反射...
反光标线逆反射系数试验记录表.pdf
3. 反射系数褶积:在地震记录中,反射系数是表征地层界面反射效率的物理量。通过对地震记录进行褶积运算,可以模拟出实际的地震响应。此过程涉及到地震波的传播模型和地层的物理特性。 4. 反射系数设计:设计反射...
偏移成像是将地震波的反射记录转换为地下构造的图像,以提供地质体的空间形态和位置信息。 研究中通过对比分析这些主要步骤,并总结出最佳的处理流程和处理参数,可以获得高品质的地震成像剖面,从而为地质解释人员...
通过雷克子波与地震反射系数的结合,可以模拟出地震记录,进而进行AVO正演分析。 反射系数是地震波在不同介质界面反射时的重要参数,它反映了地震波在两种介质之间传播的能量比例。利用雷克子波和反射系数进行褶积...
最近,一款名为“dizhen.zip_wigb_wigb 反射_合成地震记录_合成记录_地震wigb”的MATLAB工具包引起了广泛关注,它提供了一种独特的地震数据处理方法——wigb,进而生成具有特定反射系数和条件的合成地震记录。...
在Hibernate等ORM框架中,反射用于处理数据库记录与Java对象之间的映射关系。 #### 三、反射模型 Java反射的核心模型由以下几个部分组成: ##### 1. **Member接口** - `Member` 接口是所有类成员(字段、方法和...
5. AOP(面向切面编程):反射可以实现动态代理,从而在运行时插入拦截器,实现事务管理、日志记录等功能。 四、反射的优缺点 优点: 1. 灵活性:反射允许程序在运行时动态地改变行为,适应变化的需求。 2. 扩展性...
- 数据库操作框架:如Hibernate,通过反射调用getter/setter方法实现对象与数据库记录的映射。 - 插件系统:允许在不修改源代码的情况下扩展或替换已有功能。 - 测试工具:JUnit等测试框架利用反射访问私有方法...
3. 数据库操作:ORM框架(如Hibernate)利用反射将数据库记录映射为Java对象。 4. 测试工具:JUnit等测试框架利用反射来调用私有方法进行测试。 5. 编写通用代码:反射可以处理未知类型的对象,编写更通用的函数或...
雷克子波与反射系数序列进行卷积,得到合成地震记录.注释详细易懂,包含生成雷克子波,反射系数序列,输出二进制文件,褶积函数
反射算法是研究脑神经活动的基础,它揭示了神经元之间的连接如何形成神经网络,以及这些网络如何通过反射链传递神经兴奋,从而实现各种功能。反射是神经间的一种连接方式,它包含了先天性反射和后天性反射,前者是...
### 使用Java反射实现的日志记录器 #### 一、引言 本文将详细介绍如何使用Java反射机制实现一个简单但功能齐全的日志记录器——`LoggerUtil`。此日志记录器能够根据不同级别(如INFO、ERROR)记录日志,并允许通过...
- ORM框架(如Hibernate):通过反射将数据库记录映射为Java对象。 - AOP(面向切面编程):动态代理、织入切面。 - 动态代理:Java标准库中的`java.lang.reflect.Proxy`类用于创建动态代理对象。 - 插件系统:...
在Word报告"实验三 平面电磁波的反射和干涉实验.docx"中,实验者通常会详细记录实验步骤、观察到的现象、数据记录以及数据分析。报告可能包括以下部分:实验目的、实验原理、实验设备与材料、实验步骤、实验结果、...
- AOP(面向切面编程):反射可以实现动态代理,实现方法拦截和日志记录等功能。 总之,PHP反射提供了一种强大的手段来探索和操作程序的内部结构,虽然它的使用可能会增加代码的复杂性,但在某些高级场景下,反射能...
例如,创建一个新学生记录,我们可以动态地构建SQL语句,将`Student`类的属性映射到相应的字段。同样,读取、更新和删除操作也可以通过反射实现,无需为每个实体类编写单独的代码。 然后,XML作为一种轻量级的数据...