package com.core.ch5;
import java.util.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ReflectionTest {
@SuppressWarnings("unchecked")
public static void main(String[] args){
String className ;
Scanner in = new Scanner(System.in);
className = in.next();
try {
Class c = Class.forName(className);
Class superc = c.getSuperclass();
String modifiers = Modifier.toString(c.getModifiers());
if(modifiers.length() > 0 ) System.out.print(modifiers + " ");
System.out.print(c.getName() + " extends ");
if(superc != null && superc != Object.class) System.out.println(superc.getName() + "{");
System.out.println();
printStructor(c);
printMethod(c);
printFields(c);
} catch (Exception e) {
}
}
@SuppressWarnings("unchecked")
public static void printStructor(Class cl){
Constructor[] constructor = cl.getDeclaredConstructors();
for(Constructor c : constructor){
String name = c.getName();
String modifier = Modifier.toString(c.getModifiers());
System.out.print("\t" + modifier + " " + name + "(");
Class[] paramType = c.getParameterTypes();
for(int i=0;i<paramType.length;i++){
if(i > 0){
System.out.print(",");
}
System.out.print(paramType[i].getName());
}
System.out.println(");\n");
}
}
@SuppressWarnings("unchecked")
public static void printMethod(Class cl){
Method[] method = cl.getDeclaredMethods();
for(Method m : method){
Class retType = m.getReturnType();
String modifier = Modifier.toString(cl.getModifiers());
String name = m.getName();
System.out.print("\t" + modifier + " " + retType.getName() + " " + name + "(");
Class[] clazz = m.getParameterTypes();
for(int i=0;i<clazz.length;i++){
if(i > 0){
System.out.print(",");
}
System.out.print(clazz[i].getName());
}
System.out.println(");\n");
}
}
public static void printFields(Class cl){
Field[] f = cl.getDeclaredFields();
for(int i=0;i<f.length;i++){
String modifier = Modifier.toString(f[i].getModifiers());
Class type = f[i].getType();
System.out.println("\t" + modifier + " " + type.getName() + " " + f[i].getName() + ";\n");
}
System.out.println("}");
}
}
分享到:
相关推荐
这个工程是使用 java 来使用反射的原理读取 *.proproies 资源文件中的一些配置信息。利用此方法可以在没有使用框架的情况下可以让你的程序更加灵活易于修改。如:可以将一些数据库配置信息,重要信息写入到资源文件...
- `java.lang.Class`:表示一个类或接口的信息。 - `java.lang.reflect.Field`:表示类或接口的字段(包括枚举常量)。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Constructor`:表示类的...
1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。它可以访问外部类的所有成员(包括私有成员),同时也可以被外部类所访问。 2. **静态成员变量**:静态成员变量是类级别的变量,可以通过...
当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括类名、构造器、方法、字段等。这通常通过`Class.forName()`方法完成,传入类的全限定名即可。 在提供的"ReflectDemo"中,可能包含...
这个“Java反射调用工具类”可能是为了简化和封装这些复杂的反射操作而创建的一个实用工具类。 首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念...
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过反射,我们可以动态地创建对象、访问和修改字段、调用方法,甚至执行私有方法和访问包内可见的元素。...
反射也可以用来检查一个类是否实现了特定的接口,通过`Class.getInterfaces()`获取类实现的接口,`Class.isAssignableFrom()`判断类或接口之间的关系。 7. **注解处理**: 反射机制同样可以用于读取类、方法或...
1. `Class`类:每个类在内存中都有一个对应的Class实例,它包含了关于类的所有信息,如类名、修饰符、超类、接口、构造器、字段和方法等。可以通过`Class.forName()`或对象的`getClass()`方法获取到Class对象。 2. ...
- 当一个类被Java虚拟机(JVM)加载时,都会对应生成一个`Class`对象。这个`Class`对象包含了关于类的所有信息。例如,在`ClassDemo`示例中,通过`name.getClass()`获取了`String`类对应的`Class`对象,然后可以...
4. **实例化对象**:讲解如何使用`newInstance()`方法来实例化一个类的对象,以及在没有无参构造器时的解决方案。 5. **访问字段**:介绍`getDeclaredFields()`、`getField()`方法,以及如何使用`set()`和`get()`来...
反射还可以用来探索类的继承关系,例如,通过 `isAssignableFrom(Class<?> c)` 方法判断一个类是否可以从另一个类或接口派生。此外,`getSuperclass()` 和 `getInterfaces()` 分别返回类的超类和实现的接口。 6. ...
利用JAVA反射读取数据库表名自动生成对应实体类的操作 标题分析: 该标题主要介绍了利用JAVA反射机制,读取数据库表名,并自动生成对应的实体类的操作。这种操作可以自动根据表名生成实体类,具有很好的参考价值和...
总之,Java反射是一个强大的工具,可以让我们在运行时探索和操纵类的结构和行为。通过实践“ReflectionDemo”,我们可以深入了解反射的工作原理,并学会如何在实际项目中有效地利用这一特性。同时,了解“jdom.jar”...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...
1. **Class类**:在Java中,每一个类都在内存中对应一个Class对象,它包含了类的所有信息。通过`Class.forName()`方法或对象的`getClass()`方法,我们可以获取到对应的Class对象。 2. **获取类信息**:一旦有了...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得动态性、灵活性和元编程成为可能,从而极大地扩展了Java开发者的工具箱。在Java中,...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制...