我正在读一本java的书,在那里我偶然发现了这样一句话:
因此,每个子例程都包含在类或对象中
我真的很困惑为什么它说类或对象
我想要一些解释。
静态方法也称为类方法。静态方法仅与类关联,而不与该类(对象)的任何特定实例关联。
子程序是在类内部编写的方法。我们用它们来做各种任务。该语句声明这些方法/子程序是在对象或类中编写的。
如果我们实例化了一个对象,它将为该对象的类中定义的每个非静态方法创建新方法。因此,这些非静态的
方法/子程序都在对象中。
但是如果这个类是一个静态
类,我们就不能从中得到任何对象。但我们可以使用该类的子例程/方法。因此,他们在一个
类中
你的声明就是这么说的。
编辑:
我想举个例子。
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();
让我们试试这个例子
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的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该