在java中调用非静态方法之前创建一个实例
Posted
技术标签:
【中文标题】在java中调用非静态方法之前创建一个实例【英文标题】:making an instance before calling non static method in java 【发布时间】:2013-09-11 08:08:41 【问题描述】:您好,有人可以向我解释一下为什么在调用 java 中的 main 函数的非静态方法之前必须创建一个实例吗?这背后的原因是什么?
【问题讨论】:
class Apple void eat()
如果你没有Apple
你怎么能eat()
呢?
非静态意味着您只能从该类的实例访问方法。
【参考方案1】:
一个类的所有静态事物始终属于一个类,它们被视为该类的属性。这就是为什么它们可以在该类中以它们的名字来调用,并在外部调用类名。
一个类的所有非静态事物总是属于一个对象,它们总是被视为一个对象的属性。这就是为什么它们只能在通过 (.) 点运算符创建对象后调用。
【讨论】:
【参考方案2】:没有这个,面向对象的编程与传统的过程式编程真的没有什么不同。执行非静态函数时,可以访问属于该对象的所有变量。
话虽如此,请仔细查看您正在调用的函数,看看它们是否可以保留static
。 static
函数更便携,并且不太可能导致副作用。
【讨论】:
【参考方案3】:因为它们是实例成员,要访问它们需要实例。
当从同一个类蓝图创建多个对象时,它们每个都有自己不同的实例变量副本。对于 Bicycle 类,实例变量是 cadence、gear 和 speed。每个 Bicycle 对象对这些变量都有自己的值,存储在不同的内存位置。
现在你关于static
的第二个问题
有时,您希望拥有所有对象共有的变量。这是通过静态修饰符完成的。在声明中带有 static 修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。
Understanding Instance and Class Members
【讨论】:
感谢这澄清了一切【参考方案4】:静态方法是类级别的方法,因此不需要实例。
非静态方法是实例方法。因此需要一个实例。
【讨论】:
以上是关于在java中调用非静态方法之前创建一个实例的主要内容,如果未能解决你的问题,请参考以下文章