<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
/**
*
*/
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;
@SuppressWarnings("unchecked")
public class TestReflection01 {
public static void main(String[] args) {
System.out.println("请输入类型名称:");
Scanner scan = new Scanner(System.in);
String className = scan.next();
System.out.println("当前类型:" + className);
try {
//获取Class对象
Class c = Class.forName(className);
//解析属性信息
Field[] fs = c.getDeclaredFields();
for (Field f : fs) {
System.out.println("----------------------------------------------");
System.out.println("属性:" + f.toString());
System.out.println("\t数据类型:" + f.getType());
System.out.println("\t属性名:" + f.getName());
int mod = f.getModifiers();
System.out.println("\t属性修饰符:" + Modifier.toString(mod));
}
//解析方法信息
Method[] ms = c.getDeclaredMethods();
for(Method m : ms){
System.out.println("----------------------------------------------");
System.out.println("方法:" + m.toString());
System.out.println("\t方法名:" + m.getName());
int mod = m.getModifiers();
System.out.println("\t方法修饰符:" + Modifier.toString(mod));
System.out.print("\t方法参数列表:");
Class pts[] = m.getParameterTypes();
for (int i = 0; i < pts.length; i++) {
Class class1 = pts[i];
if(i != 0 )
System.out.print(", ");
System.out.print(class1);
}
System.out.println();
System.out.println("\t返回值类型:" + m.getReturnType());
}
//解析构造方法信息
Constructor[] cs = c.getDeclaredConstructors();
for (Constructor con : cs) {
System.out.println("----------------------------------------------");
System.out.println("构造方法:" + con.toString());
System.out.println("\t方法名:" + con.getName());
int mod = con.getModifiers();
System.out.println("\t方法修饰符:" + Modifier.toString(mod));
System.out.print("\t方法参数列表:");
Class pts[] = con.getParameterTypes();
for (int i = 0; i < pts.length; i++) {
Class class1 = pts[i];
if(i != 0 )
System.out.print(", ");
System.out.print(class1);
}
System.out.println();
}
System.out.println("----------------------------------------------");
//解析当前类类型的父类
Class superClass = c.getSuperclass();
System.out.println("当前类的父类:" + superClass.toString());
System.out.println("----------------------------------------------");
//解析当前类实现的接口
Class[] interfaces = c.getInterfaces();
System.out.print("当前类所实现接口:");
for (Class class1 : interfaces) {
System.out.print(class1.toString() + "\t");
}
System.out.println("\n----------------------------------------------");
//解析当前类型所在包信息
Package p = c.getPackage();
System.out.println("当前类所在包" + p.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
本篇将基于Sun公司的官方文档《Java™ Core Reflection API and Specification》(1997年1月版)进行深度解析,帮助读者更好地理解反射的工作原理及其应用。 #### 二、Java反射的应用场景 Java反射广泛应用于框架...
反射式扫描主要针对非透明物体,如照片、纸质文档等,通过灯管照亮物体表面,捕捉反射光来获取图像信息。透射式扫描则适用于透明或半透明材料,如幻灯片或透明胶片,光线透过物体,由接收器捕获透射光来创建图像。 ...
Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法的信息。在“java反射-在form提交的一些应用”这个主题中,我们将探讨如何利用反射机制来处理HTML表单提交的数据,以及...
根据给定的文件信息,我们可以总结出以下关于“公式解析源码(C#比用反射更快的解析方法)”的相关知识点。 ### 一、标题与描述理解 #### 标题:“公式解析源码 (C# 比用反射更快的解析方法)” 此标题明确指出了一...
以下是一个简单的示例,展示了如何使用Java反射解析XML: ```java import java.io.File; import java.lang.reflect.Field; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers....
首先,反射操作通常比直接调用方法慢,因为它涉及到更多的安全性检查和运行时解析。其次,反射可能破坏封装性,可能会导致安全风险或难以调试的问题。因此,在非必要情况下,应避免过多使用反射。 总结,Java反射是...
性能问题:反射操作通常比非反射操作慢,因为它们需要在运行时解析类信息,这增加了处理时间。 2. 安全风险:反射允许代码绕过访问控制,可能导致安全漏洞。如果不小心,可能会被恶意代码利用,破坏程序的稳定性。...
12. **性能考虑**:反射虽然强大,但其性能相比直接的Java代码会有所下降,因为反射涉及到额外的字节码解析和安全检查。因此,在对性能要求较高的场合,应谨慎使用反射。 综上所述,Java反射是一个强大的工具,它...
Java反射机制是Java编程语言中的一个重要特性,它赋予了程序在运行时检查和操作类、接口、字段和方法的能力。这种动态类型的行为使得Java在某种程度上具有了类似于Perl、Python和Ruby等动态语言的灵活性。 Java反射...
通过上述解析,我们可以看到反射机制在Java中的重要作用,它提供了一种强大的手段来处理动态类型的数据,增强了代码的灵活性和可扩展性。然而,需要注意的是,反射也增加了程序的复杂性和潜在的安全风险,因此在使用...
总之,"java自动化之自动化框架项目(第四天-常用变量解析到map)代码"主要涵盖了Map数据结构的使用、变量解析技术、自动化测试框架的构建,以及反射在动态操作变量中的应用。这些知识点对于构建高效、灵活的自动化...
"Android反射完全解析--强势来袭"这个主题深入探讨了如何利用Java的反射机制来增强Android应用的功能和灵活性。反射使得我们能够在程序运行过程中动态地获取类的信息,并能调用私有方法,访问私有变量,甚至执行不...
在Java编程语言中,注解(Annotation)和反射(Reflection)是两个非常重要的高级特性,它们为程序提供了元数据信息和运行时动态操作类的能力。本文将深入探讨这两个概念及其在实际开发中的应用。 首先,让我们了解...
Java的反射机制则是Java编程语言提供的一种强大的功能,允许程序在运行时检查类、接口、字段和方法的信息,并能够动态调用方法和创建对象。 在解析XML文件时,Java提供了多种API,其中最常用的是DOM(Document ...
XML解析是将XML文档转换为程序可以理解的数据结构的过程,这有助于应用程序处理XML文档中的信息。 在Java编程语言中,有两种主要的XML解析方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析...
解析excel,使用java反射机制,能够解析所有的excel模板,不受模板格式现在,而且还可以支持解析日期,数字和字符串,实现通用的解析方法,不需要定义解析excel的模板,通过反射实现全解析,全支持。
华为路由反射器RR全解析.doc
"bgp路由反射器实验解析" 本实验旨在介绍BGP路由协议和路由反射器的原理与实验解析,通过搭建实验环境,模拟实施过程中遇到的问题。 路由反射器的概念 在一个BGP域中,一个路由器通过IBGP从另一个路由器学习到的...
根据给定文件的信息,我们可以提炼出以下相关的IT教育知识点及解析: ### 1. 教育理论中的学生角色 - **知识点**: 学生既是教育的客体也是学习的主体。 - **解析**: 在教育过程中,学生是接受教育的对象,因此被视...
反射是一种编程特性,允许程序在运行时检查自身结构,包括类型信息、函数、变量等,从而实现元编程能力。 **描述分析:** "Reflang - 使用libclang实现的C 反射库" 提示我们,Reflang库是专门针对C语言设计的,它...