package test;
import java.util.*;
import java.lang.reflect.*;
public class ReflectionTest {
/**
this program uses reflection to print all features of a class.
@version 1.1 2004-02-01
@author Cay Horstmann
@deprecated 关于反射:利用反射分析类的能力:(反射机制最重要的内容——检查类结构)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//read class name from command line args or user input
String name;
if(args.length>0)name=args[0];
else{
Scanner in=new Scanner(System.in);
System.out.println("Enter class name (e.g. java.util.Date)");
name=in.next();
System.out.println("------------------------declare this class is begin......!------------------------\n");
}
try{
//print class name and superclass name (if!=object)
Class cl=Class.forName(name);
Class supercl=cl.getClass();
String modifiers=Modifier.toString(cl.getModifiers());
if(modifiers.length()>0)System.out.print(modifiers+" ");
System.out.print("class "+name);
if(supercl!=null&&supercl!=Object.class){
System.out.println(" extends " +supercl.getName());
System.out.print("{");
//System.out.println("------------------------printConstructors()is begin!------------------------");
printConstructors(cl);
//System.out.println("------------------------printConstructors()is end!------------------------");
System.out.println();
//System.out.println("------------------------printMethods()is begin!------------------------");
printMethods(cl);
//System.out.println("------------------------printMethods()is end!------------------------");
System.out.println();
//System.out.println("------------------------printFields()is begin!------------------------");
printFields(cl);
//System.out.println("------------------------printFields()is end!------------------------");
System.out.println("}");
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}
System.exit(0);
}
/**
* prints all constructors of a class
* @param cl a class
*/
public static void printConstructors(Class cl)
{
Constructor[] constructors=cl.getDeclaredConstructors();
for(Constructor c:constructors){
String name=c.getName();
System.out.println(" ");
String modifiers=Modifier.toString(c.getModifiers());
if(modifiers.length()>0)System.out.print(modifiers+" ");
System.out.print(name+"(");
//print parameter types
Class[] paramTypes=c.getParameterTypes();
for(int j=0;j<paramTypes.length;j++){
if(j>0)System.out.print(" ,");
System.out.print(paramTypes[j].getName());
}
System.out.print(");");
}
}
/**
* print all methods of a class
* param cl is a class
*/
public static void printMethods(Class cl){
Method[] methods=cl.getDeclaredMethods();
for(Method m:methods){
Class retType=m.getReturnType();
String name=m.getName();
System.out.println(" ");
//print modifiers ,return type,and method name
String modifiers=Modifier.toString(m.getModifiers());
if(modifiers.length()>0){
System.out.print(modifiers+" "+retType.getName()+" "+name+"(");
//print parameter types
Class[] paramTypes=m.getParameterTypes();
for(int j=0;j<paramTypes.length;j++){
if (j>0) {
System.out.print(",");
}
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}
}
/**
* print all fields of a class
* @param cl
*/
public static void printFields(Class cl){
Field[] fields=cl.getDeclaredFields();
for(Field f:fields){
Class type=f.getType();
String name=f.getName();
System.out.print(" ");
String modifiers=Modifier.toString(f.getModifiers());
if(modifiers.length()>0)System.out.print(modifiers+" ");
System.out.println(type.getName()+" "+name+" ;");
}
// System.out.println(" printFields()is ends!");
}
}
/***
* java.lang.Double测试得结果:
*
*
public final class java.lang.Double extends java.lang.Class
{
public java.lang.Double(java.lang.String);
public java.lang.Double(double);
public int hashCode();
public static native long doubleToRawLongBits(double);
public static long doubleToLongBits(double);
public static native double longBitsToDouble(long);
public volatile int compareTo(java.lang.Object);
public int compareTo(java.lang.Double);
public boolean equals(java.lang.Object);
public static java.lang.String toString(double);
public java.lang.String toString();
public static java.lang.String toHexString(double);
public static int compare(double,double);
public static java.lang.Double valueOf(double);
public static java.lang.Double valueOf(java.lang.String);
public static boolean isNaN(double);
public boolean isNaN();
public byte byteValue();
public double doubleValue();
public float floatValue();
public int intValue();
public boolean isInfinite();
public static boolean isInfinite(double);
public long longValue();
public short shortValue();
public static double parseDouble(java.lang.String);
public static final double POSITIVE_INFINITY ;
public static final double NEGATIVE_INFINITY ;
public static final double NaN ;
public static final double MAX_VALUE ;
public static final double MIN_NORMAL ;
public static final double MIN_VALUE ;
public static final int MAX_EXPONENT ;
public static final int MIN_EXPONENT ;
public static final int SIZE ;
public static final java.lang.Class TYPE ;
private final double value ;
private static final long serialVersionUID ;
}
*/
注意:如果数据类型输入错误或不规范均会发生异常.
分享到:
相关推荐
### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...
- `UserPo.java`, `UserClass.java`, `PersonPo.java`: 这些是可能被反射测试使用的类,它们可能包含了不同的字段、方法,甚至可能实现了某些接口或带有注解。 8. **安全与性能**: 虽然反射强大且灵活,但也带来...
Java反射机制是Java语言的一个重要特性,它允许程序在运行时动态地获取类的信息并创建对象,甚至可以访问私有成员。在Android开发中,反射机制有着广泛的应用,尤其是在处理框架内部逻辑、插件化开发、API兼容性等...
Java反射机制是Java语言提供的一种强大的能力,允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,类的私有方法通常不对外公开,以确保数据的安全性和封装性。然而,通过反射机制,我们可以打破这种限制...
public class ReflectionTest { public static void main(String[] args) { Class c = null; try { c = Class.forName("java.lang.String"); System.out.println("package " + c.getPackage().getName() ...
本资源“ReflectionTest”是一个专注于反射(Reflection)技术的iOS应用示例,它揭示了Objective-C中反射的强大功能。本文将详细解析这个项目的相关知识点。 一、反射概念 反射是程序在运行时动态检查和修改自身...
本资源为有关反射类java程序的代码,代码很全很有用,相信学java的会喜欢它。
"reflectiontest" 文件很可能是配合PPT进行反射学习的实践代码。可能包括以下部分: 1. 动态调用方法:例如,动态执行某个类的实例方法或静态方法。 2. 访问私有成员:通过 Reflection 可以绕过访问修饰符,访问私有...
#### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它允许程序在运行时访问类的信息,包括类名、字段、方法等,并能动态创建对象和调用方法。这种能力使得Java程序更加灵活,能够根据不同的条件...
这个文件可能是测试代码,展示了如何使用反射进行实际操作。例如,可以创建任意类型的实例,调用私有或公共方法,访问私有字段,甚至改变类型的行为。`Activator.CreateInstance()`可以用来动态创建对象,`...
在`ReflectionTest.java`中,可能会展示如何使用Java的反射API(Reflection API)来创建和操作代理对象。反射API允许我们在运行时检查类、接口、字段和方法的信息,甚至可以在运行时调用私有方法和访问私有字段,这...
ReflectionTest t = new ReflectionTest(); // 计算所用时间 DateTime startTime = DateTime.Now; for (int i = 0; i ; i++) { t.DoOperation(); } TimeSpan elapsed = DateTime.Now - startTime; Console....
下面是一个简单的C#反射应用示例,通过反射调用类库中的不同方法: ```csharp using System; using System.Reflection; namespace ReflectionTest { public class WriteTest { // 带参数的公共方法 public ...
1. **反射机制**:反射是Java的一种强大功能,允许在运行时动态获取类的信息并操作类的对象。 2. **创建对象**:可以通过反射机制动态创建对象,即使对象的构造器是私有的。 3. **调用方法**:通过反射可以调用类...
以下是一个简单的C#反射示例,展示了如何使用反射来调用一个类中的方法: ```csharp using System; using System.Reflection; namespace ReflectionTest { public class WriteTest { // 带参数的公共方法 ...
本文将深入探讨C#中的反射机制,并通过`ReflectionTest`示例代码来具体说明。 1. **反射基本概念** 反射是.NET框架提供的一种机制,它使代码能够获取关于自身和其他类型的信息,以及在运行时创建和操作这些类型的...
【C#反射实例学习及注意内容】 C#反射是一个强大的工具,它允许程序在运行时检查自身,并且能够动态地操作代码。理解C#反射的关键在于认识到它提供了封装程序集、模块和类型的对象,这些对象使得我们可以动态地访问...