java成员的初始化 --thinking in java学习笔记(三)
2015-08-25 20:18
633 查看
1、对于方法的局部变量,未初始化编译器会报错。而对于类的数据成员(基本数据类型)与对象都会默认的自动获得初始值。
2、构造器初始化。但是仍然阻止不了自动初始化的进行,他将在构造器被调用之前发生。
初始化顺序:在类的内部,变量(包括对象)定义的顺序决定了他们初始化的顺序。他们会在任何方法被调用之前得到初始化。
静态数据的初始化:先静态对象,而后才是非静态对象。书中的例子:
注意:静态对象在被初始化后,就不会再次被初始化。
显式的静态初始化:静态块中的内容仅执行一次
非静态实例的初始化:参见上面的初始化顺序。
3、数组初始化:编译器不允许指定数组的大小。
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 main Bowl(3) Cupboard() f1(2) Creating new Cupboard() in main Bowl(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[表达式];
相关文章推荐
- Java(十三)--Set的添加,删除,修改
- HBase总结(十二)Java API 与HBase交互实例
- Java String浅析
- Java通过Mathematica实现人脸识别
- Spring整合quartz实现定时任务
- Java中的HashSet和TreeSet
- java_NIO入门教程
- 从零开始学JAVA DAY6
- java--线程池
- java内存:堆、栈、常量池、方法区
- HBase总结(十一)hbase Java API 介绍及使用示例
- 解决Initializing Java Tooling 和 Initializing Java Tooling卡死问题
- java虚拟机如何实现垃圾回收
- java 3种简单的排序
- Java基础笔记-反射及应用
- JAVA的事件监听机制
- 同步锁的另外一种实现
- Java--并发API
- Java输入输出流的使用详细介绍
- change Java on Ubuntu Kylin 15.04