为什么要实例化主类,而不是使用静态方法?

4

我的朋友刚开始学习编程。他说他的代码有问题,并在Skype上分享了他的屏幕。我发现他实例化了Main类以使用所有函数等。它看起来像这样:

public static void main(String[] args) {
    Main main = new Main();
    main.Example();
}

我在一些在线教程中也注意到了这一点。问题是,既然你不应该有多个主函数,为什么要实例化它?

4个回答

3

你可以认为这样做更好。

你应该不要有一个名为Main的类,而是使用一个具有适当面向对象的目的的类来封装某些内容。

main方法必须位于其中一个类中,但这并不意味着容纳main方法的可怜类不允许被实例化。

在纯粹的面向对象编程中,根本没有static的位置。甚至连实用类都没有:http://www.yegor256.com/2014/05/05/oop-alternative-to-utility-classes.html


它有点过时了。我现在正在开发一个小程序,Main 只是坐在那里调用外部方法并浪费空间 :\ - Hutch

1
这段代码初始化了Main类。不是public static void main()方法!!!
据我所知,这在Java中很常见,因为你不能总是使用static类或方法。
你不能在static方法(如main方法)中访问non-static变量或方法。因此,做法是创建该类本身的一个实例并使用non-static变量或方法。
请参阅this question

1
使用静态和非静态上下文的区别可以在这里找到。
假设你问为什么他要创建他的主类的一个对象,答案是为了从静态上下文中访问非静态方法。如果没有主类对象,他只能访问静态方法和类。我建议研究面向对象编程基础,可以在这里找到。
 Main main = new Main(); //creates object of class Main
 main.Example(); //calls method Example from object main

你的朋友创建了一个类的实例并将其存储到内存中。他没有实例化主方法,而是实例化了Main类。这使他能够更改属于Main类主对象的信息。
这样做的目的是访问Main类中的非静态方法。

我理解静态和非静态的区别。只是我不喜欢如果我仅使用一次就必须实例化某事的想法。 - Hutch
@Hutch,它不一定只使用一次。可能,main.Example() 调用将执行许多其他操作。这些其他操作可能包括访问 Main 对象的其他实例变量或实例方法。 - Doug Richardson
@Hutch 这只是一个例子情况。大多数程序将调用许多方法,而不仅仅是一个。 - Ryan
你不想在静态中完成所有事情。 - Ryan
@Ryan 我一直以为这是惯例,但我想问问是否有什么我不知道的原因。老实说,这样做感觉很奇怪。 - Hutch
显示剩余3条评论

1
静态方法可以使用以下格式轻松访问。 ClassName.methodname()。 但是,如果没有创建实例方法,则无法调用类的实例方法。如果我们所有的方法都是静态的,在这种情况下,就不需要像在实用程序类中那样创建对象。

没错。我想要能够随时访问Main,而不必为了一个简单的属性创建一个新实例。有人给我链接到其他人的问题,其中类完全可以被实例化。然而,我认为Main是一个例外。 - Hutch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接