zoukankan      html  css  js  c++  java
  • java笔记一:类成员的初始化顺序

      最近一直在看《thinking in java》一书,感觉里面东西讲的很细,很多东西都没有接触过,是值得各位java程序员仔细品味的一本好书。

      今天看了关于类成员初始化那节,以前对于成员初始化顺序没有考虑那么多,没有在意初始化的顺序。今天特意仔细研究了一番。

      一个类中,最首先被初始化的是静态成员,也就是有关键字static修饰的成员。只要一个类被使用也就是创建对象或者调用了该类的某个静态方法时静态成员就都会被初始化,并且静态数据在内存中只占用一份存储区域,无论创建多少个对象,静态数据被所有对象共享。

      初始化静态成员后再初始化非静态成员。对于非静态成员之间,也是有初始化顺序的,变量定义的顺序决定了初始化的顺序(无论成员变量在哪里定义,都会在函数调用之前得到初始化)

      直接定义成员初始化完成后才会执行构造函数初始化。

      具体看例子:

     1 public class House {
     2     //对于非静态成员变量,谁先定义谁就先被初始化。顺序为w1、w2、w3
     3     Window w1 = new Window(1);
     4     public House() {
     5         System.out.println("House()");
     6         w3 = new Window(33);
     7     }
     8     Window w2 = new Window(2);
     9     void f(){
    10         System.out.println("f()");
    11     }
    12     static void f1(){
    13         System.out.println("static f1()");
    14     }
    15     Window w3 = new Window(3); //在函数f后面,但是在f调用之前得到了初始化
    16     static Window w4 = new Window(4);  //静态成员变量最先被初始化
    17     /**
    18      * @param args
    19      */
    20     public static void main(String[] args) {
    21         House h = new House();
    22         h.f();
    23         House.f1();
    24     }
    25 
    26 }
    27 class Window{
    28     public Window(int maker) {
    29         System.out.println("Window("+maker+")");
    30     }
    31 }

    执行结果如下:

    1 Window(4)
    2 Window(1)
    3 Window(2)
    4 Window(3)
    5 House()
    6 Window(33)
    7 f()
    8 static f1()

    这样很明显就能看出成员的初始化顺序了。

  • 相关阅读:
    jQuery学习易忘细节
    mysql关键字与自己设置的字段冲突
    jquery导航栏html页面跳转导航字体变色
    css解决谷歌,360浏览器默认最小字体为12px问题
    ThinkPHP中关于JS文件如何添加类似__PUBLIC__图片路径
    (谷歌浏览器等)解决css中点击input输入框时出现外边框方法【outline:medium;】
    为何在font-family属性中设置多个值
    jquery实现简单的Tab切换菜单
    Thinkphp下嵌套UEditor富文本WEB编辑器
    thinkphp框架下404页面设置
  • 原文地址:https://www.cnblogs.com/liuling/p/initial.html
Copyright © 2011-2022 走看看