java在类中调用一个静态方法,使这个类成为实例化的

java在类中调用一个静态方法,使这个类成为实例化的,java,oop,Java,Oop,我是java的初学者,我有一个问题。在类中调用静态方法是否会使该类实例化?我的意思是,如果我调用一个类中存在的静态方法,JVM会在内存中创建这个类的实例吗? 如果我有一个名为X的类和一个名为Y的类,那么Y类包含一个静态方法M,该方法实例化了另一个名为Z的类,该类扩展了thread public class X { public static void main(String[] args) { Y.M(); } } public class Y { sta

我是java的初学者,我有一个问题。在类中调用静态方法是否会使该类实例化?我的意思是,如果我调用一个类中存在的静态方法,JVM会在内存中创建这个类的实例吗? 如果我有一个名为X的类和一个名为Y的类,那么Y类包含一个静态方法M,该方法实例化了另一个名为Z的类,该类扩展了thread

public class X {
    public static void main(String[] args) {
        Y.M();
    }
}
public class Y {
    static void M() {
        new Z().start();
    }
}
class Z extends Thread {      
   public void run() {   
     ConnectToServer();
    }
}
现在我的记忆中会有多少个Y的实例

如果调用类中存在的静态方法,JVM会在内存中创建此类的实例吗

不是。静态方法是类级方法。它们不在对象(=类的实例)上调用,JVM也不需要创建类的实例来调用静态方法

JVM将加载并初始化该类(这意味着:它运行静态初始值设定项),但不会创建该类的实例


更多信息:

如果我正确阅读了您的代码,则没有。您从不调用
newy()
,因此不会实例化此类对象。然而,你的代码语法很混乱,所以我不能确定你打算写什么。这些都不是静态的。而且,这不会编译。请展示实际的Java代码。不要太在意代码,这只是一个伪代码,我写它是为了解释我的问题的概念。
不要太在意[我的帖子的一部分]
对我来说似乎是一种奇怪的态度。我不是故意说错话的,我用任何一种方式修复了代码。这样说会更好“JVM将初始化该类”,因为调用静态方法将加载该类,并运行静态初始值设定项。@Andreas感谢您的评论,并将其添加到我的答案中。很好,但是加载类和生成该类的实例之间有什么区别?如果我有这样一个公共类Y{int x;static void Main(){new Z().foo();//1//等于Z.foo();//2}静态类Z{static void foo(){}因为这个内部类的所有成员都是静态的,所以在1我创建了一个类的实例并通过它访问这个类,而在2我不希望直接访问它,因为这个类本身和它的所有成员都是静态的,booth语句在JVM中做了同样的事情?right@MM.LinuxerJVM直到它已将编译后的
.class
文件定义加载到内存中并对其进行处理。一旦JVM知道该类,您就可以使用
new
操作符创建该类的实例。