java field 反射_java Field 反射

本文详细介绍了Java反射机制,特别是对Field的使用进行了深入探讨。通过示例代码展示了如何获取类的属性,包括私有属性,并进行设置值的操作,强调了`getDeclaredField`和`getField`的区别以及在不同场景下的应用。
摘要由CSDN通过智能技术生成

反射机制详解 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 一、java的特点         1、

ava 反射field 测试

tank类

Java代码  收藏代码

package ReflectJava;

public class Tank {

private  int x = 4;

public  int y = 5;

public Tank(int x, int y) {

super();

this.x = x;

this.y = y;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public Tank(){

}

public int add(){

return 4;

}

private void bdd(){

System.out.println("私有方法步能访问哦 亲!!");

}

private  void cdd(int x,int y){

System.out.println(" 亲!!");

}

}

-----------------------tank父类-----------------------------------

Java代码  收藏代码

package ReflectJava;

public class SuperTank {

private int z = 0;

public int x = 3;

public SuperTank() {

super();

// TODO Auto-generated constructor stub

}

public SuperTank(int z, int x) {

super();

this.z = z;

this.x = x;

}

///------------------测试类----------------------------------------

Java代码  收藏代码

package ReflectJava;

import java.lang.reflect.Field;

public class Test1 {

public static void main(String[] args) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchFieldException {

Class t = Tank.class;

Tank t1 = new Tank();

Field f = t.getDeclaredField("x"); //得到单一属性方法(公有,私有,保护的都可以)

System.out.println("getDeclaredField 得到的属性----"+f);

Field fk = t.getField("y"); //得到单一属性方法(只能为公有的)

System.out.println("getField得到的属性-----"+fk);

Field[] fs = t.getDeclaredFields();// 得到该类所有声明的属性(公有,保护,java 反射详解 一 前言 反射是java中十分重要的一部分,初学者往往因为自认为用处不发而放弃对反射机制的学习,然而到后期javaweb以及Android的学期会发现java使用的地方非常多。因此这篇文章献给初学者,希望能够有所帮助。 代码参考了网上众多大牛以及think私有都可以)

System.out.println("------GET DeclareFields方法得到的属性值------");

for(Field ff: fs)

{

System.out.println(ff);

}

System.out.println("------GET fields()--方法得到的属性值------");

Field[] fss = t.getFields(); // 得到该类的所有属性包括其父类的属性(但只能是公有的)

for(Field ff1: fss)

{

System.out.println(ff1);

}

fk.set(t1, 6); // 调用field 的set方法可以往里面设值 而不需要new 该对象去set值了

System.out.println("通过fk.set(t1, 6)方法后,tank 属性由3变成  "+t1.getY());

}

}

------------------------------测试结果-------------------------------

[code="text/code]

getDeclaredField 得到的属性----protected int ReflectJava.Tank.x

getField得到的属性-----public int ReflectJava.Tank.y

------GET DeclareFields方法得到的属性值------

protected int ReflectJava.Tank.x

public int ReflectJava.Tank.y

------GET fields()--方法得到的属性值------

public int ReflectJava.Tank.y

public int ReflectJava.SuperTank.z

public int ReflectJava.SuperTank.x

通过fk.set(t1, 6)方法后,tank 属性由3变成  6

通过测试总结:

getFiled: 访问公有的属性

getDeclaredField:所有已声明的属性。但得不到其父类的属性

getFilds:访问所有的属性只能为公有的,注意当子类的属性和父类的属性相同时,如果都为 int x;则子类的Class对象.fields(x) 会访问子类的属性x,如果子类的属性是私有地,或者是保护类型的,则就会去访问父类的x属性了。

getDeclaredFieldgetDeclaredFields:得到该类所有已声明的属性

简单2句:field 只能访问公有的。

DeclaredField 访问所有权限的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值