黑马程序员技术交流社区
标题:
帮我看看啊类的加载
[打印本页]
作者:
陆华山
时间:
2011-10-26 10:59
标题:
帮我看看啊类的加载
public class EggOrChicken {
public static void main(String[] args) {
Chicken c = new Chicken();
}
}
class Chicken{
static Egg egg;
public Chicken(){
System.out.println("chick");
}
}
class Egg{
static Chicken c = new Chicken();
Egg(){
System.out.println("egg");
}
}
上述代码输出的结果是: chick
为什么在加载Chicken类的时候Static Egg对象没有被加载呢? 应该加载再初始化一边 Chicken类吧.
作者:
olkldksl
时间:
2011-10-26 11:12
Chicken类里的成员变量egg没有初始化吧,new一下试试?
作者:
张奇云
时间:
2011-10-26 11:56
Chicken类中的构造函数只是声明了egg,并没有创建egg实例,因此并没有调用Egg类的构造函数,也不会输出“egg”了。
作者:
祁焱
时间:
2011-10-26 12:06
主方法中建立了Chicken对象,建立此对象时自动调用Chicken类的构造方法,如果要对Static Egg进行操作,操作代码需要放在构造方法里。
作者:
吉许
时间:
2011-10-26 12:28
调用一个静态方法就是“类名.方法名”.
Static如果要用来修饰类只能用来修饰匿名内部类.
你想声明 个静态Egg类在Chicken类实例化对象时调用该静态类,然后静态Egg类调用本类的构造方法?这不在静态,类,方法规定的前提下吧.
作者:
李建雄
时间:
2011-10-26 14:55
static 类型的变量是随着类的加载而加载的,
而Egg类没有被加载,所以static Chicken c = new Chicken();也就不会加载
作者:
李建雄
时间:
2011-10-26 15:01
如果要让static Chicken c = new Chicken();加载,
可以new 一个Egg对象:在new Egg对象的过程中,会先加载Egg类,就此会加载static Chicken c = new Chicken();
作者:
魏兴发
时间:
2011-10-26 18:01
在Chicken类里定义的Egg类的对象egg只是一个引用变量,系统初始化它也就是赋值为Null,根本不会new出一个对象来的。只有我们通过new关键字才会创建对象!!!!
作者:
孙运强
时间:
2011-10-27 08:15
你可以用静态代码块试试,static{System.out.println("egg");}
这时你就能看见 Egg对象有没有被加载
静态代码块是在字节码被加载时就执行的代码块,(只执行一次),
当你在 Chicken中执行static Egg egg;时就能看见了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2