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();// 得到该类所有声明的属性(公有,保护,私有都可以)
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反射机制之Field组件详解 #### 一、引言 在Java开发中,反射机制是一种非常强大的工具,它能够让我们在运行时获取类的信息并操纵对象的状态。Field作为Java反射机制的重要组成部分之一,主要用于获取类中...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建对象、获取类...
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。当我们需要在运行时动态地...
Java 1.5引入的反射机制是其动态性的一个重要体现,它允许程序在运行时检查和操作类、接口、对象及其方法。反射为开发者提供了强大的能力,可以在不知道具体类名的情况下实例化对象,调用方法,访问字段,以及处理...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理等。...
在Java中,反射主要通过`java.lang.reflect`包中的类来实现,如`Class`, `Method`, `Constructor`和`Field`等。这些类提供了访问和操作类信息的接口。例如,`Class.forName()`方法用于在运行时加载指定名称的类;`...
### Java反射性能测试分析 #### 引言 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的...
在Java中,反射主要通过`java.lang.Class`类和`java.lang.reflect`包中的几个关键类(如`Constructor`、`Method`和`Field`)来实现。当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括...
### Java 利用反射获取内部类静态成员变量的值操作 #### 一、引言 在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用...
Java反射的核心类和接口主要包括`Class`、`Constructor`、`Method`和`Field`: - **Class类**:表示Java中的类或接口,是反射的核心,提供了获取类的各种信息的方法。 - **Constructor类**:表示类的构造器,可以...
### Java反射机制详解 #### 一、概述 Java反射机制是一种强大的编程技术,它允许运行时检查类的信息并操作对象的内部结构。本篇将基于Sun公司的官方文档《Java™ Core Reflection API and Specification》(1997年...
Java的反射机制则是Java编程语言提供的一种强大的功能,允许程序在运行时检查类、接口、字段和方法的信息,并能够动态调用方法和创建对象。 在解析XML文件时,Java提供了多种API,其中最常用的是DOM(Document ...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在本“Java反射经典实例”中,我们将深入探讨这个主题,了解如何利用反射来访问和修改私有属性以及...
在Java中,反射机制主要用到了java.lang.Class、java.lang.reflect.Method、java.lang.reflect.Field和java.lang.reflect.Constructor这四个类。下面我们将详细探讨Java反射的基本概念、使用场景以及如何通过`...