反射机制总结----Field

反射机制非常有用,在运行的时候能获取我们需要的信息,下面就Field进行介绍

Field

Field,顾名思义,就是和字段有关的,没错,这个类可以帮助我们获取类里面和成员变量有关的信息

如果我们要获取一个类中的成员变量信息,那么,首先我们需要获取这个类的class对象(获取class方法)

Class clazz = TestReflect.class;

接着我们就可以利用clazz来得到Field

这时有两种方式

<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">第一种是获取某个</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">成员变量</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">的Field对象,参数为</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">成员变量</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">名</span>

第二种是获取这个类中的所有成员变量的Field对象

第一种方式

Field field = clazz.getField("field1");

当我们只需要获取某个成员变量的信息时,用这种方式即可,获取之后可以通过下列方式来获取成员变量的值

System.out.println(field.get(clazz.newInstance()));

get需要传入这个类对应的对象,由于我们一开始获取了class对象,那么使用newInstance方法便可以获得到该类的对象

Field当中还有许多获取的方法,如getInt,getDouble,getChar等等,和数据类型对应,如果是String类型的话只能用get来获取

注意:

1.一般类中的成员变量都有初始值的,如果类中的成员变量没有指定初始化,那么使用该方式获取的值是是会得到初始值,但是如果是使用get来获取String的话是没有初始值的(得到是null)

2.另外,使用这种方式是无法获取私有变量的,如果获取的变量是私有变量的话会报错

如果想访问私有的变量,那么需要使用下面的方式(field2在类中是私有变量)

Field field = clazz.getDeclaredField("field2");
field.setAccessible(true);

两条代码都不能少,如果少了第二条还是会报错

这样就是获取私有变量的值了

第二种方式

Field[] fields = clazz.getFields();

getFields只能获取公有的变量,不能获取私有的变量,如果要获取私有的变量,可以用如下语句

Field field = clazz.getDeclaredFields("field2");

这样就能获取所有在类中声明的变量了(但是访问值的时候还是需要使用setAccessible设置为true)

下面用这种方式来打印出所有的变量名字和类型

for(int i = 0;i < fields.length;i++){
	fields[i].setAccessible(true);
	System.out.println(fields[i].getType() + "  " + fields[i].getName() + " =  " + fields[i].get(clazz.newInstance()));
}

输出如下

int  field1 =  0

int  field2 =  2

int  field3 =  3

时间: 2024-10-25 07:20:00

反射机制总结----Field的相关文章

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam

Java 反射机制[Field反射]

Java 反射机制[Field反射] 1.  反射概念及功能 反射就是把Java类中的各种成分映射成相应的Java类.例如一个Java类中用一个Class类的对象来表示.一个类中的组成部分分为成员变量,方法,构造方法,包等等. Java反射机制主要提供了以下功能: 判断在运行时任意一个对象所属的类:在运行时构造任意一个类的对象:判断在运行时任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 2.  Field反射 以下代码将obj对象中的String类型的字段对应的

Android小例子:使用反射机制来读取图片制作一个图片浏览器

效果图: 工程文件夹: 该例子可供于新手参考练习,如果有哪里不对的地方,望指正>-< <黑幕下的人> java代码(MainActivity.java): package com.example.imageswitchtest; import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.v

Java 反射机制

使用 Java 反射机制可以在运行时期检查 Java 类的信息,检查 Java 类的信息往往是你在使用 Java 反射机制的时候所做的第一件事情,通过获取类的信息你可以获取以下相关的内容: Class 对象 类名 修饰符 包信息 父类 实现的接口 构造器 方法 变量 注解 除了上述这些内容,还有很多的信息你可以通过反射机制获得,如果你想要知道全部的信息你可以查看相应的文档 JavaDoc for java.lang.Class 里面有详尽的描述. 在本节中我们会简短的涉及上述所提及的信息,上述的

Java中的反射机制

Java反射的概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制 Java反射机制主要提供下面几种用途: 1.在运行时判断任意一个对象所属的类 2.在运行时构造任意一个类的对象 3.在运行时判断任意一个类所具有的成员变量和方法 4.在运行时调用任意一个对象的方法 首先看一个简单的例子,通过这个例子来理解Java的反射机制是如何工作的 i

java学习——反射机制

/* * JAVA反射机制是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法: * 对于任意一个对象,都能够调用它的任意一个方法和属性: * 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. * * 动态获取类中信息,就是java反射 . * 可以理解为对类的解剖. * * 要想要对字节码文件进行解剖,必须要有字节码文件对象. * 如何获取字节码文件对象呢? * */ 1. 通过Class clazz =Class.forName()找

Java再学习-反射机制

首先说到反射,大家肯定不会陌生,如果不知道反射,相信那些市面上常用的主流框架就不会出现了.废话不说,上主题! Java反射机制 运行时 判断任意一个对象所属的类 构造任意一个类的对象 判断任意一个类所具有的成员变量和方法 调用一个对象的方法 注意点:运行时,而不是编译时 首先概念性的东西,小编就不细说了,想了解的直接问度娘吧,直接上干货吧. 通过反射来进行方法调用的具体步骤: 1.首先要获取Class对象(手段比较多,例如通过forname手段和InvokeTester.class手段) 2.如

Java反射机制浅析

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载.探知.使用

java的反射机制

一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动,说不定会请各位吃饭哦! 1.何谓反射机制 根据网文,java中的反射机制可以如此定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 2.反射