纠正Java中的主要方法,并理解它们的含义

时间:2013-05-31 01:08:08

标签: java

我有一个快速的问题,可能与愚蠢(对你们那里的Java专家)有关,但我在理解基本的“主要方法”语法以及为什么它似乎变化时遇到了一些麻烦。

首先是一个小背景:我一直在学习一些基础Java课程,而且我已经能够很快地学习它,因为我已经用其他语言(VBA,Python等)完成了一些编程。

但无论如何,对于“主要方法”,本课程使用:

public void run() {
    // do whatever we were discussing
}

然而,我一直在使用的编译器(www.compileonline.com,现在最近的JGrasp)显然只是认识到这一点:

public static void main(String args[]) {
    // code goes here.
}

现在我对此有一个基本的了解(“公共”,“无效”甚至“静态”意味着什么),但我不确定我理解为什么课程使用run()而编译器则另有说法。我觉得有趣的是,编译器要求“main”方法是静态的(如常量或类变量)并使用名为args的字符串;我从来没有使用过这个字符串,但无论出于何种原因,似乎都需要它。

同样,我一直在学习的课程使用简单的“println”,但编译器需要“System.out.println”......我想应该提一下,因为我认为它是同一情况的一部分

无论如何,有没有人知道这里发生了什么?这没什么大不了的,因为很容易将编译器所需的文本复制/粘贴到课程代码中以获得类似的结果,但实际上知道为什么会是这种情况会很好(因为我确定这种情况复制/粘贴策略将在未来导致“错误”。我能想出的唯一一件事就是可能有一个Java的更新,它彻底改变了某些功能并且不向后兼容?无论如何,提前感谢您的意见。 :)

4 个答案:

答案 0 :(得分:3)

这是一个基本的Java类。

public class Basic implements Runnable {

    @Override
    public void run() {
        // TODO Code goes here
    }

    public static void main(String[] args) {
        Basic basic = new Basic();
        basic.run();
    }

} 

这是main方法和run方法一起工作的方式。您将代码放在run方法中,然后从main方法执行代码。

main方法是静态的,因为Java必须在您的类和方法中有一个入口点。 args String数组允许您从执行程序的命令行将字符串传递给程序。

例如,文件复制程序将有两个args参数,即输入文件路径和输出文件路径。这允许文件复制程序复制任何文件。

答案 1 :(得分:2)

Java中用于独立应用程序的真正主要方法是

public static void main(String[] args) { ... }

其他所有内容都是框架的一部分,框架有自己的主要方法,可以为您设置一些内容然后调用代码。

它如何调用您的代码取决于框架。如果它是一个Web框架,它可能会调用您的doGet和doPost方法(servlet),或者在使用@Path(JAX-RS)注释的类中使用@GET和@POST注释的方法。如果它是applet或JavaFX应用程序,您的代码将以不同的方式调用,依此类推。

答案 2 :(得分:1)

run方法实现了Runnable接口来执行线程。

http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

答案 3 :(得分:1)

我怀疑你正在学习的课程是故意避免使用正常的,更详细的语法,以便在没有编程经验的情况下让学生更容易理解这些内容。

对于初学者来说,像public static void main(String[] args)System.out.println()之类的东西对于他们所代表的看似简单的想法来说可能会非常满口。因此,一些教师选择避免使用“真正的”Java,直到他们的学生准备好掌握数组和静态字段/方法等概念。

这种教学方法还有助于防止学生遇到他们尚未理解的错误,例如在静态环境中调用非静态方法。正如其他人所提到的,它也可以很容易地确保学生编写与给定测试框架兼容的代码。

至于这是好还是坏的方法,我不能说。我相信一些学生会欣赏更柔和的介绍,而其他人可能会觉得“手持”是一种不必要的障碍。

当然,如果您打算编写真实世界的 Java程序,您需要熟悉Java 真正在某些方面工作的方式,这涉及到你指出的冗长形式。