反射机制看自省(探寻类自身的信息--修改类的信息)
public class TestReflection_2 {
public static void main(String[] args) throws Exception {
/**
* 修改类的属性的值
* */
Object object = new StudentT("Michael",24);
Class cls = object.getClass();
//属性
Field[] fs = cls.getDeclaredFields();
for(Field f:fs){
f.setAccessible(true);//可以在虚拟机中使用安全策略来屏蔽掉这种机制
System.out.println("\t" + f.getName() + " : " + f.get(object));//如果这样写是会报错的,因为有的属性是private
//改变属性的值
if(f.getType().getSimpleName().equals("String")){
f.set(object, "Bryant");
}else if(f.getType().getSimpleName().equals("int")){
f.set(object, 23);
}
System.out.println("\t" + f.getName() + " : " + f.get(object));//如果这样写是会报错的,因为有的属性是private
}
//方法
//---->Method[] methods = cls.getMethods();//得到所有方法
Class[] params = {String.class, int.class};
Method method = cls.getMethod("study", params);
//调方法的时候,我们要放入方法体中的是一个实参,应该是一个对象数组
Object[] objs = {"Core Java", new Integer(6)};
Object o = method.invoke(object, objs);
System.out.println("\t" + o);
//构造方法 Construtctor, 通过类对象,其本身就可以调用newInstance()方法来创建类的对象
//这个的意思是说,类在创建的时候必须要含有一个无参的构造方法
//那是不是说,如果没有无参构造方法,就不能利用发射来创建对象了呢?
//答案是否定的
//这个时候 你需要做的是首先利用反射拿到(怎么拿,还是用参数表)有参的那个构造方法,
//使用参数表的时候,利用getConstructor()这个方法拿到构造方法对象,
//然后用构造方法的这个对象调用newInstance()方法,这样就可以得到你想要的对象了
}
}
class StudentT{
private String name;
private int age;
//public String hobby;
//构造方法
public StudentT(){
}
public StudentT(String name, int age){
this.name = name;
this.age = age;
}
public void study(){
System.out.println("StudentT " + name +" studies");
}
public String study(String course, int time){
System.out.println("\t" + "StudentT " + name +" studies " + course +" " + time + " times" );
if(time >=3)return "Good";
return "Bad";
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
/*public void setHobby(String hobby) {
this.hobby = hobby;
}*/
}
分享到:
相关推荐
反射机制是Java虚拟机(JVM)的自省能力体现,它允许程序在运行时检查自身的结构和行为,就如同一个人能够了解自己的身体状况和能力。这种自省能力使得Java程序在运行时可以动态地发现和操作类的信息,增强了程序的...
Java反射机制是Java平台核心API的一部分,通过它我们可以获取类的内部信息,包括类名、方法名、参数类型等,并能在运行时动态调用类的方法,创建类的对象,甚至修改类的属性。本文将深入探讨Java反射机制及其应用。 ...
2. **类型信息的维护**:每个派生类在构造时都会调用基类的注册函数,将自身的信息(类名和创建实例的函数指针)添加到类型信息列表中。 3. **实例化过程**:当需要创建某一类型的实例时,通过查找类型信息列表,...
Java反射机制是Java语言提供的一种能够使程序在运行时访问自身信息并进行操作的功能。通过反射,Java程序可以动态地获取类的信息(如方法、属性等)并对其进行操作。这种机制极大地提高了Java程序的灵活性和扩展性。...
自省机制使得我们能够动态地获取类的信息,调用私有方法,访问私有变量,甚至创建对象实例。在Java中,`java.lang.reflect`包提供了对自省的支持。 1. **Class类**: 是所有Java类的公共基类,通过Class对象可以获取...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、对象等的内部信息。这一机制的核心在于Java.lang.reflect包,它提供了Class、Constructor、Method和Field等类,使得我们可以...
Java反射机制是指在Java运行时环境中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射...
总结来说,Java反射机制提供了一种强大的手段,让我们可以在运行时动态地获取类的信息并操作对象,这对于实现元编程、插件化、代码自省等高级功能具有重要作用。在学习和使用时,我们需要理解其原理,合理运用,避免...
这包括遵循良好的命名规范,使用有意义的变量和函数名,编写简洁的逻辑结构,以及利用内建的注释机制,如JavaDoc或C#的XML注释,来明确接口和类的功能。 【Visual Studio 2008的可扩展性开发】 Visual Studio 2008...
自省(Reflection)是指程序可以在运行时获取自身的结构(如类、接口、字段、方法等)并进行操作的一种机制。它是Java语言的一个重要特性,为开发者提供了在运行时动态地访问和使用程序信息的能力。 ##### 2.2 应用...
JAVA反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(检查和修改其自身状态)的能力。具体来说,Java反射机制允许程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个...
"JAVA的内省机制(introspector)与反射机制(reflection)" JAVA 的内省机制(introspector)和反射机制(reflection)是两个重要的概念,在 JAVA 编程中扮演着至关重要的角色。那么,什么是内省机制和反射机制?它们...
Python的自省(反射)能力是指程序在运行时能够获取并操作对象的内部信息,包括对象的属性、方法、类型等。这对于编写高度动态和灵活的代码尤其有用。本文主要介绍如何利用Python的内置模块`inspect`来实现自省。 `...
本文实例讲述了Python面向对象之反射/自省机制。分享给大家供大家参考,具体如下: 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) 下面就介绍四种实现自省的函数,适用于类和对象 1. 判断...
这一概念最早由Smith在1982年提出,核心思想是程序能够自省,即在运行时可以访问、检测和修改自身的状态和行为。 在Java中,反射机制允许开发者在程序运行时动态地加载和使用未知的类,这大大增加了程序的灵活性。...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。在Java中,反射机制提供了强大的能力,能够让我们在编译阶段不知道类名的情况下,实例化对象、访问成员变量和调用...
Python语言中有一个非常重要的功能称为反射机制(Reflection),它允许程序在运行时访问、检测和修改自身的状态或行为,这种能力也被称为自省(Introspection)。在Python中,反射机制主要通过字符串形式来操作对象...
在AS3.0版本中,引入了反射机制,这是一个强大的工具,允许程序在运行时检查自身并操作其内部结构,如类、属性、方法等。本压缩包文件"flash反射实例"提供了关于AS3.0反射机制的实际应用示例,对于想要深入了解和...
Java中的反射功能允许运行中的程序对自身进行检查,并能直接操作程序的内部属性,即所谓的“自省”能力。这是Java区别于其他编程语言如Pascal、C或C++的一个重要特性,因为在这些语言中无法直接获取函数定义等信息。...
反射机制允许程序在运行时获取类的信息,并通过这些信息操纵对象。这意味着开发者可以通过反射在运行时决定执行哪段代码,这极大地增强了程序的灵活性和可扩展性。例如,可以动态创建对象、调用方法、访问和修改字段...