java反射机制初步认识<一>获取成员变量

本文深入浅出地讲解了Java反射机制的概念、获取Class对象的方法、如何获取类的成员变量,并通过具体代码实例展示了实践过程。对于Java新手而言,这是一篇极具指导意义的文章。

作为一个Java新人,我谈谈自己对Java反射机制的认识,给其他的Java新人以启蒙作用。通俗的讲,java的反射就是,当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。

那么,如何获取这个Class对象呢?通常有以下几种做法:

1.如果已经得到一个类的实例,可以使用如下方式来得到Class对象:

Class c = 对象名.getClass();

          例:Student  s = new Student();

              Class c = s.getClass();

              Class c2 = s.getSuperclass();

2.如果在编译期仅知道类的名字(如仅知道有一个Student类被编译了),可以使用如下方法(这也是一种反射,

用于获取类的一个class对象):

Class c = Student.class;

3.如果类名在编译期不知道但是在运行期可以获得可以使用下面的方法:

        Class c = Class.forName(str);//这里的str是类的全路径

下面我们来看看,怎样获取一个类的所有成员变量:

Student.java:

public class Student {

	/** 学号 */
	public static String id = "20140210102";
	/** 姓名 */
	public String name = "张三";
	/** 年龄 */
	public int address = 18;
	/** 电话 */
	protected long phone = 18765342152L;
	/** 是否党员 */
	private boolean ispp = false;

	public Student() {
	}
}


Test.java

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Test {
	public static void main(String[] args) throws Exception {
		Student s = new Student();
		/*
		 * 下面这句代码仅通过反射获取到运行时消息头部的已声明字段,不包括方法
		 * ①.这里如果用getFields(),返回的是声明为public的属性的成员,包括父类中定义的成员
		 * ②.用getDeclaredFields(),返回的是指定类定义的所有定义的属性,不包括父类的。
		 */
		Field[] fs = Student.class.getDeclaredFields();
		for (int i = 0; i < fs.length; i++) {
			Field f = fs[i];
			f.setAccessible(true);// 如果没有这句代码将无法访问类的私有成员变量,程序编译时会抛出异常
			/*
			 * 下面这句代码表示:
			 * 
			 * 以整数形式返回由此 Field对象表示的字段的Java语言修饰符(即public,private,protected
			 * ,default,static,final等修饰符的整数形式)
			 */
			int memberMod = f.getModifiers();
			// 将整数形式转化为具体的类型名称并打印出来
			System.out.print(Modifier.toString(memberMod) + "  ");

			// 获取成员变量的类型(基本数据类型or对象,如果是对象,就会显示出该对象的派生类名称)
			String memberType = f.getGenericType().toString().intern();
			System.out.print(memberType + "  ");

			// 获取成员变量的名称
			String memberName = f.getName();
			System.out.print(memberName + "  ");

			// 获取具体的值并打印
			System.out.print(f.get(s) + "\n");
		}

	}
}
运行结果:

public static  class java.lang.String  id  20140210102
public  class java.lang.String  name  张三
public  int  address  18
protected  long  phone  18765342152
private  boolean  ispp  false
希望能通过这个例子对java新手认识反射有一定的帮助,下一篇,我们来看看如何通过反射来获取成员方法!

内容概要:本文介绍了一个关于超声谐波成像中幅度调制聚焦超声所引起全场位移和应变的分析模型,并提供了基于Matlab的代码实现。该模型旨在精确模拟和分析在超声谐波成像过程中,由于幅度调制聚焦超声作用于生物组织时产生的力学效应,包括全场的位移与应变分布,从而为医学成像和治疗提供理论支持和技术超声谐波成像中幅度调制聚焦超声引起的全场位移和应变的分析模型(Matlab代码实现)手段。文中详细阐述了模型构建的物理基础、数学推导过程以及Matlab仿真流程,具有较强的理论深度与工程应用价值。; 适合人群:具备一定声学、生物医学工程或力学背景,熟悉Matlab编程,从事医学成像、超声技术或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于超声弹性成像中的力学建模与仿真分析;②支持高强度聚焦超声(HIFU)治疗中的组织响应预测;③作为教学案例帮助理解超声与组织相互作用的物理机制;④为相关科研项目提供可复用的Matlab代码框架。; 阅读建议:建议读者结合超声物理和连续介质力学基础知识进行学习,重点关注模型假设、偏微分方程的数值求解方法及Matlab实现细节,建议动手运行并修改代码以加深理解,同时可拓展应用于其他超声成像或治疗场景的仿真研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值