Java中的静态块

我有一天看了一些代码,我碰到:

static { ... } 

来自C ++,我不知道为什么在那里。 它不是一个错误,因为代码编译得很好。 什么是这个“静态”代码块?

这是一个静态初始化器 。 它是在类加载(或初始化,确切地说,但你通常没有注意到它们之间的区别)时执行的。

它可以被认为是一个“类构造函数”。

请注意,也有实例初始值设定项 ,它们看起来相同,只是它们没有static关键字。 创build对象的新实例时,除了构造函数中的代码之外,还会运行这些代码。

这是一个静态初始化器。 它是在类加载时执行的,并且是静态variables初始化的好地方。

http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html

一个类可以有任意数量的静态初始化块,并且它们可以出现在类体中的任何地方。 运行时系统保证静态初始化块按照它们出现在源代码中的顺序被调用。

如果你有一个静态的查看地图的类,它可能看起来像这样

 class MyClass { static Map<Double, String> labels = new HashMap<Double, String>(); static { labels.put(5.5, "five and a half"); labels.put(7.1, "seven point 1"); } //... } 

这很有用,因为上面的静态字段不能使用labels = ...初始化。 它需要以某种方式调用put方法。

这是一个代码块,当类被类加载器加载时,它将被执行。 这意味着要对类的静态成员进行初始化。

编写非静态的初始化器也是可能的,这看起来更奇怪:

 public class Foo { { // This code will be executed before every constructor // but after the call to super() } Foo() { } } 

静态块可以用来显示一个程序也可以在没有主函数的情况下运行。

 //static block //static block is used to initlize static data member of the clas at the time of clas loading //static block is exeuted before the main class B { static { System.out.println("Welcome to Java"); System.exit(0); } } 

静态块在任何程序的生命周期中执行一次,静态块的另一个属性是它在主要方法之前执行。

静态块用于初始化代码,并在JVM加载类时执行。请参阅以下链接,其中给出了详细说明。 http://www.jusfortechies.com/java/core-java/static-blocks.php

是的,静态块用于初始化代码,它将在JVM启动执行时加载。

在以前的Java版本中使用了静态块,但是在最新版本中它不起作用。