`

Java Reflection反射机制

阅读更多

  今天说起的这个东西,有点厉害了,虽然你不了解它也不影响你写程序,但是,它却悄悄的一直在你的左右。

  人常说,一个成功男人背后,一定会有位伟大的女人。像Struts、Spring、Hibernate等等的Java EE框架如此的成功和神奇,背后,就是有位像Java类反射的“女人”。

  现,让我们来了解和学学这个“女人”:

  我们都知道,JVM是通过调用由.java编译成.class的对象文件来执行的,这个过程大致可以这样描述:

  类装载器ClassLoader将.class对象加载到内存中,在内存中找到main方法开始执行,在执行的过程中,通过动态加载机制还会把与其相关联的.class加载到内存中并运行。

  .class文件在Java类中被描绘成java.lang.Class,其中的属性和方法分别对应java.lang.reflect.Field和java.lang.reflect.Method,构造函数呢,则有java.lang.reflect.Constructor这个类对应。如此这样,我们自然而然的就可以通过程序化的方式来操作Class对象。

  OK,看个例子先:

package com.cui.hourse.reflectDemo;

class Dog {
	private String name;
	private int age;

	public Dog() {
	}

	public Dog(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void show() {
		System.out.println("The dog's name is: " + name + ",age is: " + age);
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

  很简单的,一个POJO对象,里面的内容不做过多介绍,来看看怎么样通过反射来实例化:

package com.cui.hourse.reflectDemo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectDemo {

	/**
	 * 通过反射机制实例化一个Dog实例
	 * 
	 * @return Dog
	 */
	public static Dog initDogByReflectionMethod() throws Throwable {
		//获取当前线程,指定Dog类的全限定名(必须是全限定名),装载该Class的类反射实例
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		Class cls = loader.loadClass("com.cui.hourse.reflectDemo.Dog");

		//获取默认构造函数Constructor,并通过该构造函数实例化Dog对象
		Constructor consor = cls.getDeclaredConstructor();
		Dog dog = (Dog) consor.newInstance();

		//通过Class对象的getMethod方法,获取方法对象Method,
		//第一个参数为方法名,第二个参数为方法参数类型
		Method setName = cls.getMethod("setName", String.class);
		//通过invoke方法调用目标类方法
		//第一个参数为目标类对象实例,第二个参数为目标类对象方法的入参
		setName.invoke(dog, "xiao bai");
		
		Method setAge = cls.getMethod("setAge", int.class);
		setAge.invoke(dog, 2);
		return dog;
	}

	public static void main(String[] args) throws Throwable {
		Dog dog = initDogByReflectionMethod();//实例化一个Dog对象
		dog.show();
	}
}

 

  运行,最后程序结果正如我们所期望的:

The dog's name is: xiao bai,age is: 2

   与我们自己new一个对象的结果完全相同,这说明,我们完全可以通过编程的方式操作Class所提供的各项功能,这和直接通过构造函数和方法调用类功能的效果是一致的,只不过一个是简单调整,别一个是直接调用而已。

  

  

  

 

分享到:
评论

相关推荐

    javaReflection反射机制.ppt

    之前上课的时候老师总结的JavaReflection反射学习资料,内容简单易懂,浅显易懂,适合小白入手学习。。

    java Reflection 反射机制 反编译

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { Class c = null; try { ...

    java reflection反射机制示例

    Java反射机制是Java编程语言中的一个强大工具,它允许运行时动态访问类的信息,包括类名、属性、方法以及构造器等。通过反射,我们可以在程序执行过程中创建和操作任何类的对象,即使在编译时未知该类的具体信息。...

    java面试题--反射机制

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

    Java反射机制的实现_Reflection

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过Java反射机制,开发者可以在不知道具体类名的情况下创建对象,调用方法,访问和修改私有成员变量,以及...

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

    在"JAVA私塾笔记整理——反射机制(Reflection)"这份文档中,我们将深入探讨反射机制的基础知识、用途和实现方式。 1. **反射机制的基本概念** 反射机制是Java提供的一种能够在运行时分析类和对象的能力。它允许...

    Reflection_in_Java.zip_in_java 反射_java 反射机制_java反射_反射机制

    Java反射机制是Java编程语言中一个强大的特性,它允许运行时的程序动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`...

    Java Reflection (JAVA反射)

    ### Java反射机制详解 #### 一、Java反射机制概述 反射是Java编程语言的一个关键特性,它赋予了Java程序在运行时自我检查的能力,并能够直接操纵程序内部的属性。通过反射,开发者可以在运行时获取类的信息(如...

    java的反射机制及其实际应用

    ### Java的反射机制及其实际应用 #### 一、引言 Java作为一种强大的编程语言,提供了许多高级特性,其中反射机制尤为突出。通过反射,开发者可以在运行时动态地获取类的信息并操纵类的行为,从而实现更加灵活和...

    Java反射机制 Java反射机制

    ### Java反射机制详解 #### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息并操作对象。Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用...

    Java Reflection in Action

    Java Reflection in Action这本书作为Java反射机制的经典之作,详细介绍了反射技术的应用和相关的概念基础,是Java开发者的必备书籍。 首先,反射允许开发者在不知道对象具体类型的情况下,通过类名获取类类型,...

    java reflection in action

    在《Java Reflection in Action》这本书中,作者深入探讨了这一主题,帮助开发者理解并有效地利用Java反射机制。这本书是2005年出版的英文版,对于想要提升Java编程技能,特别是对动态类型和元编程感兴趣的开发者来...

    Java中的反射机制

    ### Java中的反射机制 #### 一、反射的概念 反射的概念最早由Smith于1982年提出,是指程序能够访问、检测和修改其自身状态或行为的能力。这一概念的引入促进了计算机科学领域对反射性的研究,并迅速被应用于程序...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    java的反射机制

    ### Java的反射机制详解 #### 一、Java反射机制概述 Java反射机制是Java语言提供的一种能在运行时分析和操作类、对象、方法等的能力。它使得开发人员可以在程序运行过程中动态地获取类的信息(例如类名、字段、...

    Java反射机制

    ### Java反射机制详解 #### 一、什么是Java的反射机制 Java反射机制是Java语言的一种重要特性,使得Java成为了一种动态性很强的语言。通过反射,可以在程序运行时获取类的信息,包括类名、父类、接口、字段、方法...

    候捷谈Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...

    Java反射机制课件ppt

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...

Global site tag (gtag.js) - Google Analytics