您的位置:首页 > 编程语言

静态代码初始化

2019-05-23 18:11 1786 查看
[code]package com.learn;

public class Test01 {

/**
* 比如我赋值叫500
* 这里也要定义为静态的
*/
//	private static int age = 500;

/**
* 静态代码块你们听过没有
* 听说过吧
*/
static {
/**
* 静态代码块初始化
* 它是为2
* 这个步骤是怎么样进行执行的
* 代码是怎么进行执行的
* 怎么执行
* 什么顺序
*
*/
System.out.println("2静态代码块初始化");
/**
* 我能不能应用age
* 我把它赋值700
*/
age = 700;
}

/**
* 这个能不能放在下面
* 这个时候是多少
* 是500
* 编译器自动收藏类中的所有变量的赋值动作和静态语句块static块中的语句合并产生
* 代码从上往下执行
* 这肯定是500不是700的
* 这个也没有特别高达上
* 答错也没关系
* 如果我长期没搞我也会答错的
* 忘记很正常的
*
* 500的原理是因为静态代码块和全局变量的时候
* 会做一个合并执行
* 具体多少
* 会和你的执行顺序有关
* 如果我放到上面
* 那就会先执行age等于500
* 然后静态static里面会把age值赋值为700
* 这样的话age就为700了
*
*
* 如果放到下面
* 编译器就会从上往下执行
* age一开始的默认值是为0
* 当你age值设置为700的情况下
* 又改为500了
* 你再打印的时候值肯定就为500了
* 这个其实为JAVA基础
*
* 它是先int age = 0;
* static代码块里面把age = 700
* 然后走到这一行的时候age = 500
*
* 有人会认为你静态代码块前面age没有初始化肯定报错
* 其实JVM做了一个优化
* int age = 0
* 走到静态代码块的时候age的值等于700
* 然后走到这一行的时候age就等于500了
*
*
*/
private static int age = 500;

/**
* 我们把我们的构造函数也打印出来
*/
public Test01() {
/**
* 这个时候我们写一下叫做什么
* 构造函数初始化
* 这个你们都学过的
* 这个我倒不用讲的特别细
*
* 我标记几个步骤
* 它是为1
*/
System.out.println("1构造函数.....");

}

/**
* 我们再写一个main函数出来
*/
public static void main(String[] args) {
/**
* new一下这个类
* 你们可以说一下大体的结果
*/
Test01 t = new Test01();
/**
* 比如我这里new两个
* 这个叫t2
* 这个时候代码是怎么打印的
* 2,1,1,500
* static难道不会初始化两次吗
* 静态只初始化一次的
*
*/
Test01 t2 = new Test01();
/**
* age的结果是多少
* 是500还是700你们说一下
* 肯定是2,1
* 静态肯定是优先于构造方法
*
*/
System.out.println(t.age);
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: