我可以从命令行调用main()以外的java方法吗?

时间:2011-11-08 17:37:01

标签: java methods

我可以从命令行调用main()以外的java方法吗?

谷歌对这些信息不太了解。

由于

8 个答案:

答案 0 :(得分:13)

如果你没有主要功能,你可以添加一个,如果你这样做,你可以在顶部添加一系列if-then块。

public static void main(String[] args){
    if (args[0].equals("MY_METHOD"))
        callMyMethod();
    else if(args[0].equals("MY_OTHER_METHOD"))
        callMyOtherMethod();
    //... Repeat ad nauseum...
    else {
        //Do other main stuff, or print error message
    }
}

然后,从命令行:

$ java [MyPackage.]MyClass MY_METHOD

将运行您的方法。

这是非常hackish - 我几乎可以肯定这不是你想要做的,但是嘿,它回答了这个问题,对吗?

答案 1 :(得分:10)

如果为JVM语言安装REPL(Groovy可能需要最少的工作才能开始),那么您可以在REPL提示符下调用Java方法(Groovy的名称为groovysh)。 groovysh有一些奇怪的功能(我最不喜欢的是用def声明变量并不能达到你认为应该做的那样),但它仍然非常有用。这是一个有趣的功能,Groovy不尊重隐私,因此您可以调用私有方法并检查私有变量的内容。

Groovy安装包括groovysh。下载zip文件,将其解压缩到某处,将bin目录的位置添加到路径中,然后就可以了。您可以将jar放入lib文件夹,对于您正在运行的代码和该代码使用的库,Groovy会在那里找到它们。

答案 2 :(得分:4)

这是一个bash函数,可以让你这样做:

function javae {
  TDIR=`mktemp -d`
  echo "public class Exec { public static void main(String[] args) throws Exception { " $1 "; } }" > $TDIR/Exec.java && javac $TDIR/Exec.java && java -cp $CLASSPATH:$TDIR Exec;
  rm -r $TDIR;
}

把它放在〜/ .bashrc中你可以这样做:

javae 'System.out.println(5)'

或者这个:

javae 'class z { public void run() { System.out.println("hi"); } }; (new z()).run()'

当然这是一个黑客,但它确实有效。

答案 3 :(得分:3)

您甚至无法从命令调用main方法。 JVM调用main方法。它只是一个惯例。它总是需要是“public static void main”。

你的用例是什么?

答案 4 :(得分:3)

不,你不能

根据Java command line FAQ(现在已经死了。) 您可以查看Java Threads FAQ

  

入口点方法main()用于提供启动Java程序的标准约定。方法名称的选择有点武断,但部分设计是为了避免与Thread start()和Runnable run()方法发生冲突。

查看常见问题解答。您将获得有关JAVA命令行的一些很好的知识

答案 5 :(得分:3)

来自The Java Virtual Machine Specification

  

Java虚拟机通过创建初始类来启动   是以依赖于实现的方式指定的,使用   bootstrap类加载器(第5.3.1节)。然后Java虚拟机链接   初始类,初始化它,并调用其公共类方法   void main(String [])。调用此方法可以进一步驱动   执行。执行Java虚拟机指令   构成主要方法可能导致链接(并因此   创建)其他类和接口,以及调用   其他方法。

所以主要看起来很特别。

答案 6 :(得分:2)

不,我不这么认为。 main()是入口点。这是由语言定义的。当然,您可以围绕main()调用(“Java MyApp arg1 ... argn”)包装脚本,以隐藏名称(甚至隐藏您正在使用Java)并提供您自己的参数语法和解析 - 这是OS提供的功能,当然,也可以通过某种命令行脚本语言。

如果您使用Java创建其他类型的可执行文件,例如Applet或GWT应用程序,那么入口点就不同了,但我认为您正在考虑从命令行运行的可执行文件。

答案 7 :(得分:0)

不,那是不可能的。

请参阅Java语言规范

http://java.sun.com/docs/books/jls/second_edition/html/execution.doc.html

当然applet和servlet以及其他技术可能有不同的起点。

相关问题