[英]what happens to static block when we create multiple objects?
我有一类具有静态成员,也有非静态成员的类:
public class StaticClassObjectCreations {
public static void doSomeThing() {
// TODO implementations static
}
public void nonStaticMethod() {
// TODO implementations for non static
}
public static void main(String[] args) {
StaticClassObjectCreations obj = new StaticClassObjectCreations();
StaticClassObjectCreations obj1 = new StaticClassObjectCreations();
}
}
如我们所见number of object creation is not restricted
的number of object creation is not restricted
并且可以在使用new
关键字创建的对象的帮助下访问非静态方法。
静态方法或成员变量也可用于每个实例,并且无需创建对象即可对其进行访问。
现在我的问题是:JVM如何为静态代码块维护实例,或者换句话说,使用new
关键字创建对象时这些静态块会发生什么情况。
谢谢。
静态块/变量/方法属于类,而不是该类的实例。 当类加载时,它们将被初始化。 创建类的实例时,这些不会有任何影响。 即使您从实例调用静态成员,编译器也将实例替换为其类。
假设您有A,B和C类。
您已经在A中初始化了一个称为“ dataArray”的静态数组。
您在B中创建了A的实例(对象),在C中创建了一个实例(对象)。
这两个对象的初始化不会影响A中的“ dataArray”,因为它是静态的。 它将为B和C中的对象保存相同的数据。这是因为静态变量和方法位于类级别,而不是对象级别。
注意:这是基于我的实验。 如果我错了,请回复。
如果您的问题是关于编译器如何使用对象引用处理静态方法调用,
public class StaticClassObjectCreations {
public static void doSomeThing() {
System.out.println("here");
}
public static void main(String[] args) {
StaticClassObjectCreations obj = null;
obj.doSomeThing();
StaticClassObjectCreations.doSomeThing();
}
}
编译器将对象引用替换为其对应的类以调用静态方法。 即使obj为null,编译器也不会给出null指针,因为它不需要对象引用来调用静态方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.