构造方法的问题

formathyx 2004-09-12 03:13:53
class My
{
private String name;
private int age;



public void setName(String i)
{
name=i;
}

public void setAge(int y)
{
age=y;
}

public String getName()
{
return name;
}

public int getAge()
{
return age;
}


}

public class Testmy
{
public static void main(String [] args)
{
My w=new My();
w.setName("huyuex");
w.setAge(22);
System.out.println("My is Name "+w.getName());
System.out.println("My is age "+w.getAge());
}
}

一切没问题,因为考虑到数据的封装,所以把成员变量设置为private,再设置了两个public set方法来设置成员变量,又设置了两个public get方法来获取数据..

但是当我把源代码改写成:

class My
{
private String name;
private int age;

public My(String nane,int age)
{
this.name=name;
this.age=age;
}

public void setName(String i)
{
name=i;
}

public void setAge(int y)
{
age=y;
}

public String getName()
{
return name;
}

public int getAge()
{
return age;
}


}

public class Testmy
{
public static void main(String [] args)
{
My w=new My();
w.setName("huyuex");
w.setAge(22);
System.out.println("My is Name "+w.getName());
System.out.println("My is age "+w.getAge());
}
}

编译的时候:
javac Testmy.java
Testmy.java:39: My(java.lang.String,int) in My cannot be applied to ()
My w=new My();
^
1 error

提示的意思是说不能这样使用.

这是怎么回事???
...全文
108 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
formathyx 2004-09-13
  • 打赏
  • 举报
回复
小弟分数不多,本想每一个人都给的.希望没得到分的朋友别见外
在此大家学习交流是真正的目的..帮助他人..快乐自己
formathyx 2004-09-13
  • 打赏
  • 举报
回复
谢谢楼上朋友们的帮忙,我明白了你们所说的意思...
谢谢!马上给分
rover11 2004-09-12
  • 打赏
  • 举报
回复
好象还可以这样加:
public My()
{
this("null",0);
}
楼上几位说的都对的呀.怎么没看到给分??

附: public My(String nane,int age)
{
this.name=name;
this.age=age;
}
nane!=name 但愿是笔误-_-!
tdmlxq 2004-09-12
  • 打赏
  • 举报
回复
在写一个类时,若你没有给类添加构造函数时,编译器会自动生成一个默认的构造函数,但如果你有了构造函数,编译器就不添加构造函数了,因为你第一次没有写构造函数,所以编译器就为你生成了一个public My () 的构造函数了,而你第二次自己写了一个构造函数,所以编译器就不为你提供默认的构造函数了,所以这时你必须完全自己添加你所需要的构造函数了,由于你在main()函数中的My w=new My();这一句实际上是调用了一个没有带参数的构造函数。所以你应该在类中添加构造函数public My () { }

pleonheart 2004-09-12
  • 打赏
  • 举报
回复
楼主你后面改的那个class,只定义了一个构造函数,即一定要传name和age
避免影响原来的程序,你可以再写个构造函数
public My () {
}
Januarius_ 2004-09-12
  • 打赏
  • 举报
回复
重载构造函数
class My
{
private String name;
private int age;

public My() {
name = "";
age = 0;
}

public My(String nane,int age)
{
this.name=name;
this.age=age;
}

public void setName(String i)
{
name=i;
}

public void setAge(int y)
{
age=y;
}

public String getName()
{
return name;
}

public int getAge()
{
return age;
}


}

这里
public My() 参数为空的,这样的话就可以满足你的要求,既可以用构造函数来生成对象,然后用其余的方法来赋值
不过默认构造函数里边应该对类属性进行初始化,否则的话调用会出现未测结果,比如你用
My m = new My(); //生成一个对象,而在调用setName和setAge之前就调用
m.getName();
m.getAge(); //那么得到的结果就是不确定的
而且其实如果你有了带参数的构造函数,那么就应该用它,setName和setAge方法是用来在对象创建以后改变对象属性的
formathyx 2004-09-12
  • 打赏
  • 举报
回复
楼上的兄弟..你的回答很正确的..刚才我没刷新页面...自己后来仔细看了程序得出了结论..
可是我现在的新问题又来了..希望大家继续跟下去,帮一下我这个新人
formathyx 2004-09-12
  • 打赏
  • 举报
回复
问题是构造方法带了参数:
public My(String nane,int age)
{
this.name=name;
this.age=age;
}

(String nane,int age)
那么我在My w=new My();
()中因给出构造方法中给的参数为其赋值..
如:My w = new My("huyuex",22)

但是既然是这样的那么set方法和get方法不是等于没派上用场???
我想既使用构造方法来创建一个实例对象
同时对变量的赋值和获取调用方法来实现那样怎么写?
32zyc 2004-09-12
  • 打赏
  • 举报
回复
在Testmy类中应该这样创建My对象:
My w = new My("huyuex",22);
// 这就对了
构造方法的参数是(java.lang.String,int),而你原先那个参数为空,
所以编译提示错误:My(java.lang.String,int) in My cannot be applied to ()
My w=new My();

62,623

社区成员

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

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