[Java] Java 中的 static 使用之静态初始化块

[复制链接]

52

主题

57

帖子

347

积分

版主

代码控

Rank: 7Rank: 7Rank: 7

积分
347

突出贡献优秀版主荣誉管理

QQ
271 0 joy 发表于 2016-12-30 01:00:19

  Java 中可以通过初始化块进行数据赋值。
  如:
  1. public class HelloWorld{
  2.     String name; // 定义一个成员变量
  3.     // 通过初始化块为成员变量赋值
  4.     {
  5.         name = "爱慕课";
  6.     }
  7. }
复制代码


  在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。
  如果使用 static 修饰初始化块,就称为静态初始化块。

  需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

  我们来看一段代码:
  1. public class HelloWorld{
  2.     int num1;  // 声明变量num1
  3.     int num2;  // 声明变量num2
  4.     static int num3;  // 声明静态变量num3
  5.     public HelloWorld(){
  6.         num1 = 91;
  7.         System.out.println("通过构造方法为变量num1赋值");
  8.     }
  9.     // 初始化块
  10.     {
  11.         num2 = 74;
  12.         System.out.println("通过初始化块为变量num2赋值");
  13.     }
  14.     // 静态初始化块
  15.     static{
  16.         num3 = 83;
  17.         System.out.println("通过静态初始化块为静态变量num3赋值");
  18.     }
  19.     public static void main(String[] args){
  20.         HelloWorld hello = new HelloWorld();  // 创建类的对象hello
  21.         System.out.println("num1:" + hello.num1);
  22.         System.out.println("num2:" + hello.num2);
  23.         System.out.println("num3:" + num3);
  24.         HelloWorld hello2 = new HelloWorld();  // 再次创建类的对象hello2
  25.     }
  26. }
复制代码


  运行结果:
  1. 通过静态初始化块为静态变量num3赋值
  2. 通过初始化块为变量num2赋值
  3. 通过构造方法为变量num1赋值
  4. num1:91
  5. num2:74
  6. num3:83
  7. 通过初始化块为变量num2赋值
  8. 通过构造方法为变量num1赋值
复制代码


  通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。

  由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。


夜深人静之时,头发斑白的老程序员会蜷缩在床上,欣赏一段精彩的子程序,或者苦思冥想一个绝妙的宏结构;而那些年少轻狂的程序员,则可能正在通过终端与别人聊得不亦乐乎。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本专栏主要提供Java相关技术的学习交流。望大家积极踊跃发言,共建一个良好的学习环境!
  • 今日
    1
  • 主题
    366

推荐阅读

精选帖子

Archiver|手机版|小黑屋| 极客社区 ( 京ICP备14042200号-2 )

Powered by 张董丶 X3.2 © 2016-2026

返回顶部 返回列表