java成员的初始化 --thinking in java学习笔记(三)

来源:互联网 发布:伤感的网络歌曲有哪些 编辑:程序博客网 时间:2024/05/21 19:41

1、对于方法的局部变量,未初始化编译器会报错。而对于类的数据成员(基本数据类型)与对象都会默认的自动获得初始值。

2、构造器初始化。但是仍然阻止不了自动初始化的进行,他将在构造器被调用之前发生。

初始化顺序:在类的内部,变量(包括对象)定义的顺序决定了他们初始化的顺序。他们会在任何方法被调用之前得到初始化。

静态数据的初始化:先静态对象,而后才是非静态对象。书中的例子:

package com.dai.learn;public class TestStatic {public static void main(String[] args) {System.out.println("Creating new Cupboard() in main");new Cupboard();System.out.println("Creating new Cupboard() in main");new Cupboard();table.f2(1);cupboard.f3(1);}static Table table = new Table();static Cupboard cupboard = new Cupboard();}class Bowl{public Bowl(int marker) {System.out.println("Bowl("+ marker+")" );}void f1(int marker){System.out.println("f1("+marker+")");}}class Table{static Bowl bowl1 = new Bowl(1);public Table() {System.out.println("Table()");bowl2.f1(1);}void f2(int marker){System.out.println("f2("+marker+")");}static Bowl bowl2 = new Bowl(2);}class Cupboard{Bowl bowl3 = new Bowl(3);static Bowl bowl4 = new Bowl(4);public Cupboard() {System.out.println("Cupboard()");bowl4.f1(2);}void f3(int marker){System.out.println("f3("+marker+")");}static Bowl bowl5= new Bowl(5);}
运行结果:

Bowl(1)Bowl(2)Table()f1(1)Bowl(4)Bowl(5)Bowl(3)Cupboard()f1(2)Creating new Cupboard() in mainBowl(3)Cupboard()f1(2)Creating new Cupboard() in mainBowl(3)Cupboard()f1(2)f2(1)f3(1)
           每当Cupboard类与Table类被加载时,Bowl类随着他在前二者类中的静态对象加载的同时被加载进来。

           注意:静态对象在被初始化后,就不会再次被初始化。

显式的静态初始化:静态块中的内容仅执行一次

非静态实例的初始化:参见上面的初始化顺序。


3、数组初始化:编译器不允许指定数组的大小。

                int[] a = {1,2,3,4,5};int[] b = a;int[] c= new int[表达式];

0 0
原创粉丝点击