黑马程序员技术交流社区
标题:
java访问器和构造函数的问题
[打印本页]
作者:
山水游客
时间:
2012-6-18 19:48
标题:
java访问器和构造函数的问题
本帖最后由 孙胜录 于 2012-6-18 23:04 编辑
/*
*学生类,包括学生的基本信息
*/
public class StudentTest
{
public static void main(String[] args)
{
Students tom = new Students("Tom", "20020410", "nan");
// tom.setStudentSex("man");
System.out.println(tom.toString());
}
}
class Students
{
private String strName = " "; // 学生姓名
private String strNumber = " "; // 学号
private String strSex = " "; // 性别
public Students(String name, String number, String Sex)
{
strName = name;
strNumber = number;
strSex = Sex;
}
public String getStudentName()
{
return strName;
}
public String getStudentNumber()
{
return strNumber;
}
/*
* public void setStudentSex(String sex) {
*
* strSex = sex; }
*
* public String getStudentSex() {
*
* return strSex; }
*/
public String toString()
{
String information = "学生姓名=" + strName + " , 学号=" + strNumber;
if (!strSex.equals(" "))
information += ",性别= " + strSex;
return information;
}
}
问题1:我将里边的"get"开头的访问器全部删除掉,程序仍然能够正常运行并且结果和删除前一样!请问既然如此,为什么还有有访问器?据我观察return这些变量对于tostring方法确实没有起作用!
问题2:程序将strName等都进行了初始化。我将他们的初始赋值统统去掉,发现程序仍然运行正常,并未受影响。请问为什么一定还要初始化?
作者:
唐辉辉
时间:
2012-6-18 19:55
问题1:访问器 getXxx()方法是用于,当在另一个类中需要访问此类的成员时,面此类的成员为private私有,这时就需要一个public的getXxx()方法return一个成员变量。而楼主这里的toString()在类内部中,可以直接访问类中各成员。
问题2:成员不是说一定要初始化,但是不初始化值你要他干什么用? 你不初始化JAVA会自动给你进行初始化。
作者:
陌花╮有意、
时间:
2012-6-18 20:12
首先由于是Students类访问自己的成员,所以显得getXXX没什么用 但是如果想在其他类中访问Students类中的private成员,就需要getXXX()方法
作者:
李文龙
时间:
2012-6-18 22:46
问题一:
get方法是得到当前具体对象的值,比如getStudentName是得到学生的名字,而toString是打印输出结果,这是两者的不同之处。
问题二:
private String strName = " "; // 学生姓名
private String strNumber = " "; // 学号
private String strSex = " "; // 性别
这是在数据成员定义的时候直接初始化,构造函数的功能就是开辟内存空间,并为数据成员赋值,你的程序里边public Students(String name, String number, String Sex)
是有参构造函数,你将之删除了后,程序没有构造函数,这种情况下java编译器会自动为你的程序提供一个无参构造函数,将你的数据成员初始化,这个就不是你初不初始化的问题了。
作者:
王月
时间:
2012-6-18 23:08
1,set get方法是为了给外部提供可以访问本类成员的入口,在本类中当然可以直接通过构造方法初始化,然后再通过你的toString()方法得到初始化赋的值。
但是你不能一个一个取,只能取到全部,除非再定义一个toString()这样的方法。
get方法可以让你拿到任何一个值,而且外部类也可以。
2,如果外部想访问strName,而你没有提供set方法,就只能通过构造再创建一个对象,可是如果以后又要用到strNumber,是不是还要创建对象。
这样的话,你觉得这个程序还有效率可言吗。(而且前提是你得为每个属性定义好toString())。
而用set方法,你可以随时通过它给成员变量赋值,得到自己想要的。
作者:
胡大强
时间:
2012-6-19 02:04
构造函数的功能就是给成员初始化,当一个类中没有定义构造函数时或者你将自定义的构造函数删除后,系统会默认给该类加入一个空参数的构造函数,然后将你的数据成员初始化。
访问器其实就提供了一个方法。。。而当你创建一个对象后,构造函数就会被调用。所以就算你将初始化的值都删除,构造函数还是会给他们初始化~!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2