对象初始化全过程

/*  
 *初始化全过程:  
 *  
 *1,    第一次创建MyClass类的对象,或者第一次访问MyClass的static方法或字段时,Java解释器会搜寻classpath,找到MyClass.class。  
 *2,    装载MyClass.class后,会对所有的static数据进行初始化。这样第一个装载Class对象的时候,会先进行static成员的初始化。  
 *3,    使用new MyClass()创建新对象的时候,MyClass对象的构建进程会先在堆里为对象分配足够的内存。 *  
 *4,    清零这块新内存,把MyClass对象的primitive类型的成员赋上缺省值。  
 *5,    执行定义成员数据时所作的初始化。   
 *6,    执行构造函数。  
 
*/
  
import 
static  net.mindview.util.Print. * ;   
  
public   class  Beetle extends Insect   
{   
    
private int k = printInit("Beetle.k initialized");   
  
    
public Beetle()   
    
{   
        print(
"k = " + k);   
        print(
"j = " + j);   
    }
   
    
private static int x2 = printInit("static Beetle.x2 initialized");   
  
    
public static void main(String[] args)   
    
{   
        print(
"Beetle constructor");   
        Beetle b 
= new Beetle();   
    }
   
}
   
  
class  Insect   
{   
    
private int i = 9;   
    
protected int j;   
  
    Insect()   
    
{   
        print(
"i = " + i + ", j = " + j);   
        j 
= 39;   
    }
   
  
    
private static int x1 = printInit("static Insect.x1 initialized");   
  
    
static int printInit(String s)   
    
{   
        print(s);   
        
return 47;   
    }
   
}
   
  
  
/* Output:  
static Insect.x1 initialized  
static Beetle.x2 initialized  
Beetle constructor  
i = 9, j = 0  
Beetle.k initialized  
k = 47  
j = 39  
*/
// :~   
  
/****************************************************/   
  
//  变量初始化先后顺序的示例   
import  static  net.mindview.util.Print. * ;   
  
// 当创建Window的实例对象时会有消息提示   
class  Window   
{   
    Window(
int marker)   
    
{   
        print(
"Window(" + marker + ")");   
    }
   
}
   
  
class  House   
{   
    Window w1 
= new Window(1); // 构造函数前的变量   
  
    House()   
    
{   
        
//构造函数里面的变量   
        print("House()");   
        w3 
= new Window(33); // 重新赋值w3   
    }
   
  
    Window w2 
= new Window(2); // 构造函数后的变量   
  
    
void f()   
    
{   
        print(
"f()");   
    }
   
  
    Window w3 
= new Window(3); // 结束类体时的对象   
}
   
  
public   class  OrderOfInitialization   
{   
    
public static void main(String[] args)   
    
{   
        House h 
= new House();   
        h.f();    
    }
   
}
    
/*  
* 输出结果: Window(1) Window(2) Window(3) House() Window(33) f()  
*  
* 从结果看出,虽然域变量w2,w3排在构造函数后面,但它的输出却在构造函数前面  
*/
  
  
/****************************************************/   
  
//  数组的初始化   
import java.util. * ;   
  
public   class  ArrayInit   
{   
    
public static void main(String[] args)   
    
{   
        
//直接赋值方式,局限在于数组在大小编译确定   
        Integer[] a = {    
                
new Integer(1),    
                
new Integer(2),    
                
3// 自动包装   
                }
;   
        
//new方式,适于参数数量未知的场合,或者参数类型未知的场合   
        Integer[] b = new Integer[] {    
                
new Integer(1),    
                
new Integer(2),    
                
3// 自动包装   
                }
;   
        System.
out.println(Arrays.toString(a));   
        System.
out.println(Arrays.toString(b));   
    }
   
}
   
/* 输出结果:  
 [1, 2, 3]  
 [1, 2, 3]  
 
*/
// :~  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值