类中变量初始化

这些是自己学习过程中的一些理解和感悟,为的是加深记忆与日后回顾。因为还是新手,写出来的可能不都是对的,有缘看到这些文章的码友如果有觉得写的不对的地方,可以在下面评论指出,欢迎大家发表自己的看法,希望大家一起共同进步!!!


类中的变量(包括基本数据类型,对象引用)在加载对象字节码进内存,在使用其之前,调用构造方法之前就已经完成初始化赋值了。其中static 修饰的变量在加载对象字节码时时就赋值了,其他变量在这以后被赋值,也就是static 修饰的先赋值。

验证代码如下:

package cn.ytu.en;

class Circle{
int i;

Circle(){
System.out.println(i);
System.out.println("Circle()");
}

Circle(int a){
System.out.println("Circle()+"+a);
}
}


class ThirdCircle{

//普通变量
int b=8;

//静态代码块
static{
c1=new Circle(5);
}

//普通代码块
{
c1=new Circle(1);
}

//静态对象引用
static Circle c1=new Circle();


ThirdCircle() {
System.out.println(b);
System.out.println("ThirdCircle()");
c1=new Circle(2);
}

//普通对象引用
Circle c3=new Circle(3);

ThirdCircle(int a) {
System.out.println("ThirdCircle()+"+a);
c1=new Circle(4);
}
}


public class InitTest {


public static void main(String[] args) {
System.out.println("InitTest()");
new ThirdCircle(); //第一次创建对象
System.out.println("end");
new ThirdCircle(1); //第二次创建对象
}


/*输出结果如下:

* InitTest()
* Circle()+5
* 0
* Circle()
* Circle()+1
* Circle()+3
* 8
* ThirdCiecle()
* Circle()+2
* end
* Circle()+1
* Circle()+3
* ThirdCiecle()+1
* Circle()+4


* */


}


从结果可以看出,在创建 ThirdCircle 对象( new ThirdCircle()),调用其构造方法之前,类中变量就已经完成其初始化过程。1、static 修饰的先执行,无论是static 代码块还是变量,这两个的执行顺序是由其在类中的位置决定的,如上例,static代码块与static Circle c1 先完成初始化,且static代码块在static Circle c1 之前,所以static代码块先执行,如果static Circle c1 在前,则它先执行。同理普通代码块与普通对象引用初始化也是如此。

2、在static 修饰的完成初始化之后,再是其他变量完成初始化,如c3以及ThirdCircle类中的变量b。

3、等所有的变量都完成了初始化过程以后,构造方法才被调用,生成对象。

4、static 修饰的,无论是代码块还是变量,在一个类中只会被调用一次,不管是创建几个类对象。如上例new ThirdCircle(1),第二次创建 ThirdCircle 对象,static 代码块与 static Circle c1=new Circle()  不再被调用了,总共只被调用了一次

5、除了static以外的代码块和变量,调用次数与创建对象数一一对应。如上例new ThirdCircle(1),第二次创建 ThirdCircle 对象,{
c1=new Circle(1);

}以及 Circle c3=new Circle(3) 依然被调用了,这样总共被调用了两次

以上就是类中变量初始化过程了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值