`
heji
  • 浏览: 88804 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

反射记录

    博客分类:
  • java
阅读更多
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 annotation AOP 反射 记录日志

    下面我们将详细探讨如何利用Spring的注解AOP和反射来实现日志记录。 首先,我们需要理解Spring的AOP注解。最常用的两个注解是`@Aspect`和`@Pointcut`。`@Aspect`用于定义一个切面类,而`@Pointcut`则用来声明一个...

    基于雷克子波和反射系数的地震记录生成算法

    本资源介绍了一种基于雷克子波和反射系数进行褶积的方法,用于生成地震记录。褶积是一种数学运算,用于描述两个函数之间的相互影响。通过将雷克子波与反射系数进行褶积,我们可以模拟地震波在地下介质中的传播和反射...

    反光标线逆反射系数试验记录表.pdf

    反光标线逆反射系数试验记录表.pdf

    computing-reflecting-series.rar_反射波 matlab_反射系数褶积_反射系数设计_合成地震_地震

    3. 反射系数褶积:在地震记录中,反射系数是表征地层界面反射效率的物理量。通过对地震记录进行褶积运算,可以模拟出实际的地震响应。此过程涉及到地震波的传播模型和地层的物理特性。 4. 反射系数设计:设计反射...

    山区页岩气反射地震勘探数据处理技术应用研究.pdf

    偏移成像是将地震波的反射记录转换为地下构造的图像,以提供地质体的空间形态和位置信息。 研究中通过对比分析这些主要步骤,并总结出最佳的处理流程和处理参数,可以获得高品质的地震成像剖面,从而为地质解释人员...

    matlab Ricker.rar_desertmrp_matlab 雷克子波_matlab反射波_地震记录_雷克子波

    通过雷克子波与地震反射系数的结合,可以模拟出地震记录,进而进行AVO正演分析。 反射系数是地震波在不同介质界面反射时的重要参数,它反映了地震波在两种介质之间传播的能量比例。利用雷克子波和反射系数进行褶积...

    dizhen.zip_wigb_wigb 反射_合成地震记录_合成记录_地震wigb

    标题中的“dizhen.zip_wigb_wigb 反射_合成地震记录_合成记录_地震wigb”提及的“wigb”是一种地震数据处理方法,它主要用于模拟和分析地震波的反射特性。这里的“反射”是指地壳内部不同介质界面产生的地震波的反射...

    .net中的反射,asp.net反射

    5. AOP(面向切面编程):反射可以实现动态代理,从而在运行时插入拦截器,实现事务管理、日志记录等功能。 四、反射的优缺点 优点: 1. 灵活性:反射允许程序在运行时动态地改变行为,适应变化的需求。 2. 扩展性...

    JAVA 反射机制应用

    - 数据库操作框架:如Hibernate,通过反射调用getter/setter方法实现对象与数据库记录的映射。 - 插件系统:允许在不修改源代码的情况下扩展或替换已有功能。 - 测试工具:JUnit等测试框架利用反射访问私有方法...

    JAVA反射详细讲解

    3. 数据库操作:ORM框架(如Hibernate)利用反射将数据库记录映射为Java对象。 4. 测试工具:JUnit等测试框架利用反射来调用私有方法进行测试。 5. 编写通用代码:反射可以处理未知类型的对象,编写更通用的函数或...

    合成地震记录c程序

    雷克子波与反射系数序列进行卷积,得到合成地震记录.注释详细易懂,包含生成雷克子波,反射系数序列,输出二进制文件,褶积函数

    反射算法能做什么(修正).pdf

    反射算法是研究脑神经活动的基础,它揭示了神经元之间的连接如何形成神经网络,以及这些网络如何通过反射链传递神经兴奋,从而实现各种功能。反射是神经间的一种连接方式,它包含了先天性反射和后天性反射,前者是...

    使用Java反射实现一个简单的日志记录器.txt

    ### 使用Java反射实现的日志记录器 #### 一、引言 本文将详细介绍如何使用Java反射机制实现一个简单但功能齐全的日志记录器——`LoggerUtil`。此日志记录器能够根据不同级别(如INFO、ERROR)记录日志,并允许通过...

    java反射示例代码

    - ORM框架(如Hibernate):通过反射将数据库记录映射为Java对象。 - AOP(面向切面编程):动态代理、织入切面。 - 动态代理:Java标准库中的`java.lang.reflect.Proxy`类用于创建动态代理对象。 - 插件系统:...

    实验三 平面电磁波的反射和干涉实验

    在Word报告"实验三 平面电磁波的反射和干涉实验.docx"中,实验者通常会详细记录实验步骤、观察到的现象、数据记录以及数据分析。报告可能包括以下部分:实验目的、实验原理、实验设备与材料、实验步骤、实验结果、...

    php 反射简单例子

    - AOP(面向切面编程):反射可以实现动态代理,实现方法拦截和日志记录等功能。 总之,PHP反射提供了一种强大的手段来探索和操作程序的内部结构,虽然它的使用可能会增加代码的复杂性,但在某些高级场景下,反射能...

    C#+实体类反射+初阶

    例如,创建一个新学生记录,我们可以动态地构建SQL语句,将`Student`类的属性映射到相应的字段。同样,读取、更新和删除操作也可以通过反射实现,无需为每个实体类编写单独的代码。 然后,XML作为一种轻量级的数据...

Global site tag (gtag.js) - Google Analytics