Java反射 field

Java反射 field

  1. 获取字节码文件对象

    Class c = Class.forName(“fieldtest.Student”);

  2. 通过无参构造方法创建对象obj

    Constructor con = c.getConstructor();

    Object obj = con.newInstance();

  3. 通过成员变量名,获取单个的成员变量

    Field nameField = c.getField("name");//getField(String name)//Returns a Field object that reflects the specified public member field of the class or interface represented by this Class object. //The name parameter is a String specifying the simple name of the desired field
    
  4. 将指定对象变量上此 Field 对象表示的字段设置为指定的新值

    nameField.set(obj, "y"); // 给obj对象的addressField字段设置值为"y"// public void set(Object obj,Object value)设置与Field对象对应的obj对象中的域的值为value
    
  5. 如果想要获取指定私有成员变量

    Field ageField = c.getDeclaredField(“age”);

  6. 取消对私有变量age的访问检查

    ageField.setAccessible(true);

  7. 将指定对象变量上此 Field 对象表示的字段设置为指定的新值

    ageField.set(obj, 18);

package fieldtest;public class Student {// 成员变量public String name;// 公共private int age;// 私有// 构造方法public Student() {super();// TODO Auto-generated constructor stub}// 私有构造方法private Student(String name) {this.name = name;}public Student(String name, int age) {super();this.name = name;this.age = age;}// 成员方法(getXxx/setXxx)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("我爱学习java!");}// 私有private void study(String string) {System.out.println("我还爱学习" + string);}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}
}
package fieldtest;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;/** 通过发生获取成员变量并使用*/
public class FieldDemo {public static void main(String[] args) throws Exception {// 获取字节码文件对象Class c = Class.forName("fieldtest.Student");// 获取所有的成员变量System.out.println("获取公共成员变量");Field[] fields = c.getFields();for (Field field : fields) {System.out.println(field);}		System.out.println("获取所有成员变量");Field[] fields1 = c.getDeclaredFields();//所有for (Field field : fields1) {System.out.println(field);}/** Person p = new Person(); p.address = "北京"; System.out.println(p);*/// 通过无参构造方法创建对象Constructor con = c.getConstructor();Object obj = con.newInstance();System.out.println(obj);// 通过成员变量名,获取单个的成员变量Field nameField = c.getField("name");//getField(String name) //返回一个 Field对象,它反映此表示的类或接口的指定公共成员字段 类对象。 // public void set(Object obj,Object value)// 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。nameField.set(obj, "y"); // 给obj对象的addressField字段设置值为"y"System.out.println(obj);// 获取age并对其赋值// NoSuchFieldException 私有变量Field ageField = c.getDeclaredField("age");// IllegalAccessException 暴力访问ageField.setAccessible(true);ageField.set(obj, 18);System.out.println(obj);}
}
/*
获取公共成员变量
public java.lang.String fieldtest.Student.name
获取所有成员变量
public java.lang.String fieldtest.Student.name
private int fieldtest.Student.age
Student [name=null, age=0]
Student [name=y, age=0]
Student [name=y, age=18]
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql5.7循环,python3.4用循环往mysql5.7中写数据并输出的实现方法

python3.4用循环往mysql5.7中写数据并输出的实现方法来源:中文源码网 浏览: 次 日期:2018年9月2日python3.4用循环往mysql5.7中写数据并输出的实现方法 如下所示:#!/usr/bin/env python# -*- coding:utf-8 -*-# __author__ …

java反射 Method

java反射 Method 获取字节码文件对象 Class c Class.forName("fieldtest.Student");通过无参构造方法创建对象obj Constructor con c.getConstructor(); Object obj con.newInstance();Method m1 c.getMethod(“study”);获取study方法 m1.invoke(obj);使用obj对…

axure 鼠标变成手,Axure教程|鼠标移入移出自动显示与隐藏三级菜单

前几天因工作需要做一个鼠标移入显示隐藏菜单,鼠标移出自动隐藏菜单,做的时候觉得没有什么问题,做完后预览就发现一个很严重的问题,就是鼠标移出一级菜单向二级菜单时二级菜单不显示,或者二级菜单显示三级菜单不显示。…

java与平台无关的原因

Java字节码 Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。 java要运行要经过如下步骤 ① Java源文件—->编译器(工具)—->…

php websocket应用实例,php使用websocket示例详解

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket 套接字做了封装处理,开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

Java集合 Collection

Jdk提供了一些特殊的类,用来保存数量不确定的对象,存储任意类型对象,长度可变。这些类统称为集合。 集合类位于Java.util包中,按存储结构分为Collection单列集合和Map双列集合。 Collection是单列集合的根接口,有两个…

java basic data type,java基本数据类型--Basic Datatypes

Variables are nothing but reserved memory locations to store values. This means that when you create a variable you reserve some space in the memory.---说的好有道理Based on the data type of a variable, the operating system allocates memory and decides what…

Java final修饰符的作用,Java中的final修饰符

1.什么时候可以选择final修饰符如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰。2.用final修饰的类首先大家要明白,用final修饰的类是不能被继承的,下面来看一个错误案例。eg:final clas…

Java基础 HashMap的添加 修改 遍历 Map.Entry Map.entrySet()的使用及实例

Java Map Map中不能包含相同的键,每个键只能映射一个值。 HashMap:并不能保证它的元素的顺序,元素加入散列映射的顺序并不一定是它们被迭代方法读出的顺序。 Map.Entry Map.Entry 是Map中的一个接口,他的用途是表示一个映射项…

adminer.php下载,Adminer.php

Adminer.php就是原来的phpMinAdmin,这是用PHP编写的数据库管理工具,支持mysql、mariadb、postgresql、sqlite、MS SQL、Oracle等多种数据库,虽然是一个源码,但是可以使用用户们和密码直接连接到数据库的服务器,既可以对…

windows下如何在命令行里切换到任意目录

切换到C盘中的某个文件夹,比如AppData,可以执行命令cd AppData; 但如果想切换到D盘,输入cd d:是不行的; 如果我们要切换盘符的目录,正确的用法是在cd 和路径中间 增加一个“/d”,如cd /d d: 也可以不用cd指令&#x…

Java基础 系统注解 @Override @Deprecated @SuppressWarnings 使用的方法及原因

Java 系统注解 为什么用?: 好处:使用系统定义的注解,可以在编译时对程序进行检查。 注解用在包、类、字段、方法、局部变量、方法参数等的前面,对这些元素进行说明和注释。 Override Override用来修饰一个方法&am…

java二维数组排序先行后列,数组知识点归纳

◆◆◆一、理解一维数组的定义和应用,了解二维数组和控件数组;1、数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分&…

Java 使用反射处理注解

Java 使用反射处理注解 自定义注解的格式: [public|final] interface 注解名//interface 表明:这是一个自定义注解 {注解元素//注解元素 是无参数的方法 }// 注解元素的格式: 数据类型 注解元素名() [default 默认值]例子: //自…

php面试宝典1000题,【PHP面试宝典1000题】HTTP中的请求头(深圳小美网络科技)

(1)通作一新求抖直微圈用信息头即址工框按都不他移据流。果原箭近第作架量是能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pra分浏代刚的学过互解久点维数数请曾房总题屏断果如以气。泉公一实切式时带近享览码开时会进。,后,护…

java基础 通过继承Thread类和实现Runnable接口创建线程

java 创建线程 Java中,线程也是一种对象,但不是任何对象都可以成为线程。 只有实现了Runnable接口或继承了Thread类的对象才能成为线程。 继承Thread类 //格式: class 类名 extends Thread//从Thread类扩展出子类 {属性方法修饰符 run(){…

php求链表中位数,先给伸手党的php链表遍历求和

问题给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字…

Java基础 线程同步

线程的同步:在编程过程中,为了防止多线程访问共享资源时发生冲突,Java提供了线程同步机制。所谓同步,就是指一个线程等待另一个线程操作完再继续的情况。 线程安全:一个类很好地同步以保护它的数据,这个类…

c++primer 3.2,3.3练习题

文章目录3.2.2 string 对象上的操作3.2.3 处理string对象中的字符3.3.2 向vector对象中添加元素3.3.3其他vector操作练习题涉及到代码的部分。3.2.2 string 对象上的操作 3.2 //一次输入一整行 #include<string> #include<iostream> using namespace std;int mai…

c++primer 3.4练习题

文章目录3.4 迭代器介绍3.4.1 使用迭代器3.4.2 迭代器运算3.4 迭代器介绍 3.4.1 使用迭代器 3.21 #include<vector> #include<iostream> #include<string> using namespace std;int main(){vector<int> v1;vector<int> v2(10);vector<int&…