A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 日光加蓝 中级黑马   /  2014-8-3 23:58  /  1574 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 日光加蓝 于 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();
}

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

2 个回复

倒序浏览
顺序不一样,前者在你声明private static Ha ha时他就给ha这个对象赋了一个值:null。然后当你在执行对类Test的初始化时,jvm会执行静态块中的初始化过程。此时对象ha就有了一个真正指向的变量了。
而后者是当你在声明他的时候,先赋值为null,紧接着被你赋值成为一个有指向的变量了。
回复 使用道具 举报
可以知道第一个是静态代码块,你可以把第二个人看成一个静态变量的实例化。public static int m......
这样看就是静态代码块与静态常量之间的区别。
静态代码块 静态方法区别
静态代码块 代码项目启动的时候就执行。代码是主动执行的;在项目启动的时候就初始化,
静态方法,  这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的.
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马