java类加载和初始化的区别_Java 类加载 初始化过程

类的加载过程

1首先执行类中的静态代码块

2初始化静态变量

3最后new一个对象

注意:如果一个类中有静态代码块和非静态代码块

在加载时首先执行静态代码块有多个时则按照放置顺序执行

new对象实例时则会首先执行非静态代码块有多个时则按照顺序执行

加载类和实例的区别

加载类:只是为类的静态成员分配内存并初始化

对象为nullint0char0booleanfalse

new对象则为非静态成员分配内存

packageClassLoader;

//5.5加载类window

classWindow{

Window(){

System.out.println("Window"+"("+")");

}

Window(intmask){

System.out.println("Window"+"("+mask+")");

}

//5.6加载静态代码块加载完毕返回创建对象

{

//代码块在new一个对象时都会执行并且时先执行再调用构造函数

System.out.println("loadclasswindow");

}

}

//5.1加载House类

classHouse{

//5.2初始化成员变量d

staticintd;

booleanad;

Windoww1=newWindow(1);

//5.3按照顺序加载静态代码块并执行其中的方法

static{

System.out.println("first");

}

House(){

System.out.println("House");

//w3=newWindow(33);

}

Windoww2=newWindow(2);

voidf(){

System.out.println("f()");

}

Windoww3=newWindow(3);

static{

//5.4创建对象引起的window类的加载

//5.7加载完毕后调用构造器创建对象

Windowww=newWindow(100);

//5.8继续初始化House类加载完毕返回

System.out.println("ok");

}

}

//类的加载完成两件事一完成对静态成员变量的初始化加载class文件

二执行静态域但不执行静态方法

//调用静态成员静态域引起类加载(加载时会执行static区域内的代码块)

publicclassInitialiedAndNew{

//3.初始化house

staticHousehouse;

//1.运行main方法加载InitialiedAndNew类先执行代码块再按照顺序初始化成员变量

publicstaticvoidmain(String[]args){

//4.执行main方法

//5.调用构造器(静态创建对象首先5.1加载House类

//5.9加载完毕调用构造器创建对象

//Househ=newHouse();

Classcls=Class.forName("ClassLoader.House");

System.out.println("loadsuccessful");

Househ=(House)cls.newInstance();

//6.0执行赋值

House.d=0;

/newHouse();

}

static{

System.out.println("house:");

}

//2.先执行static域代码

static{

System.out.println("loadclassInitialiedAndNew");

System.out.println("houseinitialieis"+house);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值