A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-6-18 19:48  /  2549 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙胜录 于 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等都进行了初始化。我将他们的初始赋值统统去掉,发现程序仍然运行正常,并未受影响。请问为什么一定还要初始化?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
构造函数的功能就是给成员初始化,当一个类中没有定义构造函数时或者你将自定义的构造函数删除后,系统会默认给该类加入一个空参数的构造函数,然后将你的数据成员初始化。
访问器其实就提供了一个方法。。。而当你创建一个对象后,构造函数就会被调用。所以就算你将初始化的值都删除,构造函数还是会给他们初始化~!
回复 使用道具 举报

1,set get方法是为了给外部提供可以访问本类成员的入口,在本类中当然可以直接通过构造方法初始化,然后再通过你的toString()方法得到初始化赋的值。
但是你不能一个一个取,只能取到全部,除非再定义一个toString()这样的方法。

get方法可以让你拿到任何一个值,而且外部类也可以。

2,如果外部想访问strName,而你没有提供set方法,就只能通过构造再创建一个对象,可是如果以后又要用到strNumber,是不是还要创建对象。
这样的话,你觉得这个程序还有效率可言吗。(而且前提是你得为每个属性定义好toString())。

而用set方法,你可以随时通过它给成员变量赋值,得到自己想要的。
回复 使用道具 举报
问题一:
get方法是得到当前具体对象的值,比如getStudentName是得到学生的名字,而toString是打印输出结果,这是两者的不同之处。
问题二:
private String strName  = " "; // 学生姓名
         
private String strNumber = " "; // 学号
         
private String strSex  = " "; // 性别
这是在数据成员定义的时候直接初始化,构造函数的功能就是开辟内存空间,并为数据成员赋值,你的程序里边public Students(String name, String number, String Sex)
是有参构造函数,你将之删除了后,程序没有构造函数,这种情况下java编译器会自动为你的程序提供一个无参构造函数,将你的数据成员初始化,这个就不是你初不初始化的问题了。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先由于是Students类访问自己的成员,所以显得getXXX没什么用 但是如果想在其他类中访问Students类中的private成员,就需要getXXX()方法
回复 使用道具 举报
问题1:访问器 getXxx()方法是用于,当在另一个类中需要访问此类的成员时,面此类的成员为private私有,这时就需要一个public的getXxx()方法return一个成员变量。而楼主这里的toString()在类内部中,可以直接访问类中各成员。

问题2:成员不是说一定要初始化,但是不初始化值你要他干什么用? 你不初始化JAVA会自动给你进行初始化。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马