zoukankan      html  css  js  c++  java
  • 《Think in JAVA》之每日一读(initianlize)——2013/11/12、13

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

    请看下例:

    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();

       输出结果:

        

  • 相关阅读:
    Daily scrum[2013.12.03]
    Daily scrum[2013.12.02]
    gcc编译使用math.h的c程序
    推荐两篇分布式协调算法paxos的文章
    Linux系统如何查看版本信息
    [原]gcc编译器强别名导致的问题
    [转]Linux 在一个命令行上执行多个命令
    [转] Python执行系统命令的方法 os.system(),os.popen(),commands
    [转]Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程
    [转]MySQL数据库基准压力测试工具之MySQLSlap使用实例
  • 原文地址:https://www.cnblogs.com/cq-home/p/3420564.html
Copyright © 2011-2022 走看看