输出结果不一样

inodreamone 2007-04-08 11:25:59
public class A {
int y,m,d;
public A(int y,int m,int d){
this.y=y;
this.m=m;
this.d=d;

}
public String da=y+"."+m+"."+d;
public String getDate(){
return(y+"年"+m+"月"+d+"日");
}
public static void main(String[] args){
A dat=new A(2007,4,8);
System.out.println("date="+dat.da);
System.out.println("date="+dat.getDate());
}
}

//dat.da 和dat.getDate(),为什么得出的结果不一样呢。
...全文
234 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
家有萌宝V 2007-04-09
  • 打赏
  • 举报
回复
或者是class A{
String da;
public A(int ,int, int,){
da=y+"."+m+"."+d;
}
}
家有萌宝V 2007-04-09
  • 打赏
  • 举报
回复
LS说的有道理!
squallking007 2007-04-09
  • 打赏
  • 举报
回复
类的初始化过程:静态自由代码,非静态自由代码,静态变量,非静态变量,构造器
squallking007 2007-04-09
  • 打赏
  • 举报
回复
说错了,刚才说的作废。。。。。。

晕了
squallking007 2007-04-09
  • 打赏
  • 举报
回复
public String da=y+"."+m+"."+d;

da 是static的,是脱离类的实例而存在的(书上的原话)

也就是说,da不是你实例化A类的时候初始化的,而是在编译的时候已经初始化好了的。


一家之言,请高手指教.~~
inodreamone 2007-04-09
  • 打赏
  • 举报
回复
可是public String da=y+"."+m+"."+d;
是个实例属性呀,又不是类的属性。
他难道不再重新赋值吗?
wang_wei2007 2007-04-09
  • 打赏
  • 举报
回复
malligator(不能再整天泡在CSDN里了!) 说的对
初始化顺序为:1,首先把int y,m,d三个值初始化为0;第二,进行public String da=y+"."+m+"."+d;这条语句的初始化,所以da=0.0.0;第三步,进行构造函数的初始化,这时,y,m,d被分别赋值了,所以最后的结果这是这样的了
malligator 2007-04-08
  • 打赏
  • 举报
回复
初始化顺序
先是
da=y+"."+m+"."+d;
然后才
this.y=y;
this.m=m;
this.d=d;
家有萌宝V 2007-04-08
  • 打赏
  • 举报
回复
还有一个办法就是不要String da=y+"."+m+"."+d;将System.out.println("date="+da);改成System.out.println("date="+y+"."+m+"."+d);也是可以的
家有萌宝V 2007-04-08
  • 打赏
  • 举报
回复
如果把String da=y+"."+m+"."+d;放在构造器之后就不同了
家有萌宝V 2007-04-08
  • 打赏
  • 举报
回复
public class A {
int y,m,d;
public A(int y,int m,int d){
this.y=y;
this.m=m;
this.d=d;

}
public String getDate(){
return(y+"年"+m+"月"+d+"日");
}
public static void main(String[] args){
A dat=new A(2007,4,8);
public String da=y+"."+m+"."+d;
System.out.println("date="+da);
System.out.println("date="+dat.getDate());
}
}
new 了一个对象之后,虽然对象的3个属性已经实例化,但是String 对象da并未主动实例化,所以为0.0.0
edsoft 2007-04-08
  • 打赏
  • 举报
回复
虽不是很难,倒也是个实质性的东西,顶一下。
dragon_up 2007-04-08
  • 打赏
  • 举报
回复
A dat=new A(2007,4,8);
只是初始化了构造函数A()里面的y,m,d.并没有对构造函数外面的y,m,d赋值.因此用其默认值0.

一家之言,请高手指教.~~

62,614

社区成员

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

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