我读到了下面提到的对象块:
class Check {
static {
System.out.println("hello from Static");
}
//object block
{
System.out.println("This is my object block");
}
public static void main(String args[]) {
}
}
Run Code Online (Sandbox Code Playgroud)
这是程序的输出
Hello from Static
Run Code Online (Sandbox Code Playgroud)
但是当我创建类的对象时,对象块就会被执行.我无法理解jvm如何完成这个过程.垃圾收集器有什么作用吗?
class Check {
static {
System.out.println("hello from Static");
}
//object block
{
System.out.println("This is my object block");
}
public static void main(String args[]) {
System.out.println("hello from main");
Check obj = new check();
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
hello from Static
hello from main
This is my object block
Run Code Online (Sandbox Code Playgroud)
static每当类加载器加载类时执行这些块(这通常是每个JVM实例执行一次,但我想你可能会创建一些非常奇怪的情况,你有多个类加载器都加载了类;这不是一个非常初学者级的情况,但是).每次创建该类(或其子类之一)的实例时,都会执行实例初始化程序块.您的计划要求:
hello from Static).main执行静态方法
println执行(hello from main).Check.这会触发实例初始化程序,导致This is my object block.GC与您询问的行为FTR没有任何关系.
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |