`
michaelegend
  • 浏览: 8657 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

反射机制看自省(探寻类自身的信息--属性/方法/构造方法)

阅读更多
反射机制看自省(探寻类自身的信息--属性/方法/构造方法)
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;
	}
}
分享到:
评论

相关推荐

    java反射机制学习笔记+反射机制实操案例

    反射机制的核心在于`Class`类,它提供了对类信息的访问,包括类的结构、属性、方法以及构造器等。通过反射,程序员可以编写出更加灵活和通用的代码,实现对未知类型对象的操作。 1. 反射机制的作用: - **反编译*...

    Java自省类教程

    Java反射机制是Java平台核心API的一部分,通过它我们可以获取类的内部信息,包括类名、方法名、参数类型等,并能在运行时动态调用类的方法,创建类的对象,甚至修改类的属性。本文将深入探讨Java反射机制及其应用。 ...

    java反射机制的研究的文档

    通过反射,Java程序可以动态地获取类的信息(如方法、属性等)并对其进行操作。这种机制极大地提高了Java程序的灵活性和扩展性。 #### Reflection API的应用实例 在Java中,主要通过`java.lang.reflect`包来实现...

    JAVA的内省机制(introspector)与反射机制(reflection).docx

    内省机制和反射机制是两种不同的机制,内省机制主要用于访问某个 Bean 的属性和事件,而反射机制则可以用于访问和操作任何对象的属性和方法。它们经常被结合使用,以便更好地实现实际应用中的需求。

    Java的反射机制

    Java反射机制是指在Java运行时环境中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射...

    C++反射机制

    2. **类型信息的维护**:每个派生类在构造时都会调用基类的注册函数,将自身的信息(类名和创建实例的函数指针)添加到类型信息列表中。 3. **实例化过程**:当需要创建某一类型的实例时,通过查找类型信息列表,...

    Java反射机制测试Demo

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类包括`Class`、`Field`、`Method`和`Constructor`等,它们分别代表...

    Java 自省类教程.rar

    自省机制使得我们能够动态地获取类的信息,调用私有方法,访问私有变量,甚至创建对象实例。在Java中,`java.lang.reflect`包提供了对自省的支持。 1. **Class类**: 是所有Java类的公共基类,通过Class对象可以获取...

    Java反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、对象等的内部信息。这一机制的核心在于Java.lang.reflect包,它提供了Class、Constructor、Method和Field等类,使得我们可以...

    Java 自省类教程

    自省(Reflection)是指程序可以在运行时获取自身的结构(如类、接口、字段、方法等)并进行操作的一种机制。它是Java语言的一个重要特性,为开发者提供了在运行时动态地访问和使用程序信息的能力。 ##### 2.2 应用...

    JAVA反射机制

    JAVA反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(检查和修改其自身状态)的能力。具体来说,Java反射机制允许程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个...

    学习python第十一天 反射、动态加载模块.pdf

    HasAttr方法是反射机制中一个非常重要的方法,它可以用来判断类中是否有某个属性或方法。HasAttr方法的语法格式为`hasattr(object, name)`,其中`object`是要判断的对象,`name`是要判断的属性或方法名称。返回值是一...

    一个程序员的自省(博客园)--超级推荐

    这包括遵循良好的命名规范,使用有意义的变量和函数名,编写简洁的逻辑结构,以及利用内建的注释机制,如JavaDoc或C#的XML注释,来明确接口和类的功能。 【Visual Studio 2008的可扩展性开发】 Visual Studio 2008...

    Python面向对象之反射/自省机制实例分析

    本文实例讲述了Python面向对象之反射/自省机制。分享给大家供大家参考,具体如下: 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) 下面就介绍四种实现自省的函数,适用于类和对象 1. 判断...

    clairvoyance:尽管禁用了自省功能,仍获得GraphQL API模式!

    某些GraphQL API禁用了自省功能。 例如, ,则。 禁用内省后,Clairvoyance允许我们获取GraphQL API模式。 它以JSON格式生成模式,适用于其他工具,例如 , 或 。 安装 $ git clone ...

    java反射&权限控制.pdf

    例如,我们可以仅凭类的名称在运行时加载类,并获取其属性、方法、构造器等信息,甚至可以动态调用对象的方法或设置属性值。然而,这种灵活性是有代价的,反射操作通常比常规的静态调用更耗费资源,因此需要谨慎使用...

    clients-generator:Kaltura API客户端库生成器-基于PHP源代码自省的自动化,可为各种编程语言和API平台生成API本机SDK-C language program source code

    Kaltura客户生成器 此存储库中的代码用于自动为每种受支持的语言生成Kaltura客户端库。 部署说明 支持的客户列表在 从下载API方案XML。 生成一个客户端运行: ...要生成所有可用的客户端,请运行: ...

    flash反射实例

    在AS3.0版本中,引入了反射机制,这是一个强大的工具,允许程序在运行时检查自身并操作其内部结构,如类、属性、方法等。本压缩包文件"flash反射实例"提供了关于AS3.0反射机制的实际应用示例,对于想要深入了解和...

    Python自省(反射)指南1

    Python的自省(反射)能力是指程序在运行时能够获取并操作对象的内部信息,包括对象的属性、方法、类型等。这对于编写高度动态和灵活的代码尤其有用。本文主要介绍如何利用Python的内置模块`inspect`来实现自省。 `...

Global site tag (gtag.js) - Google Analytics