反射机制看自省(探寻类自身的信息--属性/方法/构造方法)
public class TestReflection_1 {
public static void main(String[] args) throws Exception {
//反射中最常见的方式, 获得类对象
Class class1 = Class.forName("com.reflection.Student");
//class1.getName();//返回实体的名称
//class1.getSimpleName//只获得类的名称
//class1.getName()//获得这个类所在的包名+类名, 比如cn.com.michael.User
//class1.getSuperClass
//class1.getInterfaces 获得这个所实现的所有接口,返回一个类对象数组
//class1.getFields()//获取此类以及此类的父类的所有属性,但不包括此类的私有属性
//class1.getDeclaredFields()//获取此类的所有属性,包括私有属性,但获取不到父类的属性
//首先,属性
System.out.println("/**-------------属性-----------------*/");
Field[] fs1 = class1.getFields();//获取不到本类的私有属性
Field[] fs2 = class1.getDeclaredFields();
System.out.println("class " + class1.getSimpleName() +"{");
for(Field f:fs2){
System.out.println("\t"+ f.getType().getSimpleName() + " " +f.getName() + ";");
}
//其次,方法
System.out.println("/**-------------方法-----------------*/");
Method[] methods1 = class1.getMethods();
Method[] methods2 = class1.getDeclaredMethods();
for(Method method:methods2){
System.out.print("\t" + method.getReturnType().getSimpleName() + " " + method.getName() + "(");
Class[] ps = method.getParameterTypes();
for(Class cls:ps){
System.out.print(cls.getSimpleName() + ",");
}
System.out.println("){}");
}
//最后,构造方法
System.out.println("/**-------------构造方法-----------------*/");
Constructor[] cons = class1.getConstructors();
for(Constructor c:cons){
System.out.print("\t" + class1.getSimpleName() +"(");
Class[] ps = c.getParameterTypes();
for(Class cls:ps){
System.out.print(cls.getSimpleName() + ",");
}
System.out.println("){}");
}
System.out.println("}");
}
}
class Student{
private String name;
private int age;
public String hobby;
public Student(){
}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public void study(){
System.out.println("Student " + name +" studies");
}
public String study(String course, int time){
System.out.println("Student " + name +" studies " + course +" 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;
}
}
分享到:
相关推荐
反射机制的核心在于`Class`类,它提供了对类信息的访问,包括类的结构、属性、方法以及构造器等。通过反射,程序员可以编写出更加灵活和通用的代码,实现对未知类型对象的操作。 1. 反射机制的作用: - **反编译*...
Java反射机制是Java平台核心API的一部分,通过它我们可以获取类的内部信息,包括类名、方法名、参数类型等,并能在运行时动态调用类的方法,创建类的对象,甚至修改类的属性。本文将深入探讨Java反射机制及其应用。 ...
通过反射,Java程序可以动态地获取类的信息(如方法、属性等)并对其进行操作。这种机制极大地提高了Java程序的灵活性和扩展性。 #### Reflection API的应用实例 在Java中,主要通过`java.lang.reflect`包来实现...
内省机制和反射机制是两种不同的机制,内省机制主要用于访问某个 Bean 的属性和事件,而反射机制则可以用于访问和操作任何对象的属性和方法。它们经常被结合使用,以便更好地实现实际应用中的需求。
Java反射机制是指在Java运行时环境中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射...
2. **类型信息的维护**:每个派生类在构造时都会调用基类的注册函数,将自身的信息(类名和创建实例的函数指针)添加到类型信息列表中。 3. **实例化过程**:当需要创建某一类型的实例时,通过查找类型信息列表,...
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类包括`Class`、`Field`、`Method`和`Constructor`等,它们分别代表...
自省机制使得我们能够动态地获取类的信息,调用私有方法,访问私有变量,甚至创建对象实例。在Java中,`java.lang.reflect`包提供了对自省的支持。 1. **Class类**: 是所有Java类的公共基类,通过Class对象可以获取...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、对象等的内部信息。这一机制的核心在于Java.lang.reflect包,它提供了Class、Constructor、Method和Field等类,使得我们可以...
自省(Reflection)是指程序可以在运行时获取自身的结构(如类、接口、字段、方法等)并进行操作的一种机制。它是Java语言的一个重要特性,为开发者提供了在运行时动态地访问和使用程序信息的能力。 ##### 2.2 应用...
JAVA反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(检查和修改其自身状态)的能力。具体来说,Java反射机制允许程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个...
HasAttr方法是反射机制中一个非常重要的方法,它可以用来判断类中是否有某个属性或方法。HasAttr方法的语法格式为`hasattr(object, name)`,其中`object`是要判断的对象,`name`是要判断的属性或方法名称。返回值是一...
这包括遵循良好的命名规范,使用有意义的变量和函数名,编写简洁的逻辑结构,以及利用内建的注释机制,如JavaDoc或C#的XML注释,来明确接口和类的功能。 【Visual Studio 2008的可扩展性开发】 Visual Studio 2008...
本文实例讲述了Python面向对象之反射/自省机制。分享给大家供大家参考,具体如下: 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) 下面就介绍四种实现自省的函数,适用于类和对象 1. 判断...
某些GraphQL API禁用了自省功能。 例如, ,则。 禁用内省后,Clairvoyance允许我们获取GraphQL API模式。 它以JSON格式生成模式,适用于其他工具,例如 , 或 。 安装 $ git clone ...
例如,我们可以仅凭类的名称在运行时加载类,并获取其属性、方法、构造器等信息,甚至可以动态调用对象的方法或设置属性值。然而,这种灵活性是有代价的,反射操作通常比常规的静态调用更耗费资源,因此需要谨慎使用...
Kaltura客户生成器 此存储库中的代码用于自动为每种受支持的语言生成Kaltura客户端库。 部署说明 支持的客户列表在 从下载API方案XML。 生成一个客户端运行: ...要生成所有可用的客户端,请运行: ...
在AS3.0版本中,引入了反射机制,这是一个强大的工具,允许程序在运行时检查自身并操作其内部结构,如类、属性、方法等。本压缩包文件"flash反射实例"提供了关于AS3.0反射机制的实际应用示例,对于想要深入了解和...
Python的自省(反射)能力是指程序在运行时能够获取并操作对象的内部信息,包括对象的属性、方法、类型等。这对于编写高度动态和灵活的代码尤其有用。本文主要介绍如何利用Python的内置模块`inspect`来实现自省。 `...