问题:Java里面的静态代码块

I was looking over some code the other day and I came across:
前几天我在看一些代码时发现:

static {...
}

我是c++转来的,我不知道为啥要这样干。这个代码也编译成功了,没出错误。这里的"static"代码块是啥啊?

回答一

它是一个静态初始化器。它在类被加载时执行(准确地说应该是初始化,但你通常不会注意到其中的区别)。

它也可以被看成是一个“类的构造函数”。

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

回答二

它是一个静态初始化器。它在类加载时执行和是进行静态变量初始化的地方。

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

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

如果你有一个类,带有实现了查找功能的静态的map,它看起来就是这样的:

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方法。

文章翻译自Stack Overflow:https://stackoverflow.com/questions/2943556/static-block-in-java

Java里面的静态代码块相关推荐

  1. java 静态代码块有什么用,java编程开发静态代码块的使用方法都有哪些

    代码块是程序员在学习java编程开发的时候会接触到的一个代码,而今天我们就通过案例分析来了解一下,java编程开发静态代码块的使用方法都有哪些. (一)java静态代码块静态方法区别 一般情况下,如果 ...

  2. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    构造函数 public HelloA(){//构造函数} 关于构造函数,以下几点要注意: 1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的. 2.构造函数的作用是 ...

  3. java中的静态代码块、构造代码块、构造方法

    运行下面这段代码,观察其结果: package com.test;public class HelloB extends HelloA {public HelloB() {}{System.out.p ...

  4. 菜鸟学JAVA之——static静态代码块

    静态代码块 static可以修饰属性.方法.内部类.代码块 静态代码块在类加载时就调用, 而且只执行一次, 并且优先于各种代码块以及构造函数. 有一个地方的静态代码被使用,那么所有的静态代码块都会被调 ...

  5. Java中构造函数,静态代码块,构造代码块的执行顺序

    静态代码块:用static声明,jvm加载类的时候执行,只执行一次. 构造代码块:由{}定义,每一次创建对象的时候执行. 构造函数:对象一建立就调用相应的构造函数. 静态代码块 1.它是随着类的加载而 ...

  6. java中构造函数-静态代码块-代码块的执行顺序

    面试题中,经常遇到这种题,我们只要记住一个原则,就不会出错. 三者的执行顺序:静态代码块>代码块>构造函数 package com.lbl.constructor;/*** Created ...

  7. java面试题-----------静态代码块和代码块和构造方法执行顺序

  8. java构造块_java中的静态代码块、构造代码块、构造方法详解

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  9. JAVA入门级教学之(static静态代码块)

    定义一个测试类测试static静态代码块: package com.lbj.javase08; /*** 可以使用static关键字来定义"静态代码块"* * 1.语法格式:* s ...

最新文章

  1. onbeforeedit和onbeginedit数据不一致_Redis缓存与数据库产生不一致的问题该如何解决?...
  2. 「超全」工欲善其事必先利其器!
  3. 人工智能导论 王万良教授_学会动态丨辽宁省人工智能导论教学研讨活动在沈阳成功举办...
  4. 利用Python爬取糗事百科段子信息
  5. 基于UDP的组播网络程序
  6. [js] 使用ajax请求真的不安全吗?为什么?
  7. System verilog随机系统函数$randomize使用方法
  8. 2013暑假江西联合训练赛 -- by jxust_acm 解题报告
  9. 百度云盘客户端去除顶部广告
  10. 2022-2028年中国位置大数据行业市场专项调查及投资前景分析报告
  11. 断网重启路由器就好_电脑断网重启路由器就好了怎么回事
  12. 苹果IOS 10.0.2屏蔽垃圾短信
  13. Win XP iis组件补丁(ghost xp)iis5.1
  14. iOS8高清壁纸 - 专为iOS8量身定做,每日更新
  15. CodeBlocks调试功能快捷教程
  16. Excel 使用ODBC直接访问
  17. MySQL数据库(四)底层NB-IoT数据流的数据库写入
  18. psv型号版本怎么看的
  19. java-php-python-ssm在线影视点播系统计算机毕业设计
  20. 浅尝辄止_数学建模(笔记_K-means聚类算法)

热门文章

  1. 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
  2. 【Java】字符串转换为数字:Integer的parseInt方法
  3. 指定结构体元素的位字段
  4. 函数返回指针类型(strchr函数)
  5. 1024 科学计数法 (20 分
  6. Ocelot中文文档入门
  7. ubuntu opengl 安装
  8. J - Borg Maze
  9. 杜教筛--51nod1239 欧拉函数之和
  10. UVA1262Password(第K字典序)