新手一个小问题?

caofaping 2008-10-12 03:48:40
public class TextStatic{
static Y1 y1 = new Y1();
//Y1 y2 = new Y1();
public static void main(String[] args){
}
}
class Y1{
Y1(){
System.out.println("a");
}
}

如果注释了那句加上static,运行就会输出2个 a;不加只有个a。
就是这里不加static,这句运行吗?解释下!
...全文
114 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
loaferwang 2008-10-13
  • 打赏
  • 举报
回复
嗨,本人认为,不论你加与不加struts呀,你都会出现这个a的输出的,你加载当前类时,如果调用了成员对象时,也即是说有成员对象生成时,都会引出它构造函数的调用的!可明白呀!
tmjtmjtmjtmj 2008-10-12
  • 打赏
  • 举报
回复
我也是这样理解的 楼上的几个人说的比较清楚了。。。。
caofaping 2008-10-12
  • 打赏
  • 举报
回复
5楼的在main方法加new TextStatic(); 输出两个a ,
我理解是,Y1 y2 = new Y1(); 在栈中创建y2,在堆创建new TextStatic();
当只有在main方法调用new TextStatic();才执行构造方法。
不知道是不是理解正确?
ZangXT 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 caofaping 的回复:]
谢谢!不过我想问的注释那运行吗?
应该是不执行,那是怎么回事?
[/Quote]
首先区分static field 和non-static field ,对于静态的是加载的时候初始化一次,而且确保只一次。
非static的,当你创建一个新的对象的时候会进行初始化,这种直接的定义初始化会在构造方法里面的语句之前来执行。
caofaping 2008-10-12
  • 打赏
  • 举报
回复
谢谢!不过我想问的注释那运行吗?
应该是不执行,那是怎么回事?
goosman 2008-10-12
  • 打赏
  • 举报
回复
给你个程序的例子吧

class B {
private static A a = new A();

private A a = new A();
}

class A {
public A() {
System.out.println("a");
}
}

public class Test {
public static void main(String[] args) {
B b1 = new B(); //第一次装载类B,static执行.所以输出两次a
B b2 = new B(); //不是第一次装载类B,static不执行,所以输出一次a
//总共是输出三次a,这样你应该可以看到过程了吧,一个类第一次被调用的时候,static被加载到内存中的代码区,以后的调用过程中,该类的static不再执行
}
}
tubage408 2008-10-12
  • 打赏
  • 举报
回复
两个都不加static什么也不输出,因为你的y1是static的所以在TextStatic被加载的时候先初始化static的变量,而且只初始化一次,如果你把注释去掉,在main中加入 System.out.println(“aaaa”);new TestStatic();你试着判断一下会输出什么结果,结合结果思考一下你就能得到答案了!!
ssqtjffcu 2008-10-12
  • 打赏
  • 举报
回复
不会,要new一个才会
z13999532267 2008-10-12
  • 打赏
  • 举报
回复
加了static的话,TextStatic这个类被加载的时候就会执行static Y1 y1 = new Y1(); 所以会打印一个a 没加static的方法只有这个类被new出来的时候才回执行其构造方法 例如在main方法中写Y1 y2 = new Y1(); 才会执行 .
不知道这样解释你明白不 总之就是有static的方法当类被加载的时候就会执行,楼主说的不加static 的那句是不运行的
goosman 2008-10-12
  • 打赏
  • 举报
回复
static 在每次类装载的时候都会执行,你两个static就会new两次Y1,所以就输出两次.
zx273064010 2008-10-12
  • 打赏
  • 举报
回复
你有两个成员变量,
一个是静态的,在类加载(即在构造方法调用之前初始化)的时候运行了一次打印出一个a
另一个是在你new对象的时候打印的a

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧