`
soongbo
  • 浏览: 88852 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java反射学习记录

    博客分类:
  • Java
阅读更多
java的反射机制很重要,任何一个框架都要运用到反射,很多的操作也都是依靠反射来完成的,下面是我们在空余时间自己写的一点对于Java反射API的一些用法的小列子,虽然很简单,但是希望贴出来一起探讨:
Scanner scanner = new Scanner(System.in);
		String name = scanner.next();
		System.out.println("当前的类是:"+name);
		try {
			Class<?> obj = Class.forName(name);
			Object stu = obj.newInstance();
			
			/**
			 * Field操作
			 * */
			
			//获得该类下的所有属性(不包括父类)
			Field[] declareFields = obj.getDeclaredFields();
			
			System.out.println("该类下(不包括父类)的所有参数....");
			for (Field field : declareFields) {
				//访问private和protect时需要设置该属性为true,不然会报异常
				field.setAccessible(true);
				System.out.println("属性名:"+field.getName()+" 修饰符:"+Modifier.toString(field.getModifiers()) + " 数据类型:" + field.getType());
				Class<?> fieldType = field.getType();
				//判定fielType的类型是不是String
				 if (String.class.isAssignableFrom(fieldType)) {
					 field.set(stu, "zhangsan");
					 System.out.println("方法名:" + field.getName() + "值:" + field.get(stu));
				}
				 //判定fielType类型是不是Integer
				 if (Integer.class.isAssignableFrom(fieldType)) {
					 field.set(stu, 1);
					 System.out.println("方法名:" + field.getName() + "值:" + field.get(stu));
				 }
				 
				 System.out.println("GenericString : " + field.toGenericString());
				 System.out.println("Class :" + field.getDeclaringClass());
			}
			System.out.println("----------------------------------------------");
			
			//获得该类及其父类下所有public属性
			Field[] fields = obj.getFields();
			System.out.println("该类的所有public属性(包括其父类中的属性)");
			for (Field field : fields) {
				System.out.println("描述符为public的属性名:"+field.getName()+" 修饰符:"+Modifier.toString(field.getModifiers()) + " 数据类型:" + field.getType());
			}
			System.out.println("----------------------------------------------");
			
			/**
			 * Method操作
			 */
			
			//获得该类下(不包括父类)的所有方法(包括private,protect,包控制权限,public)
			Method[] declareMethods = obj.getDeclaredMethods();
			System.out.println("该类(不包括父类)的所有方法.....");
			for (Method method : declareMethods) {
				System.out.println("方法名:" + method.getName()+ "方法修饰符: "+ Modifier.toString(method.getModifiers()));
				System.out.println("方法返回值为:" + method.getReturnType() );
				//获得该方法的所有参数的Class,如:参数String,获得的就是String.class对象
				Class<?>[] paras = method.getParameterTypes();
				System.out.println("该方法的参数如下:");
				for (Class<?> para : paras) {
					System.out.println(para);
					}
				}
			System.out.println("----------------------------------------------");
			
			//获得该类下及其父类的所有public方法
			Method[] methods = obj.getMethods();
			System.out.println("该类(包括父类)的所有方法.....");
			for (Method method : methods) {
				System.out.println("方法名:" + method.getName()+ "方法修饰符: "+ Modifier.toString(method.getModifiers()));
				System.out.println("方法返回值类型为:" + method.getReturnType() );
				//获得该方法的所有参数的Class,如:参数String,获得的就是String.class对象
				Class<?>[] paras = method.getParameterTypes();
				System.out.println("该方法的参数如下:");
				for (Class<?> para : paras) {
					System.out.println(para);
					}
				}
			System.out.println("----------------------------------------------");
			
			/**
			 * 构造函数操作
			 */
			
			//获得该类下所有的构造函数
			Constructor<?>[] constructors = obj.getDeclaredConstructors();
			System.out.println("该类的所有构造函数.....");
			for (Constructor<?> constructor : constructors) {
				System.out.println("构造函数:" +constructor.getName());
				System.out.println("该构造函数的修饰符:"+Modifier.toString(constructor.getModifiers()));
				Class<?>[] conTypes = constructor.getParameterTypes();
				
				if (conTypes.length > 0) {
					for (Class<?> conType : conTypes) {
						System.out.println("构造函数的参数:" + conType);
					}
				}
			}
			System.out.println("----------------------------------------------");
			
			//获得该类下所有的构造函数
			Constructor<?>[] cons= obj.getConstructors();
			System.out.println("该类的所有构造函数.....");
			for (Constructor<?> constructor : cons) {
				System.out.println("构造函数:" +constructor.getName());
				System.out.println("该构造函数的修饰符:"+Modifier.toString(constructor.getModifiers()));
				Class<?>[] conTypes = constructor.getParameterTypes();
				
				if (conTypes.length > 0) {
					for (Class<?> conType : conTypes) {
						System.out.println("构造函数的参数:" + conType);
					}
				}
			}
			System.out.println("----------------------------------------------");
			/**
			 * 获得该内的superClass
			 */
			Class<?> superClass = obj.getSuperclass();
			System.out.println("该类的父类是:"+superClass.toString());
			System.out.println("----------------------------------------------");
			
			/**
			 * 获得该类实现的接口
			 */
			Class<?>[] interfaces = obj.getInterfaces();
			if (interfaces.length > 0) {
				System.out.println("该类西线的接口如下:"); 
				
				for (Class<?> inter : interfaces) {
					System.out.println("该接口为:" + inter.toString());
				}
			} else {
				System.out.println("该类没有实现接口");
			}
			System.out.println("----------------------------------------------");
			
			
			/**
			 * 获得该类的包
			 */
			Package p = obj.getPackage();
			if ( null != p) {
				System.out.println("该类的包: " + p.toString());
			} else {
				System.out.println("该类没有在包下进行管理");
			}
			
		} catch(Exception e) {
			e.printStackTrace();
		}
这些只是一些自己写的测试列子,其中对于发射的很多API还没有设计,如果要仔细研究,可以在网上搜一些相关的文章。
分享到:
评论

相关推荐

    java注解和反射的个人学习笔记

    java注解和反射的个人学习笔记

    java学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    java学习笔记java反射机制

    java学习笔记java反射机制

    java学习——java中的反射学习笔记.rar_java 反射

    本篇笔记将深入探讨Java反射的概念、重要性以及如何使用。 一、反射基础 1. 类加载:当Java虚拟机(JVM)加载一个类时,它会创建该类的Class对象。这个对象包含了关于类的所有信息,包括方法、字段、构造器等。...

    java反射笔记

    在“java反射笔记”这个主题中,我们将深入探讨反射的基础知识和常见用法。 首先,我们需要了解什么是反射。在Java中,反射是指在运行时获取类的信息(如类名、方法名、参数类型等)并动态调用对象的方法或访问其...

    java学习笔记markdown

    8. **反射机制**:探讨Java反射API的使用,包括动态获取类信息、创建对象、调用方法等功能,这对于理解和调试程序有很大的帮助。 9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收...

    java反射-英文版反射规范

    ### Java反射机制详解 #### 一、概述 ...通过以上介绍,我们不仅深入了解了Java反射的基本概念和应用场景,还学习了如何利用反射来处理各种类型的数据结构。这对于深入理解和应用Java语言具有重要意义。

    Java入门学习笔记

    "Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...

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

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

    Java反射学习笔记

    Java反射是Java编程语言中的一个强大特性,允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射主要用于以下场景:动态加载类、访问私有成员、调用私有方法以及处理泛型等。以下是关于Java反射的一些...

    java反射机制学习笔记

    Java反射机制是Java编程语言的一项重要特性,它允许程序在运行时动态地获取类的信息,并且能够对类的属性和方法进行操作。反射机制的核心在于Java的`java.lang.reflect`包,其中包含了`Class`、`Constructor`、`...

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

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

    Java 反射-动态代理

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活...在提供的压缩包文件"JavaReflect"中,可能包含了关于Java反射和动态代理的示例代码和教程,通过学习和实践这些内容,你可以更深入地掌握这两种技术。

    基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip

    基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....

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

    总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...

    java超强学习笔记

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

    JAVA学习笔记 林信良

    《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...

    Java反射机制经典案例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和...通过阅读和学习提供的"Java反射机制经典案例"文档,你可以深入理解这些概念,并学会如何在实际项目中有效地应用反射。

Global site tag (gtag.js) - Google Analytics