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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄树人 中级黑马   /  2012-9-3 01:25  /  2959 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄树人 于 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方法和代参构造,
这样不麻烦吗?还是有什么其他好处呢

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
因为你把名字和年龄声明为private私有了,
即 private String name;
     private int age;
私有化后,类以外即使建立了对象也不能直接访问。
要想访问,可以提供方法,即 set 和get 方法
set是设置,get是获取的意思

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

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

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

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



评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人回帖,还有幽默的实例呢

查看全部评分

回复 使用道具 举报
利用构造方法给对象赋值只能初始化一次,也就是在创建对象的时候。你以后想修改它就不行的,因为数据被封装了。一般是private类型。
而利用set方法进行赋值就不一样了,set方法是提供给外部的使用的。可以对一些数据进行设置。是public类型的。

评分

参与人数 1黑马币 +10 收起 理由
黄树人 + 10 简洁明了

查看全部评分

回复 使用道具 举报
这里用的只是应该类的封装性,类的成员变量属性为private,类以外的对象就不能访问,这是java出于安全性考虑!通过有参的构造函数,给对象赋初值,只能在开始初始化时才可以,以后其他类就不能进行修改对象私有的属性,只有能通过set、get方法对相应的数据进行操作,他们的方法修饰符一般为public!
回复 使用道具 举报
楼上正解。。
回复 使用道具 举报
本帖最后由 魏-玉-彪 于 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方法是供外部调用的,构造函数是私有的,其他对象无法调用。
回复 使用道具 举报
构造函数只能在对象建立时赋值而且只能运行一次,如果建立后你要改名字和年龄就不能调用构造函数了~只能用set的函数赋值。
回复 使用道具 举报
郑世光 发表于 2012-9-3 06:47
利用构造方法给对象赋值只能初始化一次,也就是在创建对象的时候。你以后想修改它就不行的,因为数据被封装 ...

3Q,虽然斑竹没给你加分。。。
回复 使用道具 举报
黄树人 发表于 2012-9-4 01:40
3Q,虽然斑竹没给你加分。。。

感谢采纳答案,有钱就不错了。
回复 使用道具 举报
bucuo..........
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马