请教一个初级问题

老俊说技术 2009-06-28 06:54:18

public class Hello{
String title;
int value;
public static void main(String[] args){
Hello h=new Hello(5);
System.out.println(h.title);
}
public Hello(){
title+="World";
}
public Hello(int v){
Hello();
this.value=v;
title="hello";

}

}

这个编译时为什么会出错?
...全文
22 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
longq121 2009-07-01
  • 打赏
  • 举报
回复
学习了
shp19900510 2009-07-01
  • 打赏
  • 举报
回复
String 类的对象是不可变的对象,所以你那个 title += "World" ; 这句代码后 title 仍然没变的 !
tg008007x3 2009-06-30
  • 打赏
  • 举报
回复
站在编译器的角度想想,它会不会去找Hello()方法捏(它可不知道Hello是不是一个构造方法,也没有那么聪明检查完没有这个方法再来检查构造器,可能这需要不断完善吧),那么事情可能变得比较美好了。。。
弘石 2009-06-30
  • 打赏
  • 举报
回复
title+="World";
才知道这样也可以,应该是调用的title.toString()方法吧
学习了
dreamhyz 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Yedy2000 的回复:]
引用 9 楼 chen0754_0661 的回复:
String title;--在声明title时没有给它赋值
int value;
public static void main(String[] args){
Hello h=new Hello(5);
System.out.println(h.title);
}
public Hello(){
title+="World";---因为title未赋值,所以不对title进行运算
}
public Hello(int v){
Hello();
this.value=v;
title=…
[/Quote]

俺赞同这种说法
yuhongpingimu 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xdbjzhhh 的回复:]

它把Hello()当一个普通方法调用了,
找不到那个方法
[/Quote]agree
「已注销」 2009-06-30
  • 打赏
  • 举报
回复

它把Hello()当一个普通方法调用了,
找不到那个方法
彷徨的蜗牛 2009-06-29
  • 打赏
  • 举报
回复
public class Hello{
String title;
int value;
public static void main(String[] args){
Hello h=new Hello(5);
System.out.println(h.title);
}
public Hello(){
title+="World";
}
public Hello(int v){
// Hello();
this();
this.value=v;
title="hello";

}

}

liuxin0369 2009-06-29
  • 打赏
  • 举报
回复
可以设置String title = "";设置为空字符串
Yedy2000 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 WYhack 的回复:]
带参数的构造函数中没有this();也可以吧!!!
[/Quote]

当然是可以,只有你确实有需要调用这个构造函数的时候才用this();
Yedy2000 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chen0754_0661 的回复:]
String title;--在声明title时没有给它赋值
int value;
public static void main(String[] args){
Hello h=new Hello(5);
System.out.println(h.title);
}
public Hello(){
title+="World";---因为title未赋值,所以不对title进行运算
}
public Hello(int v){
Hello();
this.value=v;
title="hello";

}

[/Quote]

回答问题至少要经过推敲下吧。实际上System.out.println(null+"title");打印出来的是nulltitle,谁说不能运算,在一个构造函数中调用另外的构造函数要用this(),有参数就加参数。一个构造函数不能调用自己,只能调用别的构造函数。
chen0754_0661 2009-06-29
  • 打赏
  • 举报
回复
String title;--在声明title时没有给它赋值
int value;
public static void main(String[] args){
Hello h=new Hello(5);
System.out.println(h.title);
}
public Hello(){
title+="World";---因为title未赋值,所以不对title进行运算
}
public Hello(int v){
Hello();
this.value=v;
title="hello";

}

舷Kelvin 2009-06-29
  • 打赏
  • 举报
回复
1.如果你想调用无参构造函数,要用this()
2.你写的代码里,无论是否调用无参构造函数都不影响结果,所以把最后一句改成title+="hello";应该才是你的本意吧。
3.+=处理字符串null的字符也还在,想把null去掉可以用title="";
WYhack 2009-06-28
  • 打赏
  • 举报
回复
带参数的构造函数中没有this();也可以吧!!!
micsolaris 2009-06-28
  • 打赏
  • 举报
回复


public class Hello{
String title;
int value;
public static void main(String[] args){
Hello h=new Hello(5);
System.out.println(h.title);
}
public Hello(){
title+="World";
}
public Hello(int v){
// Hello();
this();
this.value=v;
title="hello";

}

}



这个才是
micsolaris 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zla85 的回复:]
构造函数不能显试调用哈,会自动调用的

把Hello();去掉就可以了
[/Quote]
说错了,你说的自动调用是调用super的。而对以构造函数Hello(int v)并不会自动调用Hello().如果你要调用的话应该写成

public class Hello{
String title;
int value;
public static void main(String[] args){
Hello h=new Hello(5);
System.out.println(h.title);
}
public Hello(){
title+="World";
}
public Hello(int v){
// Hello();
//this();
this.value=v;
title="hello";

}

}



而且title默认是null,所以最好开始的时候赋值为""
老俊说技术 2009-06-28
  • 打赏
  • 举报
回复
已解决,谢谢
swandragon 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zla85 的回复:]
构造函数不能显试调用哈,会自动调用的

把Hello();去掉就可以了
[/Quote]

正解
bigbug9002 2009-06-28
  • 打赏
  • 举报
回复
我不对
bigbug9002 2009-06-28
  • 打赏
  • 举报
回复
public Hello(){
title+="World";
}

title是null,不能+=运算.
加载更多回复(1)

62,614

社区成员

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

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