public static void main 中的代码,或使用 main 中的代码调用另一个方法?
Code inside public static void main, or calling another method with code within main?
在互联网教程中,我通常会在 public static void main(String[] args)
中看到代码片段,而我的编程课程的讲师通常会编写一个方法并在 main 中调用该方法。
例如,在教程中我会看到:
class Person {
public static void main(String[] args) {
int age = 20;
System.out.println(age);
}
}
我的讲师会写:
class Person {
void run() {
int age = 20;
System.out.println(age);
}
public static void main(String[] args) {
new Person().run();
}
}
这两者之间有区别吗,还是只是偏好问题?
区别在于main
方法是static
,这基本上意味着它无法访问Person
的非静态methods/fields。当您使用 new Person()
创建 Person
的新实例时,您可以访问其所有成员方法(如本例中的 run
)。
class 中的主要方法是程序的入口点。这意味着它应该只用于实例化程序将要执行的操作所需的任何对象。
你的程序应该由 classes 组成,那些 classes 的一些实例将实际完成所有工作,那些 "objects" 是那些应该有一些行为来给你的程序功能。
您展示的示例非常基础。如此基础,它基本上什么都不做,但也许您的讲师想在您不知情的情况下开始让您习惯面向对象编程。
稍后他可能会教你 public static void main
函数只会调用 Form
对象(window)并且该表单将有一个 运行方法也。以后发生的一切都将由该表单及其组件负责(即处理用户输入,如点击或键盘)。主函数之后几乎什么都不做。
从输出的角度来看没有区别,因为两者会显示相同的内容。从技术角度来看,第一个示例甚至比第二个示例更快。
这是一种标准的编码实践,在这里有所不同。作为初学者,第一个示例可能看起来更好的解决方案,因为它比第二个示例更容易、更快和直接(第二个示例需要额外的努力来编写新方法、创建新对象然后调用该方法来实现您可以实现的相同目标)在第一个示例中使用单行代码实现。)
@adam-arold 已经提到了技术差异。我将强调编程原理,这是这里的主要区别。
第二个示例遵循称为 SoC(关注点分离)的标准编码原则。 SoC 说每个 Class/Method
应该只包含与它们应该做的事情相关的代码,因为任何额外的功能都应该在单独的 Class/Method
中处理。 Main
方法是一个入口点,Main
方法的职责是配置设置和启动程序,而不是处理任何业务逻辑(这里的业务逻辑是打印一行)。
您的讲师遵循标准做法 :) 即使是简单的例子。
听起来你的讲师是个不错的程序员:)
对于运行简单的样本或进行测试,两者都可以。
如果您只想快速测试一些 code/api,我建议 运行 第一个 - 直接在 main 方法中。因此,如果您只关心 运行 处理您的内容并检查打印的结果,则无需创建新方法。
但是,如果您打算使用更多 OO 原则来做某事,您通常应该在非静态(即不是 'main')上下文中拥有对象内部的逻辑。因此,如果您有属于 Person 的逻辑,则应将其封装在 Person 的方法中,无论调用它的人(另一个对象或您简单的 main)都将使用其方法。
如果您对静态与非静态有疑问,我建议您通过互联网阅读一些教程并进行实验。示例:http://beginnersbook.com/2013/05/static-vs-non-static-methods/
在互联网教程中,我通常会在 public static void main(String[] args)
中看到代码片段,而我的编程课程的讲师通常会编写一个方法并在 main 中调用该方法。
例如,在教程中我会看到:
class Person {
public static void main(String[] args) {
int age = 20;
System.out.println(age);
}
}
我的讲师会写:
class Person {
void run() {
int age = 20;
System.out.println(age);
}
public static void main(String[] args) {
new Person().run();
}
}
这两者之间有区别吗,还是只是偏好问题?
区别在于main
方法是static
,这基本上意味着它无法访问Person
的非静态methods/fields。当您使用 new Person()
创建 Person
的新实例时,您可以访问其所有成员方法(如本例中的 run
)。
class 中的主要方法是程序的入口点。这意味着它应该只用于实例化程序将要执行的操作所需的任何对象。
你的程序应该由 classes 组成,那些 classes 的一些实例将实际完成所有工作,那些 "objects" 是那些应该有一些行为来给你的程序功能。
您展示的示例非常基础。如此基础,它基本上什么都不做,但也许您的讲师想在您不知情的情况下开始让您习惯面向对象编程。
稍后他可能会教你 public static void main
函数只会调用 Form
对象(window)并且该表单将有一个 运行方法也。以后发生的一切都将由该表单及其组件负责(即处理用户输入,如点击或键盘)。主函数之后几乎什么都不做。
从输出的角度来看没有区别,因为两者会显示相同的内容。从技术角度来看,第一个示例甚至比第二个示例更快。 这是一种标准的编码实践,在这里有所不同。作为初学者,第一个示例可能看起来更好的解决方案,因为它比第二个示例更容易、更快和直接(第二个示例需要额外的努力来编写新方法、创建新对象然后调用该方法来实现您可以实现的相同目标)在第一个示例中使用单行代码实现。)
@adam-arold 已经提到了技术差异。我将强调编程原理,这是这里的主要区别。
第二个示例遵循称为 SoC(关注点分离)的标准编码原则。 SoC 说每个 Class/Method
应该只包含与它们应该做的事情相关的代码,因为任何额外的功能都应该在单独的 Class/Method
中处理。 Main
方法是一个入口点,Main
方法的职责是配置设置和启动程序,而不是处理任何业务逻辑(这里的业务逻辑是打印一行)。
您的讲师遵循标准做法 :) 即使是简单的例子。
听起来你的讲师是个不错的程序员:)
对于运行简单的样本或进行测试,两者都可以。
如果您只想快速测试一些 code/api,我建议 运行 第一个 - 直接在 main 方法中。因此,如果您只关心 运行 处理您的内容并检查打印的结果,则无需创建新方法。
但是,如果您打算使用更多 OO 原则来做某事,您通常应该在非静态(即不是 'main')上下文中拥有对象内部的逻辑。因此,如果您有属于 Person 的逻辑,则应将其封装在 Person 的方法中,无论调用它的人(另一个对象或您简单的 main)都将使用其方法。
如果您对静态与非静态有疑问,我建议您通过互联网阅读一些教程并进行实验。示例:http://beginnersbook.com/2013/05/static-vs-non-static-methods/