Java反射的高级应用,模拟开发环境IDE动态搜索类成员以及方法,。。。。。

简介: /*  *这个类可以根据 给定的一个Class字节码文件获取类的所有信息  *  编写者:xiaowei   *  这个例子仅仅作为反射的练手  *  喜欢的朋友继续完善  *  只是获得了所有访问权限但是没哟觉得而每个成员的权限类型  *  */ import java.

/*
 *这个类可以根据 给定的一个Class字节码文件获取类的所有信息
 *  编写者:xiaowei 
 *  这个例子仅仅作为反射的练手
 *  喜欢的朋友继续完善
 *  只是获得了所有访问权限但是没哟觉得而每个成员的权限类型
 * 
*/
import java.lang.reflect.*;
public final class FindClass 
{
   private String fieldList ;  //成员列表
   private String methodList ;   //方法列表
   private String className;//类的名字
   private String showClassInfo; //输出信息
   public void getClassField() throws Exception//获得类的字段
   {
   Field[]  f=Class.forName(className).getDeclaredFields() ;
   for(Field tem:f)  //迭代for循环
   {
    tem.setAccessible(true) ;
    this.fieldList+=(tem.getType().getName()+" "+ tem.getName()+";\n");
   }
   }

   public void getClassMethod() throws Exception  //获得类的方法
   {
    Method[] m=Class.forName(className).getDeclaredMethods() ;//获得类的所有定义方法
    for(Method tem:m)
    {  
     String prm="" ;//参数列表
     tem.setAccessible(true) ;
     Class[] pt=tem.getParameterTypes() ;
     for(Class a:pt)
     {
     prm+=(a.getName()+",") ;
     }
        if(prm.equals("")==false)
     prm=prm.substring(0,prm.length()-1);
     this.methodList+=(tem.getReturnType().getName()+"  "+tem.getName()+"(" +prm +");\n" ) ;    
  
     }
   }

   public void   showClassInfo() //输出类的信息
   {
    System.out.println(this.fieldList);
    System.out.println(this.methodList);
   }
   public void getClassInfo() throws Exception //获得类的信息
   {
    this.getClassField() ;
    this.getClassMethod() ;
   }
   public void loadClassForname(String classname)throws Exception//加载类的名字 
   { 
    this.initClassInfo() ;
    this.className=classname;
    getClassInfo() ;
   }
   public void initClassInfo()  //初始化
   {
    this.methodList="Method List:\n" ;
    this.fieldList="Field List:\n" ;
    this.className="" ;
    this.showClassInfo="" ;
   }
   public static void main(String []args) throws Exception
   {
    FindClass cls =new FindClass() ; 
    cls.loadClassForname("java.lang.String"); //加载一个类
    cls.showClassInfo() ;//显示类成员
      
   }
}
class Me
{
 int a ;
 int b ;
 void c(int a,int c)
 {
  
 }
 void aa(int a)
 {
  
 }
}
 
 

 

目录
相关文章
|
1天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
10 2
|
1天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
16 3
|
1天前
|
Java 编译器 ice
【Java开发指南 | 第十九篇】Java方法
【Java开发指南 | 第十九篇】Java方法
6 0
|
1天前
|
Java 编译器 ice
【Java开发指南 | 第十七篇】Java 方法
【Java开发指南 | 第十七篇】Java 方法
6 1
|
1天前
|
存储 Java ice
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
8 3
|
1天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
11 1
|
1天前
|
存储 Java ice
【Java开发指南 | 第十四篇】Java Number类及Math类
【Java开发指南 | 第十四篇】Java Number类及Math类
9 1
|
1天前
|
Java ice
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
10 4
|
1天前
|
存储 缓存 Java
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
9 2
|
1天前
|
Java 编译器
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
9 4