繁体   English   中英

Java中的静态块[重复]

[英]Static Block in Java [duplicate]

前几天,我在查看一些代码,然后发现:

static {
    ...
}

来自C ++,我不知道为什么会这样。 它不是错误,因为代码编译良好。 这个“静态”代码块是什么?

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

可以将其视为“类构造函数”

请注意,还有一些实例初始化器 ,它们看起来一样,只是它们没有static关键字。 当创建对象的新实例时,除了构造函数中的代码外,还会运行这些代码。

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

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

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

如果您有一个带有静态查找映射的类,它可能看起来像这样

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

这很有用,因为无法使用labels = ...初始化上述静态字段。 它需要以某种方式调用put-method。

这是一个代码块,当类加载器加载该类时将执行该代码块。 它旨在对类的静态成员进行初始化。

也可以编写非静态初始化器,这些初始化器看起来更陌生:

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); 
    }
}

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

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

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

静态块在Java的早期版本中使用,但在最新版本中不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM