当前位置: 首页 > 知识库问答 >
问题:

静态和非静态方法/子例程之间的差异

曹超
2023-03-14

我正在读一本java的书,在那里我偶然发现了这样一句话:

因此,每个子例程都包含在类或对象中

我真的很困惑为什么它说类或对象

我想要一些解释。

共有3个答案

姬魁
2023-03-14

静态方法也称为类方法。静态方法仅与类关联,而不与该类(对象)的任何特定实例关联。

狄安歌
2023-03-14

子程序是在类内部编写的方法。我们用它们来做各种任务。该语句声明这些方法/子程序是在对象或类中编写的。

如果我们实例化了一个对象,它将为该对象的类中定义的每个非静态方法创建新方法。因此,这些非静态的方法/子程序都在对象中。

但是如果这个类是一个静态类,我们就不能从中得到任何对象。但我们可以使用该类的子例程/方法。因此,他们在一个类中

你的声明就是这么说的。

编辑:

我想举个例子。

public class ExampleClass {

  public String getNonStaticString() {
    return "This String is From Non-Static Method";
  }

  public static String getStaticString() {
    return "This String is From Static Method"
  }
}

然后,如果您需要获取静态String,您所要做的就是

String staticString = ExampleClass.getStaticString();

请注意,我没有从这里的示例类创建对象。我只是用了方法。

但是,如果需要从非静态方法中获取字符串,则应首先实例化一个对象。

ExampleClass exampleObject = new ExampleClass();
String nonStaticString = exampleObject.getNonStaticString();

孟茂
2023-03-14

让我们试试这个例子

public class Demo {

    public static void classMethod() {
        System.out.println("Call to static method");
    }

    public void objectMethod() {
        System.out.println("Call to object method");
    }

    public static void main(String[] args) {
        Demo demo = null;
        demo.classMethod();
        //demo.objectMethod();// throws NPE if uncommented
    }
}

此代码将工作(即使demo变量null),因为静态方法类方法包含在类Demo中。注释行将抛出一个NullPointerExc0019,因为方法对象方法不包含在类中,而是包含在对象中,因此需要一个Demo类的实例来调用它。

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

  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti

  • 我了解Class对象上的静态同步锁,以及Object实例上的非静态锁。 但是,在此问题的可接受答案中:同步块中的静态与非静态锁定对象 使用非静态锁定对象时: 线程1调用o1.foo() 线程2调用o1.foo(),将不得不等待线程1完成 线程3调用o2.foo(),它可以只继续,不介意线程1和2 为什么线程 3 可以继续而不考虑线程 1 和 2。线程 3 是否必须等待从线程 1 或 2 获取对象实

  • 问题内容: 到目前为止,我有以下代码: } 当我尝试在末尾设置double 时,出现错误消息“无法对非静态方法进行静态引用”。它说解决方法是也使该方法静态化,但是我的教授告诉我不要将该字段静态化。有一个简单的解决方案我只是想念吗? 问题答案: 静态方法属于该类,非静态方法属于该类的 实例 。 当您从呼叫时,您会收到错误消息,因为它与任何实例都没有关联。 您需要创建该类的实例: 然后,您可以调用实例

  • 问题内容: 任何人都可以解释以下语句吗……“静态同步方法和非静态同步方法不会互相阻塞-它们可以同时运行” 问题答案: 锁定对象在静态方法和非静态方法上有所不同。静态方法将Class对象用作锁(锁obj:),而非静态方法将实例对象用作锁,此时方法的调用已绑定到该对象(锁obj:)。

  • 问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该