1. getField和getDeclaredField
以前对这两个方法不是很熟悉,今天又遇到关于动态获取属性的问题。getField获得类中指定的public属性;getDeclaredField返回指定类中指定的属性(任何可见性)。看下面一个简单的例子:
package com;
import java.lang.reflect.Field;
import java.util.*;
public class MyUtil {
public static void main(String[] args) {
testFields();
}
public static void testFields() {
try {
System.out.println("Declared fields: ");
Field[] fields = Dog.class.getDeclaredFields();
for(int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getName()); // 此处结果是color, name, type, fur
}
System.out.println("Public fields: ");
fields = Dog.class.getFields();
for(int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getName()); // 此处结果是color, location
}
Dog dog = new Dog();
dog.setAge(1);
Method method = dog.getClass().getMethod("getAge", null);
Object value = method.invoke(dog);
System.out.println(value); // 此处结果是1
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Dog extends Animal {
public int color;
protected int name;
private int type;
int fur;
}
class Animal {
public int location;
protected int age;
private int height;
int length;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
可见,getDeclaredField可以获得类中任何可见性的属性不包括基类,而getField只能获得public属性包括基类的public属性。如果需要获取基类某个非public属性的值,则只能通过反射来调用方法了,从上述code可以看到。注意,getField只能得到public方法。
分享到:
相关推荐
Java 反射是 Java 程序设计语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说 "自审 ",并能直接操作程序的内部属性。Java 反射的能力在实际应用中非常有价值,例如,使用它能获得 Java 类中各成员的...
动态加载类是Java反射机制的重要应用场景之一。通过`Class.forName()`方法或者`ClassLoader`的`loadClass()`方法,可以根据类名字符串在运行时加载类。 #### 七、操作成员 - **创建对象**:使用`Class`对象的`new...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...
总之,Java反射机制是Java程序员必备的技能之一,它提供了对程序运行时类型信息的访问和操作,极大地扩展了Java代码的灵活性和可扩展性。通过深入学习和实践,我们可以更好地理解和利用这一强大的工具。
Java中的反射(Reflect)是Java语言的一个重要特性,它允许运行时访问类、接口、字段和方法的信息,甚至能够在运行时动态地创建对象和调用方法。反射在很多场景下都发挥着关键作用,比如在框架开发、插件系统、序列化...
反射机制是Java编程语言的重要特性之一,它为开发者提供了强大的灵活性,使得程序可以在运行时动态地获取类的信息,并且可以动态地调用对象的方法。这对于很多高级应用来说是非常关键的能力,比如在框架开发、插件...
### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...
通过上述代码片段的学习,我们可以了解到如何利用反射来处理Java中的泛型问题,这对于实现灵活的代码框架非常有帮助。例如,在Spring框架中就大量使用了反射机制来实现依赖注入等功能。理解并掌握反射机制对于提高...
Java作为云计算环境下编写应用和服务的主要语言之一,其泛型、反射和注解等高级特性为构建云计算平台上的应用提供了便利,从而满足不断变化的业务需求。 学习Java编程,特别是泛型、反射和注解这些高级特性,对于想...
Java反射是Java编程语言中的一个核心特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。...学习和掌握反射不仅可以提升编程的灵活性,也是成为Java高级开发者必备的技能之一。
Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。本文将深入探讨Java中的基础概念,包括多线程、反射以及泛型,这些都是Java编程中至关重要的知识点。 首先,我们来讨论Java多线程。多线程...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...
1. **Class对象**:在Java中,每个类都有一个与之对应的Class对象,它是运行时的类型信息的载体。我们可以通过`Class.forName()`方法或对象的`getClass()`方法获取到Class对象。 2. **创建对象**:反射提供了一种在...
1. **Class类**:在Java中,每一个类都有一个与之对应的Class对象。`Class`类是反射的核心,它代表了一个类的所有元数据,如类名、属性、构造器、方法等。通过`Class.forName()`方法或`Object.getClass()`方法可以...
总的来说,“java反射model”可能是为了帮助开发者更好地理解和应用Java反射机制,包含了一系列关于如何使用反射创建对象、访问字段、调用方法的实例,对于学习和理解Java动态性有着重要的参考价值。通过深入学习和...
`PropertyEditor`接口是JavaBeans的核心组件之一,用于处理JavaBean的属性转换。它允许我们将字符串与其他类型的数据之间进行转换。例如,在给定的例子中,`DodeDOEditor`类扩展了`PropertyEditorSupport`,并实现...
Java中的异常处理也是笔记的重点之一。异常处理机制使得程序在遇到错误时能够更加稳定地运行,而不是直接崩溃。笔记中会介绍如何使用try、catch、finally语句以及自定义异常来处理程序中可能出现的异常情况。 Java...
Java反射机制的强大之处在于其动态性,即能够在运行时处理类、方法和字段等。然而,过度依赖反射可能会导致代码难以理解和维护,因此应当谨慎使用。通过上述案例,我们已经了解了如何使用Java反射机制来获取和操作类...
"Java超强学习笔记"显然是一份全面且深入的Java学习资料,由一位极具洞察力和组织能力的作者精心编纂。这份笔记可能包含了从基础知识到高级特性的全方位讲解,旨在帮助学习者构建坚实的Java编程基础,并提升他们的...