为什么我需要创建我正在使用的类的实例?

时间:2017-01-23 20:57:10

标签: java class oop

好的我现在正在学习OOP,有一些我不明白的事情。例如,我有一个名为PersonProgram的类,它包含我的main。我在类中的main方法之外有几个方法和函数。为什么我不能在不创建类的新对象的情况下从main调用这些方法和函数?由于他们都在同一个班级,为什么没有像任何其他方法一样调用它们是有意义的,没有
    PersonProgram p = new PersonProgram(); 第一λ

6 个答案:

答案 0 :(得分:4)

  

为什么我不能在不创建类的新对象的情况下从main调用这些方法和函数?

因为它们不是static

您必须创建一个能够使用它们的实例。添加修饰符,以便您可以访问它们。例如,

private static getSomething()

然后,从main调用它:

getSomething()

还要注意全能的@JonSkeet在评论中所说的内容。

答案 1 :(得分:1)

简短回答:因为main方法是 static ,这意味着它属于类而不是特定对象。静态上下文不能引用非静态上下文,因为没有特定对象的引用。

但你也可以制作所有其他变量和方法static,并解决问题,对吗?

没有。不要那样做。

答案很长:

主要方法是static,因为应用程序的自定义对象在启动之前都不存在。毕竟,在房间存在之前,你不能在房间里存在某些东西。但是,JVM需要一个程序的入口点,因此main方法必须没有所有对象引用,因此static

Java在您的应用程序启动时调用PersonProgram.main(args)。现在让我们说你已经定义了PersonProgram类中的“人”。也许PersonProgram有一个名字,一个年龄等等。但是你还没有任何PersonProgram个对象,那么main方法如何知道它应该是什么名称或年龄与谁合作?

这是一种让你更清楚的方法:创建一个名为Application的新类,并只将主要方法放入其中。现在,尝试引用您的PersonProgram实例变量。除非先创建PersonProgram对象,否则您将无法执行此操作。

您刚开始学习OOP概念,将main方法放在类定义中的想法可能会让人感到困惑。它使学习编码变得更容易,但是当您尝试学习OOP原则时,应该尝试将main方法与类逻辑分开。

答案 2 :(得分:0)

这主要是因为您可以拥有同一个类的多个实例。

Dog bigDog = new Dog();
Dog littleDog = new Dog();

现在如果您想知道您的狗的名字怎么办? Dog.GetName();,对吧?哪条狗的名字会归来?你必须通过在类的实例上调用函数来告诉编译器。

bigDog.GetName();

答案 3 :(得分:0)

如果您想在产品中处理超过2个人,那么您可以使用

PersonProgram p1 = new PersonProgram();// Have p1.name="First person"
PersonProgram p2 = new PersonProgram();// Have p2.name="Second person"

等......

如果您知道只有一个人,那么您可以创建静态类,而不需要创建新对象并直接使用而无需创建实例。

所以OOP为你提供了两个选项,选择一个适合你的选项。

答案 4 :(得分:0)

了解创建Object Oriented Programming背后的驱动力是将内存/数据与可在其上运行的操作耦合。因此,在OOP中,对象大部分时间用于为它们包含的数据提供服务,而静态方法基本上用于无状态进程。

答案 5 :(得分:0)

基本OOP规则:

一个类使其所有非私有,非静态成员仅通过其实例化对象可用。

即使从同一个班级请求成员,这也适用。虽然您也可以访问班级的私人成员。

要使用this.method(),您必须将方法设为静态。