黑马程序员技术交流社区

标题: 关于代参构造和set方法的问题 [打印本页]

作者: 黄树人    时间: 2012-9-3 01:25
标题: 关于代参构造和set方法的问题
本帖最后由 黄树人 于 2012-9-4 01:43 编辑
  1. public class Student {
  2.         private String name;
  3.         private int age;

  4.         public Student() {
  5.         }

  6.         public Student(String name, int age) {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }

  10.         public String getName() {
  11.                 return name;
  12.         }

  13.         public void setName(String name) {
  14.                 this.name = name;
  15.         }

  16.         public int getAge() {
  17.                 return age;
  18.         }

  19.         public void setAge(int age) {
  20.                 this.age = age;
  21.         }
  22. }
复制代码
我在一个自定义类中给出了代参构造,同时又给出了set方法,
但是在测试类中创建自定义对象是,完全可以只使用代参构造或者set方法中的一个
给自定义对象赋值就够了,那为什么写代码时却还要同时给set方法和代参构造,
这样不麻烦吗?还是有什么其他好处呢
作者: 杨千里    时间: 2012-9-3 02:28
因为你把名字和年龄声明为private私有了,
即 private String name;
     private int age;
私有化后,类以外即使建立了对象也不能直接访问。
要想访问,可以提供方法,即 set 和get 方法
set是设置,get是获取的意思

这是封装的一种表现形式性,

如果你觉得麻烦,可以不声明私有,那么就不用set和get方法了

另外这并不是麻烦,我们在写代码时,有一些东西可以让别人直接访问到,一些不可以让别人直接访问。但是如果这个东西必须用,我们可以对外提供一个方法set和get

例如:黑马是培训程序员的,培训期间免费。
如果黑马没有这些入学测试程序,那么每个人都可以进黑马了,大家一听说,都来了,那得多少人?这种情况起步乱套了,
所以黑马指定了严格的入学测试程序,只要我们通过这个程序就是黑马中的一员了,你可以不用交钱,,,,哈哈哈  这个程序就相当于set和get方法




作者: 郑世光    时间: 2012-9-3 06:47
利用构造方法给对象赋值只能初始化一次,也就是在创建对象的时候。你以后想修改它就不行的,因为数据被封装了。一般是private类型。
而利用set方法进行赋值就不一样了,set方法是提供给外部的使用的。可以对一些数据进行设置。是public类型的。
作者: 武庆东    时间: 2012-9-3 07:17
这里用的只是应该类的封装性,类的成员变量属性为private,类以外的对象就不能访问,这是java出于安全性考虑!通过有参的构造函数,给对象赋初值,只能在开始初始化时才可以,以后其他类就不能进行修改对象私有的属性,只有能通过set、get方法对相应的数据进行操作,他们的方法修饰符一般为public!
作者: 夏天    时间: 2012-9-3 07:18
楼上正解。。
作者: 魏-玉-彪    时间: 2012-9-3 07:29
本帖最后由 魏-玉-彪 于 2012-9-3 07:34 编辑

带参构造,是为了给新创建的类对象进行初始化,假如没有带参函数,新创建的类对象中的相关参数是默认值,比如,假如
  private String name;// 默认name= null
        private int age; //  默认 age=0

java虚拟机默认值

1.数值类型=0,如:int

2.boolean类型=false

3.字符类型=空字符,如:char

4.字符串类型=null,如:String

5.对象类型=null,如:Object


    这可能不是你所想要的,可是假如有了带参构造函数,就可以直接把参数传进去,这样创建的新对象中的参数就是构造函数中的参数,如果你没有用带参构造函数,那么在初始化完空参数以后,还要再调用set方法,假如  对象中有很多属性:
       private String name;
        private int age;
       private String name1;
        private int age1;
       private String name2;
        private int age2;
      这样岂不是要调用很多次 set方法。


        但是,构造函数有一个缺点,就是只能初始化一次,也就是创建完对象就不能再用了,所以,还要用set方法修改对象中属性的值。所以要两者结合。

  另外,set方法是供外部调用的,构造函数是私有的,其他对象无法调用。

作者: 黄基焜    时间: 2012-9-3 10:44
构造函数只能在对象建立时赋值而且只能运行一次,如果建立后你要改名字和年龄就不能调用构造函数了~只能用set的函数赋值。
作者: 黄树人    时间: 2012-9-4 01:40
郑世光 发表于 2012-9-3 06:47
利用构造方法给对象赋值只能初始化一次,也就是在创建对象的时候。你以后想修改它就不行的,因为数据被封装 ...

3Q,虽然斑竹没给你加分。。。
作者: 郑世光    时间: 2012-9-4 06:47
黄树人 发表于 2012-9-4 01:40
3Q,虽然斑竹没给你加分。。。

感谢采纳答案,有钱就不错了。
作者: 徐传任    时间: 2012-9-16 18:03
bucuo..........




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2