Java程序可以访问自己的源代码吗?

时间:2012-10-01 03:52:26

标签: java

在Java中,我想找到一种方法来允许程序访问自己的源代码,主要用于调试和元编程目的(例如在运行时打印方法签名,或允许程序读取自己的注释) ,或允许Java类打印某种类型的所有方法,或允许程序生成自己的源代码的新版本等。)

有没有办法让Java程序访问自己的源代码副本,并逐行读取?

//this is the first line of the program
//this method is not implemented
public class inspectSourceCode(){
    public static String getLine(int lineNumber){
        //get the line of the program's own source code as a string,
        //this is not currently implemented
    }
    //this method is implemented
    public static void main(String[] args){
        System.out.println(getLine(0));
        //should print "//this is the first line of the program",
        //if the method getLine works correctly
    }
}

5 个答案:

答案 0 :(得分:2)

您可以直接访问代码中的.java文件。只需将其指向正确的目录并像访问其他任何目录一样访问该文件。

程序没有运行java文件本身,而是在运行时使用编译文件。

答案 1 :(得分:1)

  

我正在尝试设置每个方法的属性

我建议您使用注释,然后使用Method.getAnnotation

获取注释

答案 2 :(得分:0)

  

Java程序可以访问自己的源代码吗?

一般没有。源代码通常在执行平台上不可用。

在源代码可用的子案例中,是(当然)程序可以使用标准Java I / O API读取它。但是,没有专门用于阅读源代码任务的标准API。

  

...主要用于调试目的(例如在运行时打印方法签名,或允许程序读取自己的注释,或允许Java类打印某种类型的所有方法)

没有技术上的原因可以解释为什么你不能做这些事情,但是在这样的工具达到有用之前你会有很多工作要做。而且,坦率地说,典型的Java IDE的源代码调试器已经完成了所有这些事情,所以我并没有真正看到这一点。

答案 3 :(得分:0)

您检查过ASM吗? http://asm.ow2.org/

但我认为,你要做的事情是非常昂贵的。

答案 4 :(得分:0)

理论上,您可以在源代码中使用反编译器库来访问类,但请记住,由于优化和/或混淆等原因,您可能无法在字节码和字节码之间进行1-1转换。 Java代码。另请注意,如果代码未使用内置的调试信息进行编译,您甚至不一定能够使用#行。