给一个.java文件如何反射成Class文件我想求出.java文件中所有的方法,属性,。高手帮帮忙!!
重谢!!

解决方案 »

  1.   

    你应该是现在有.class文件吧,想得到.java文件吧。
    如果你有.java的文件,直接看就行了么。
    如果将.class文件转成.java文件的话,找个反编译的工具。
      

  2.   

    我现在有一个.java文件,想求出多少个方法,多少个属性。。
      

  3.   

    不可以看.java文件吗?
    打开看不就知道有多少方法,多少属性了吗?
      

  4.   

    public Field[] getDeclaredFields()
                              throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。public Method[] getDeclaredMethods()
                                throws SecurityException返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
      

  5.   

    自己整个像java编译器的语法分析器的程序就行了
      

  6.   


    Method[] m=null;
    Field[] f = null;
     try{
     Class nowClass=Class.forName(classFilename);
     m=nowClass.getDeclaredMethods();
     f=nowClass.getDeclaredFields();
     
     } catch (Throwable e) { 
             System.err.println(e); 
        } 
    完后再遍历数组
      

  7.   

    java是源文件,class才是编译的文件
      

  8.   

    你的意思应该是只知道一个java类的class文件,想知道里面有什么方法和变量吧!
    可以在dos下进入文件所在目录再输入 “javap -private 文件名”命令就可以看到了
      

  9.   

    你编译下,不就有 class文件了吧,你是问如何查看 .class字节码的吧,网上有很多工具。
      

  10.   

    楼主是要使用java反射reject得到方法、属性
    正解
      

  11.   

    如何反射成class?
    第一次听说,直接javac不就有了,关反射什么事,
    如果就是想得到方法属性,跟反射也没关系
      

  12.   

    先用javac命令编译成.class文件,再用反射机制动态获得.import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    public class Name {
    public static void main(String[] args) {
    Method[] methods = null;
    Field[] fields = null;
    try {
    Class classType = Class.forName("这里写你的类的名字");
    methods = classType.getDeclaredMethods();
    for(int i = 0; i < methods.length; i++) {
    //获取方法的全部信息,例如:public void Print.print()
    String methodStr = methods[i].toString();
    //截取方法的名字,例如:print
    System.out.println(methodStr.substring(methodStr.indexOf(".") + 1, methodStr.indexOf("(")));
    }
    } catch (ClassNotFoundException cnfe) {
    cnfe.printStackTrace();
    }
    }
    }
      

  13.   

    //动态编译(此处可直接编译内存中的Java源码,二进制码也放在内存中)
             com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main(); 
             String[] cpargs = new String[] {"-d", "." ,"Temp.java"}; 
             //动态编译
             int status = javac.compile(cpargs); 
             if(status != 0 )
             { 
                     System.out.println("您给的Java代码有错!"); 
                     return null; 
             } 
             //创建一个URL数组
             URL[] urls = {new URL("file:Temp.class")};
             //以默认的ClassLoader作为父ClassLoader,创建URLClassLoader
             URLClassLoader myClassLoader = new URLClassLoader(urls);
             //加载Temp类(如果要加载内存中的class文件-二进制码,需要自己写类加载器)
             Class clazz = myClassLoader.loadClass("Temp"); 
      

  14.   

    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    public class Name {
    public static void main(String[] args) {
    Method[] methods = null;
    Field[] fields = null;
    try {
    Class classType = Class.forName("这里写你的类的名字");
    methods = classType.getDeclaredMethods();
    fields = classType.getDeclaredFields();
    for(int i = 0; i < methods.length; i++) {
    //获取方法的全部信息,例如:public void Print.print()
    String methodStr = methods[i].toString();
    //System.out.println(methodStr);
    //截取方法的名字,例如:print
    System.out.println("方法的名字: " + methodStr.substring(methodStr.indexOf(".") + 1, methodStr.indexOf("(")));
    }
    for(int i = 0; i < fields.length; i++) {
    //完整的属性信息
    String fieldStr = fields[i].toString();
    //System.out.println(fieldStr);
    //经过截取得到属性的名字
    System.out.println("属性的名字: " + fieldStr.substring(fieldStr.lastIndexOf(".") + 1, fieldStr.length()));
    }
    } catch (ClassNotFoundException cnfe) {
    cnfe.printStackTrace();
    }
    }
    }
      

  15.   

    额。。
    那个,java到class的过程,应该不叫反射。
    这个过程应该叫编译。记住,叫,编译。要想完成楼主的目的,可以有两个途径。
    一个是将java文件编译成class文件,然后,用java的反射功能查看类属性。
          但是,这要求java文件,必须要成功的编译成class文件才行。
    另一个是自己想办法解析那个java文件,把里面的方法和属性找出来。
          但是,这个编程复杂度要大很多。一般采用第一种方案。
          怎么编译,要看楼主的JDK版本了。JDK6增强了动态编译的功能,可以直接使用;
          而以前的版本,可以使用apache的工具包(tomcat里面好像就使用了这个),
                如果运行环境也安装的JDK,也可以使用控制台命令进行编译。(此方法不推荐)
          反射的话,太简单了,网上随便搜索一下,就能查到代码。
      

  16.   


    先把.java文件编译成.class,然后使用反射. 
      

  17.   

    环境变量配置好,javac编译不就OK了吗?
      

  18.   

    是Class类 不是.class文件
    6楼正解