首页 > Java > Java 静态和非静态初始化代码块有什么区别

Java 静态和非静态初始化代码块有什么区别

上一篇 下一篇

我的问题是关于静态关键字的一种特定用法。可以使用关键字来覆盖不属于任何函数的类中的代码块。例如,以下代码编译:static

public class Test {
    private static final int a;    
    static {
        a = 5;
        doSomething(a);
    }
    private static int doSomething(int x) {
        return (x+5);
    }
}

如果删除关键字,它会抱怨,因为变量是 .但是,可以删除 和 关键字并使其编译。staticafinalfinalstatic

这让我在两个方面都感到困惑。我应该如何拥有一个不属于任何方法的代码部分?怎么可能调用它?一般来说,这种用法的目的是什么?或者更好的是,我在哪里可以找到有关此的文档?

分割线

网友回答:

带有静态修饰符的代码块表示初始值设定项;如果没有 STATIC 修饰符,代码块就是实例初始值设定项。

类初始值设定项在加载类时(实际上,当它被解析时,但这是一个技术问题)按照它们定义的顺序(自上而下,就像简单的变量初始值设定项一样)执行。

实例初始值设定项按实例化类时定义的顺序执行,紧接在执行构造函数代码之前,紧接在调用超级构造函数之后。

如果从 中删除,它将成为实例变量,您无法从静态初始值设定项块访问该变量。这将无法编译,并显示错误“非静态变量 a 无法从静态上下文引用”。staticint a

如果还从初始值设定项块中删除,则它将成为实例初始值设定项,因此在构造时初始化。staticint a

分割线

网友回答:

哎呀!什么是静态初始值设定项?

静态初始值设定项是 java 类中的一个代码块,在调用构造函数或 main 方法之前只运行一次。static {}

还行!告诉我更多…

  • 是任何 Java 类中的代码块,并在调用类时由虚拟机执行。static { ... }
  • 不支持任何语句。return
  • 不支持任何参数。
  • 不支持或不受支持。thissuper

嗯,我在哪里可以使用它?

可以在任何你觉得简单🙂的地方使用。但是我看到大多数时候它在进行数据库连接,API 初始化,日志记录等时使用。

不要只是吠叫!例子在哪里?

package com.example.learnjava;

import java.util.ArrayList;

public class Fruit {

    static {
        System.out.println("Inside Static Initializer.");

        // fruits array
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Orange");
        fruits.add("Pear");

        // print fruits
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
        System.out.println("End Static Initializer.n");
    }

    public static void main(String[] args) {
        System.out.println("Inside Main Method.");
    }
}

输出???

在静态初始值设定项内部。

苹果

结束静态初始值设定项。

在主方法内。

分割线

网友回答:

该块是一个“静态初始值设定项”。static

它在加载类时自动调用,并且没有其他方法可以调用它(甚至不能通过反射)。

我个人只在编写 JNI 代码时使用过它:

class JNIGlue {
    static {
        System.loadLibrary("foo");
    }
}

模板简介:该模板名称为【Java 静态和非静态初始化代码块有什么区别】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 220次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-15
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 自适应 html5 企业网站 微信公众平台 微信模板 微信素材 单页式简历模板 响应式 微信图片
您可能会喜欢的其他模板