我有一个快速的问题,可能与愚蠢(对你们那里的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的更新,它彻底改变了某些功能并且不向后兼容?无论如何,提前感谢您的意见。 :)
答案 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 真正在某些方面工作的方式,这涉及到你指出的冗长形式。