静态方法和实例方法之间的区别

Pan*_*thy 81 java static static-methods non-static

我只是在阅读教科书中给我的文字,我不确定我是否理解它的含义.它基本上告诉我静态方法或类方法包含"modifier"关键字static.但我真的不知道这意味着什么?

有人可以用非常简单的术语向我解释静态或类方法是什么?

另外,我可以获得一个关于Instance方法的简单解释吗?

这是他们在教科书中给我的:

静态改性剂的存在与否存在重要的实际意义.只要Java处理它所属的类的定义,就可以调用并执行公共类方法.实例方法不是这种情况.在可以调用和执行公共实例方法之前,必须创建它所属的类的实例.要使用公共类方法,您只需要该类.另一方面,在使用公共实例方法之前,必须具有该类的实例.

在另一个方法的定义中调用静态方法的方式根据两个方法是否属于同一个类而不同.在上面的示例中,factorial和main都是MainClass类的方法.因此,在main的定义中调用factorial只是引用方法名称"factorial".

Nat*_*ord 145

Java中的基本范例是您编写类,并且这些类是实例化的.实例化对象(类的实例)具有与它们相关联的属性(成员变量),这些属性会影响它们的行为; 当实例执行其方法时,它将引用这些变量.

但是,特定类型的所有对象可能具有完全不依赖于成员变量的行为; 这些方法最好是静态的.通过静态,运行该方法不需要该类的实例.

您可以执行此操作以执行静态方法:

MyClass.staticMethod();//Simply refers to the class's static code
Run Code Online (Sandbox Code Playgroud)

但要执行非静态方法,您必须执行以下操作:

MyClass obj = new MyClass();//Create an instance
obj.nonstaticMethod();//Refer to the instance's class's code
Run Code Online (Sandbox Code Playgroud)

在更深层次上,当编译器将类放在一起时,它包含几个指向方法的指针.当执行这些方法时,它遵循指针并执行远端的代码.如果实例化了类,则创建的对象包含指向"虚方法表"的指针,该指针指向要在继承层次结构中为该特定类调用的方法.但是,如果方法是静态的,则不需要"虚方法表":对该方法的所有调用都会到达内存中完全相同的位置以执行完全相同的代码.因此,在高性能系统中,如果不依赖于实例变量,最好使用静态方法.

  • @Rohan看待它的另一个好方法是,任何`static`(类,方法或字段)都不属于任何东西,它只是为了组织目的在类中挂起. (4认同)
  • @user2416728 你的评论很混乱。静态字段*可以*更改,但它们的范围对于其执行环境是全局的。因此,任何有权访问该字段的代码都可以访问相同的数据。这并不等同于数据保持不变(除非使用“final”修饰符)。 (3认同)
  • 非常感谢他们看起来熟悉的代码示例,所以我现在明白了 (2认同)
  • 此外,静态字段用作数据对象(一个保存数据,因此不能更改,但您可以操作其中的数据。)静态方法只能在静态字段上调用,因此具有保持不变或不更改的相同概念或者不实例化!! (2认同)
  • 是的,"没有改变">>我的意思是无法实例化!! (2认同)

小智 18

未声明为static的方法和变量称为实例方法和实例变量.要引用实例方法和变量,必须首先实例化该类,首先意味着您应该首先创建该类的对象.对于静态,您不需要实例化该类,您可以使用句点符号访问具有类名的方法和变量在(.)

例如:

Person.staticMethod();           //accessing static method.
Run Code Online (Sandbox Code Playgroud)

对于非静态方法,您必须实例化该类.

Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.
Run Code Online (Sandbox Code Playgroud)


Pau*_*nis 7

静态方法,变量属于整个类,而不仅仅是一个对象实例.静态方法,变量与类作为一个整体相关联,而不是与类的特定实例相关联.每个对象将共享静态方法,变量的公共副本.每个类只有一个副本,无论从中创建多少个对象.


ras*_*dcs 5

静态方法和实例方法之间的区别

  1. 实例方法是需要先创建其类的对象才能调用的方法。静态方法是Java中可以在不创建类对象的情况下调用的方法。

  2. 静态方法用static关键字声明。实例方法不带有static关键字。

  3. 静态方法意味着它将作为类的单个副本存在。但是实例方法作为多个副本存在,具体取决于为该类创建的实例数量。

  4. 静态方法可以通过使用类引用来调用。实例或非静态方法通过使用对象引用来调用。

  5. 静态方法不能直接访问实例方法和实例变量。实例方法可以直接访问静态变量和静态方法。

参考:geeksforgeeks