`
chennanfei
  • 浏览: 42107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java再学习之一反射

阅读更多

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反射学习.pdf

    Java 反射是 Java 程序设计语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说 "自审 ",并能直接操作程序的内部属性。Java 反射的能力在实际应用中非常有价值,例如,使用它能获得 Java 类中各成员的...

    java面试题--反射机制

    动态加载类是Java反射机制的重要应用场景之一。通过`Class.forName()`方法或者`ClassLoader`的`loadClass()`方法,可以根据类名字符串在运行时加载类。 #### 七、操作成员 - **创建对象**:使用`Class`对象的`new...

    JAVA 私塾笔记整理——反射机制(Reflection)

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...

    北大青鸟java反射机制

    总之,Java反射机制是Java程序员必备的技能之一,它提供了对程序运行时类型信息的访问和操作,极大地扩展了Java代码的灵活性和可扩展性。通过深入学习和实践,我们可以更好地理解和利用这一强大的工具。

    java中的反射reflect

    Java中的反射(Reflect)是Java语言的一个重要特性,它允许运行时访问类、接口、字段和方法的信息,甚至能够在运行时动态地创建对象和调用方法。反射在很多场景下都发挥着关键作用,比如在框架开发、插件系统、序列化...

    java的反射机制pdf

    反射机制是Java编程语言的重要特性之一,它为开发者提供了强大的灵活性,使得程序可以在运行时动态地获取类的信息,并且可以动态地调用对象的方法。这对于很多高级应用来说是非常关键的能力,比如在框架开发、插件...

    java李兴华学习笔记之Java常用类库

    ### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...

    java反射

    通过上述代码片段的学习,我们可以了解到如何利用反射来处理Java中的泛型问题,这对于实现灵活的代码框架非常有帮助。例如,在Spring框架中就大量使用了反射机制来实现依赖注入等功能。理解并掌握反射机制对于提高...

    Java基础入门四泛型反射注解.pdf

    Java作为云计算环境下编写应用和服务的主要语言之一,其泛型、反射和注解等高级特性为构建云计算平台上的应用提供了便利,从而满足不断变化的业务需求。 学习Java编程,特别是泛型、反射和注解这些高级特性,对于想...

    fanshe_JAVA.zip_java 反射

    Java反射是Java编程语言中的一个核心特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。...学习和掌握反射不仅可以提升编程的灵活性,也是成为Java高级开发者必备的技能之一。

    java基础,多线程,反射

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。本文将深入探讨Java中的基础概念,包括多线程、反射以及泛型,这些都是Java编程中至关重要的知识点。 首先,我们来讨论Java多线程。多线程...

    Java反射机制经典案例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...

    Java反射常用机制

    1. **Class对象**:在Java中,每个类都有一个与之对应的Class对象,它是运行时的类型信息的载体。我们可以通过`Class.forName()`方法或对象的`getClass()`方法获取到Class对象。 2. **创建对象**:反射提供了一种在...

    Java 反射机制 代码的实例

    1. **Class类**:在Java中,每一个类都有一个与之对应的Class对象。`Class`类是反射的核心,它代表了一个类的所有元数据,如类名、属性、构造器、方法等。通过`Class.forName()`方法或`Object.getClass()`方法可以...

    java反射model

    总的来说,“java反射model”可能是为了帮助开发者更好地理解和应用Java反射机制,包含了一系列关于如何使用反射创建对象、访问字段、调用方法的实例,对于学习和理解Java动态性有着重要的参考价值。通过深入学习和...

    Java反射中java.beans包学习总结.docx

    `PropertyEditor`接口是JavaBeans的核心组件之一,用于处理JavaBean的属性转换。它允许我们将字符串与其他类型的数据之间进行转换。例如,在给定的例子中,`DodeDOEditor`类扩展了`PropertyEditorSupport`,并实现...

    Java学习笔记.zip

    Java中的异常处理也是笔记的重点之一。异常处理机制使得程序在遇到错误时能够更加稳定地运行,而不是直接崩溃。笔记中会介绍如何使用try、catch、finally语句以及自定义异常来处理程序中可能出现的异常情况。 Java...

    java反射详解

    Java反射机制的强大之处在于其动态性,即能够在运行时处理类、方法和字段等。然而,过度依赖反射可能会导致代码难以理解和维护,因此应当谨慎使用。通过上述案例,我们已经了解了如何使用Java反射机制来获取和操作类...

    java超强学习笔记

    "Java超强学习笔记"显然是一份全面且深入的Java学习资料,由一位极具洞察力和组织能力的作者精心编纂。这份笔记可能包含了从基础知识到高级特性的全方位讲解,旨在帮助学习者构建坚实的Java编程基础,并提升他们的...

Global site tag (gtag.js) - Google Analytics