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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陆华山 黑马帝   /  2011-10-26 10:59  /  2585 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在Chicken类里定义的Egg类的对象egg只是一个引用变量,系统初始化它也就是赋值为Null,根本不会new出一个对象来的。只有我们通过new关键字才会创建对象!!!!
回复 使用道具 举报
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类吧.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

8 个回复

倒序浏览
Chicken类里的成员变量egg没有初始化吧,new一下试试?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
Chicken类中的构造函数只是声明了egg,并没有创建egg实例,因此并没有调用Egg类的构造函数,也不会输出“egg”了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
祁焱 黑马帝 2011-10-26 12:06:13
报纸
主方法中建立了Chicken对象,建立此对象时自动调用Chicken类的构造方法,如果要对Static Egg进行操作,操作代码需要放在构造方法里。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
吉许 黑马帝 2011-10-26 12:28:30
地板
调用一个静态方法就是“类名.方法名”.
Static如果要用来修饰类只能用来修饰匿名内部类.
你想声明 个静态Egg类在Chicken类实例化对象时调用该静态类,然后静态Egg类调用本类的构造方法?这不在静态,类,方法规定的前提下吧.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李建雄 黑马帝 2011-10-26 14:55:28
7#
static 类型的变量是随着类的加载而加载的,
而Egg类没有被加载,所以static Chicken c = new Chicken();也就不会加载
回复 使用道具 举报
李建雄 黑马帝 2011-10-26 15:01:47
8#
如果要让static Chicken c = new Chicken();加载,
可以new 一个Egg对象:在new Egg对象的过程中,会先加载Egg类,就此会加载static Chicken c = new Chicken();

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
孙运强 黑马帝 2011-10-27 08:15:26
9#
你可以用静态代码块试试,static{System.out.println("egg");}
这时你就能看见 Egg对象有没有被加载
静态代码块是在字节码被加载时就执行的代码块,(只执行一次),
当你在 Chicken中执行static Egg egg;时就能看见了。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马