在java中调用非静态方法之前生成实例

在java中调用非静态方法之前生成实例,java,methods,static,instance,main,Java,Methods,Static,Instance,Main,大家好,有人能给我解释一下为什么在java中调用主函数的非静态方法之前必须创建一个实例吗?这背后的原因是什么?静态方法是类级方法,因此不需要实例 非静态方法是实例方法。因此需要一个实例。因为它们是实例成员,要访问它们,您需要实例 当从同一个类蓝图创建多个对象时,每个对象都有各自不同的实例变量副本。对于Bicycle类,实例变量是cadence、gear和speed。每个Bicycle对象都有自己的变量值,存储在不同的内存位置 那么现在你的第二个问题是关于static 有时,您希望拥有对所有对象通

大家好,有人能给我解释一下为什么在java中调用主函数的非静态方法之前必须创建一个实例吗?这背后的原因是什么?

静态方法是类级方法,因此不需要实例


非静态方法是实例方法。因此需要一个实例。

因为它们是实例成员,要访问它们,您需要实例

当从同一个类蓝图创建多个对象时,每个对象都有各自不同的实例变量副本。对于Bicycle类,实例变量是cadence、gear和speed。每个Bicycle对象都有自己的变量值,存储在不同的内存位置

那么现在你的第二个问题是关于
static

有时,您希望拥有对所有对象通用的变量。这是通过“静态”修改器完成的。声明中包含静态修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量


如果没有这一点,面向对象编程实际上与传统的过程编程没有什么不同。执行非静态函数时,可以访问属于对象的所有变量


也就是说,仔细查看您正在调用的函数,看看它们是否可以保持
静态。
静态
函数更具可移植性,并且不太可能产生副作用。

类的所有静态内容始终属于一个类,它们被视为类的属性。这就是为什么可以在该类中按名称调用它们,并在类外以类名调用它们


类的所有非静态事物总是属于一个对象,它们总是被视为对象的属性。这就是为什么它们只能在通过(.)点运算符创建对象后才能调用。

类Apple{void eat(){}
如果你没有
Apple
怎么能
eat()
它呢?非静态意味着你只能从该类的实例访问该方法。谢谢,这澄清了一切