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

新手上路,请多包涵

我只是在阅读教科书中给我的课文,但我不确定我是否理解它在说什么。它基本上告诉我静态方法或类方法包含“修饰符”关键字 static。但是我真的不知道那是什么意思?

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

另外,我能得到一个关于什么是实例方法的简单解释吗?

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

static 修饰符的存在与否具有重要的实际意义。一旦 Java 处理了它所属的类的定义,就可以调用和执行公共类方法。实例方法不是这种情况。在调用和执行公共实例方法之前,必须为其所属的类创建一个实例。要使用公共类方法,您只需要该类。另一方面,在使用公共实例方法之前,您必须拥有该类的实例。

在另一个方法的定义中调用静态方法的方式根据这两个方法是否属于同一个类而有所不同。在上面的例子中,factorial 和 main 都是 MainClass 类的方法。结果,在 main 的定义中调用 factorial 只是引用了方法名称“factorial”。

原文由 Panthy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

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

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

您可以这样做来执行静态方法:

 MyClass.staticMethod();  // Simply refers to the class's static code

但是要执行一个非静态方法,你必须这样做:

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

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

原文由 Nathaniel Ford 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

例如:

 Person.staticMethod();           //accessing static method.

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

 Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.

原文由 Khalid Ahmed Khichi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题