了解包括继承在内的初始化全过程,以对所发生的的一切有一个全局的把握,是很有益的。

请看下例:

package initialize;

class Insect {
private int i = 9;
protected int j; Insect() {
System.out.println("i = " + i + ", j = " + j);
j = 39;
} private static int x1 = printInit("static Insect.x1 initialized");
static int printInit(String s) {
System.out.println(s);
return 47;
} } public class Beetle extends Insect{
private int k = printInit("Beelte.k initialized");
public Beetle(){
System.out.println("k = " + k);
System.out.println("j = " + j);
} private static int x2 =
printInit("static Beetle.x2 initialized"); public static void main(String[] args) {
System.out.println("Beetle constructor");
//Beetle beetle = new Beetle(); //此处先注释
} }

  运行结果:

  

  在运行Beetle时,所发生的第一件事就是试图访问Beetel.main()方法(程序入口)(一个static方法),

于是加载器就开始启动并找到Beetel类的编译代码(在Beetle.class文件中)。对他进行加载时,发现他有一个基类(这是由“extents”关键字得知的),于是继续进行加载该基类。不管是否你是否打算生成一个该基类的对象,都会发生。从上出代码Beelte.main()方法中的注释代码证明这一点。

  如果该基类还有其自身的基类,那么第二个就会被加载,如此类推。接下来,根基类中的static方法初始化(此例中为Insect)即会被执行,然后是下一个导出类,如此类推。

  至此,必要的类都加载完毕,对象就可以创建了,我们把上面的Beelte.main()方法中的注释代码取消,

  运行结果:

  

首先对象中所有基本类型都会被设为某默认值,对象引用都设为null,然后基类的构造器会被调用。基类的构造器和导出类的构造器一样,以相同的顺序经历相同的过程。基类构造器完成之后,实例变量按其次序被初始化。

习题:请证明加载类的动作只发生一次。证明该类的第一个实体的创建或static成员的访问都有可能引起加载。

  在Beelte.main()方法中添加一行代码:

    Beetle beetle2 = new Beetle();

   输出结果:

    

《Think in JAVA》之每日一读(initianlize)——2013/11/12、13的更多相关文章

  1. 【Java例题】3.1 7、11、13的倍数

    1.找出1~5000范围内分别满足如下条件的数: (1) 7或11或13的倍数 (2) 7.11,或7.13或11.13的倍数 (3) 7.11和13的倍数. package chapter3; pu ...

  2. java 可重入读写锁 ReentrantReadWriteLock 详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt206 读写锁 ReadWriteLock读写锁维护了一对相关的锁,一个用于只 ...

  3. java试题复盘——11月13日

    上: 10. AccessViolationException异常触发后,下列程序的输出结果为(   A   ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 AccessViol ...

  4. java中多种方式读文件

    转自:http://www.jb51.net/article/16396.htm java中多种方式读文件 一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内 ...

  5. Java并发:ReadWriteLock 读写锁

    读写锁在同一时刻可以允许多个线程访问,但是在写线程访问,所有的读线程和其他写线程均被阻塞. 读写锁不像 ReentrantLock 那些排它锁只允许在同一时刻只允许一个线程进行访问,读写锁可以允许多个 ...

  6. 【转】成为Java顶尖程序员 ,看这11本书就够了

    成为Java顶尖程序员 ,看这11本书就够了 转自:http://developer.51cto.com/art/201512/503095.htm 以下是我推荐给Java开发者们的一些值得一看的好书 ...

  7. Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据

    今天学长在面试的时候遇到了一道题,然后让大家做一做. 在不看下面的答案之前,悠闲的朋友们一起来抖动一下大脑吧! 以下是我的想法: import java.util.Scanner;public cla ...

  8. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. java的poi技术读,写Excel[2003-2007,2010]

    在上一篇blog:java的poi技术读取Excel[2003-2007,2010] 中介绍了关于java中的poi技术读取excel的相关操作 读取excel和MySQL相关: java的poi技术 ...

随机推荐

  1. 监督学习——随机梯度下降算法(sgd)和批梯度下降算法(bgd)

    线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...

  2. Java之集合(十九)LinkedBlockingDeque

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7494577.html 1.前言 本章介绍LinkedBlockingDeque,这是一个可选容量的有界双向链表队 ...

  3. UBUNTU 下 APACHE2 Too many open files: Error retrieving pid file /var/run/apache2.pid

    cat /proc/sys/fs/file-max 系统可打开的最大文件个数 ulimit -n 当前系统限制的个数 ulimit -n 10240 调整当前系统的限制 修改/etc/sysctl.c ...

  4. 【树】Serialize and Deserialize Binary Tree

    题目: Serialization is the process of converting a data structure or object into a sequence of bits so ...

  5. 在 Vuejs 项目中如何定义全局变量 全局函数

    在 Vuejs 项目中如何定义全局变量 全局函数 在项目中,经常有些函数和变量是需要复用,比如说网站服务器地址,从后台拿到的:用户的登录 token, 用户的地址信息等,这时候就需要设置一波全局变量和 ...

  6. Android 开发工具类 30_sendXML

    String xml = "<?xml version=\"1.0" encoding=\"UTF-8"?> <persons> ...

  7. Mycat常见错误

    Mycat常见错误 1.  问题: schema myinvoice didn't config tables,so you must set dataNode property! 解决:在schem ...

  8. redis on windows

    https://github.com/MSOpenTech/redis 下载解压 在/bin/release里还有一个压缩包,这个压缩包是生成好的 解压 运行redis-server 乌拉乌拉说了一堆 ...

  9. java SE 入门之输入输出(第四篇)

    在第一篇,八大基本类型的时候,我就介绍了输出,当然,这些输出都是简单的,后续写到流的时候,在细化输入输出. 现在只要求看懂输入输出.输入其实就是接受键盘的输入. public class Hello ...

  10. bonecp回缩功能实现

    起因 bonecp不具备回缩功能,即连接池持有连接之后,不会主动去释放这些连接(即使这些连接始终处于空闲状态),因此在使用一段时间之后,连接池会达到配置的最大值. 这种方式一定程度上造成了资源的浪费. ...