黑马程序员技术交流社区

标题: 关于静态修饰符的一个问题 [打印本页]

作者: 日光加蓝    时间: 2014-8-3 23:58
标题: 关于静态修饰符的一个问题
本帖最后由 日光加蓝 于 2014-8-4 22:59 编辑

public class Test{
private static Ha ha;
static{
ha = new Ha();
}
}



public class Test{
private static Ha ha= new Ha();
}

这两个静态加载的方式有何区别?


作者: 怀念黑海岸    时间: 2014-8-4 00:16
顺序不一样,前者在你声明private static Ha ha时他就给ha这个对象赋了一个值:null。然后当你在执行对类Test的初始化时,jvm会执行静态块中的初始化过程。此时对象ha就有了一个真正指向的变量了。
而后者是当你在声明他的时候,先赋值为null,紧接着被你赋值成为一个有指向的变量了。
作者: 张涛的狂怒    时间: 2014-8-4 02:52
可以知道第一个是静态代码块,你可以把第二个人看成一个静态变量的实例化。public static int m......
这样看就是静态代码块与静态常量之间的区别。
静态代码块 静态方法区别
静态代码块 代码项目启动的时候就执行。代码是主动执行的;在项目启动的时候就初始化,
静态方法,  这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2