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