1

我有一个简单的问题,可能近乎愚蠢(对你们那里的 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.
}

现在我对此有了基本的了解(“public”、“void”甚至“static”是什么意思),但我不确定我是否理解为什么课程课程使用 run() 并且编译器另有说明。我发现有趣的是,编译器要求“main”方法是静态的(如常量或类变量)并使用称为 args 的字符串;我从未使用过这个字符串,但无论出于何种原因,它似乎都是必需的。

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

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

4

4 回答 4

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 字符串数组允许您从执行程序的命令行将字符串传递给程序。

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

于 2013-05-31T01:21:23.610 回答
2

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

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

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

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

于 2013-05-31T02:10:50.720 回答
1

run 方法实现了用于执行线程的 Runnable 接口。

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

于 2013-05-31T01:11:55.043 回答
1

我怀疑您正在学习的课程是故意避免使用正常的、更冗长的语法,以使没有编程经验的学生更容易理解内容。

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

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

至于这是一个好还是坏的方法,我真的不能说。我敢肯定,有些学生喜欢这种更柔和的介绍,而另一些学生可能会觉得“牵手”是不必要的障碍。

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

于 2013-05-31T01:38:37.650 回答