当前位置: 首页 > 面试题库 >

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

湛鸿雪
2023-03-14
问题内容

我只是在阅读教科书中给我的课文,我不确定自己是否明白我在说什么。这基本上是在告诉我静态方法或类方法包括关键字“修饰符” static。但是我真的不知道那意味着什么吗?

有人可以简单地向我解释什么是静态方法或类方法吗?

另外,我可以简单解释一下什么是Instance方法吗?

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

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

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


问题答案:

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

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



 类似资料:
  • 问题内容: 在Java中同步静态方法和非静态方法有什么区别?有人可以举例说明吗?在同步方法和同步代码块方面也有什么区别吗? 问题答案: 我将尝试添加示例以使这一点更加清楚。 如前所述,Java中的同步是Monitor概念的实现。当您将代码块标记为同步时,可以使用一个对象作为参数。当执行线程进入这样的代码块时,它必须首先等待,直到同一对象上的同步块中没有其他执行线程。 在上面的示例中,一个正在运行的

  • 问题内容: 用修饰的功能和用修饰的功能有什么区别? 问题答案: 也许有点示例代码将有助于:发现其中的差别在调用签名,并且: 以下是对象实例调用方法的常用方法。对象实例,a作为第一个参数隐式传递。 使用时,对象实例的类作为第一个参数而不是隐式传递。 你也可以使用该类进行呼叫。实际上,如果你将某些东西定义为类方法,则可能是因为你打算从类而不是从类实例调用它。本来会引发,但效果很好: 人们发现类方法的一

  • 我只是在看课本上给我的课文,我不是很确定我理解它在说什么。它基本上告诉我静态方法或类方法包含“modifier”关键字static。但我真的不知道那是什么意思? 有谁能用简单的术语给我解释一下什么是静态方法或者类方法吗? 另外,我能得到一个关于实例方法是什么的简单解释吗? 这是他们在课本上给我的: 静态修饰语的存在与否具有重要的实际意义。一个公共类方法可能会在Java处理它所属的类的定义后立即被调

  • 问题内容: 我在阅读PEP 0008(样式指南)时,发现它建议在实例方法中使用self作为第一个参数,而在类方法中使用cls作为第一个参数。 我已经使用并编写了一些类,但从未遇到过类方法(嗯,一种将cls作为参数传递的方法)。有人可以告诉我一些例子吗? 谢谢! 问题答案: 实例方法 创建实例方法时,第一个参数始终为。您可以随意命名,但含义始终相同,并且由于其是命名约定,因此应使用。 (通常)在调用

  • 主要内容:Python类实例方法,Python类方法,Python类静态方法和类属性一样,类方法也可以进行更细致的划分,具体可分为 类方法、 实例方法和 静态方法。 和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。 其中 @classmethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详

  • 问题内容: 请参见下面的代码段: 代码1 代码2 这些代码段之间有什么区别?两者都15作为答案输出。 问题答案: 静态方法属于类本身,而非静态(aka实例)方法属于从该类生成的每个对象。如果你的方法执行的操作不依赖于其类的单个特征,请将其设置为静态(这将使程序的占用空间减小)。否则,它应该是非静态的。 例: 你可以像这样调用静态方法:。如果你使用method2尝试该操作,它将失败。但这将起作用:;