首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我需要创建我正在工作的类的实例?

为什么我需要创建我正在工作的类的实例?
EN

Stack Overflow用户
提问于 2017-01-23 20:57:10
回答 6查看 820关注 0票数 5

好的,我现在正在学习OOP,有些事情我不明白。例如,我有一个名为PersonProgram的类,它包含我的main。在类的主方法之外,我有几个方法和函数。为什么我不能在不创建类的新对象的情况下从main调用这些方法和函数?既然它们都在同一个类中,那么为什么不能像任何其他方法那样调用它们呢?

代码语言:javascript
运行
复制
 PersonProgram p = new PersonProgram(); first?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-01-23 21:00:15

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

因为他们不是static

您必须创建一个实例才能使用它们。添加修饰符,这样您就可以访问它们。例如,

代码语言:javascript
运行
复制
private static getSomething()

然后,从main调用它如下:

代码语言:javascript
运行
复制
getSomething()

也要注意全能者JonSkeet在评论中说的话。

票数 4
EN

Stack Overflow用户

发布于 2017-01-23 21:06:24

简单的回答是:因为主要方法是静态的,这意味着它属于类而不是特定的对象。静态上下文不能引用非静态上下文,因为在脑海中没有特定对象的引用。

但是你也可以让你所有的变量和方法static,在那里,问题解决了,对吗?

不是的。别干那事。

长话短说:

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

在应用程序启动时,Java调用PersonProgram.main(args)。现在假设您已经定义了PersonProgram类中的"Person“。也许PersonProgram有一个名称、一个年龄等等,但是您还没有任何PersonProgram对象,那么main方法如何知道它应该使用的名称或年龄呢?

这里有一种让您更加清楚的方法:创建一个名为Application的新类,并只将您的主要方法放入其中。现在,尝试引用您的PersonProgram实例变量,除非您首先创建一个PersonProgram对象,否则您将无法这样做。

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

票数 1
EN

Stack Overflow用户

发布于 2017-01-23 21:02:40

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

代码语言:javascript
运行
复制
Dog bigDog = new Dog();
Dog littleDog = new Dog();

如果你想知道你狗的名字呢?Dog.GetName();,对吧?哪个狗的名字会回来?您必须通过调用类实例上的函数将其告诉编译器。

代码语言:javascript
运行
复制
bigDog.GetName();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41815504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档