`

java反射 field属性(三)

    博客分类:
  • java
 
阅读更多

java 反射field 测试
tank类
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父类-----------------------------------
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;
	}
	

///------------------测试类----------------------------------------
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();// 得到该类所有声明的属性(公有,保护,私有都可以)
		
		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 访问所有权限的。
分享到:
评论

相关推荐

    java反射,获取所有属性、方法以及List集合类

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建对象、获取类...

    java反射获取所有属性,获取所有get方法,包括子类父类

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理等。...

    java反射操作父类所有属性和方法

    ### Java反射操作父类所有属性和方法 #### 一、引言 在Java编程语言中,反射(Reflection)是一项强大的特性,它允许程序在运行时动态地获取类的信息,并能够直接操作这些信息。通过反射,我们可以获取类的字段、...

    java反射组件——Field

    ### Java反射机制之Field组件详解 #### 一、引言 在Java开发中,反射机制是一种非常强大的工具,它能够让我们在运行时获取类的信息并操纵对象的状态。Field作为Java反射机制的重要组成部分之一,主要用于获取类中...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    总结起来,Java反射为我们提供了在运行时操作类、方法和属性的强大工具,包括调用私有方法和获取私有属性值。然而,它也是一把双刃剑,使用时需权衡利弊,确保代码的稳定性和安全性。在处理私有成员时,务必注意对...

    java 反射取得类的私有属性,通过私有属性取得属性值

    Java反射API提供了一系列类和接口,如`Class`、`Field`、`Method`等,它们让我们能够在运行时动态地获取类的信息,包括类的结构、方法签名以及字段等。这为编程提供了极大的灵活性,尤其是在处理第三方库或者进行元...

    java面试题--反射机制

    ### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    java反射.pdf

    ### Java反射机制详解 #### 一、什么是Java反射? Java反射是Java编程语言的一个特性,它允许运行时检查和操作程序结构(类、字段、方法等)。反射的主要用途包括但不限于:动态实例化对象、访问私有成员、调用...

    java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在本“Java反射经典实例”中,我们将深入探讨这个主题,了解如何利用反射来访问和修改私有属性以及...

    运用注解改变反射之后类属性的顺序

    默认情况下,Java反射API(如`Field[] getDeclaredFields()`方法)返回的字段数组顺序与它们在源代码中的声明顺序一致。在某些场景下,如序列化或JSON转换,我们可能需要控制这些属性的顺序。 为了解决这个问题,...

    Java反射简单例子

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制主要用到了java.lang.Class、java.lang.reflect.Method、java.lang.reflect....

    Java 反射详解(包含私有方法属性的调用)

    对于私有方法和属性的访问,Java反射提供了一种特殊的方式。通常,私有成员在外部类是不可见的,但通过`java.lang.reflect.Method`和`java.lang.reflect.Field`类,我们可以绕过访问控制。例如,`Method`类的`...

    java 反射入门-属性方法调用实例

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括类的方法、字段、构造器等信息。这篇博文将带你...

    JAVA 反射机制应用

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是java.lang.Class,它代表了运行时的类信息。通过Class对象,我们...

    java例子 java反射

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。当我们需要在运行时动态地...

    Java反射机制笔记(简单易懂)

    Java反射机制笔记 Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态...

    JAVA反射机制应用

    在JAVA反射机制中,Class类和Field类、Method类、Constructor类是最重要的三个类,它们提供了访问类、字段、方法和构造函数的能力。 在获取某个对象的属性时,我们可以使用getField方法,例如: ```java public ...

Global site tag (gtag.js) - Google Analytics