黑马程序员技术交流社区
标题:
关于set和get
[打印本页]
作者:
杜桂发
时间:
2011-9-2 20:59
标题:
关于set和get
我是0基础开始接触JAVA的,很想参加很四届的培养.这几天一直在学毕向东老师的0基础视频教程.感觉老师讲课很生动.但因为自己基础太差,有些地方不明白.希望能在这里遇到老师或同学有空时帮忙解答下.谢谢.:loveliness:
对于私有成员的访问方式的get和set我是这样理解的(自己写了一整天的关于类的程序摸索出来的):set可以被相应的构造函数调来为对应的对象设置特定的属性值.它一般不会被其他函数调用.get也可以被构造函数调来以初始化某个对象的属性值.但它还可被对象调来,用来获取某个属性的值.:lol
不知道这个理解对不对,不过目前貌似能这样运用.:)
作者:
曹文涛
时间:
2011-9-2 21:24
set 和 get 其实就是个名子 set表示设置 get表示得到 是一个命名的规范
public class Student{
private String name; //姓名
private int age; //年龄
public Student(String n,int a){ //构造方法
this.setName(n); //利用构造方法调用setName 将n的值传过去
this.setAge(a); //利用构造方法调用setAge 将a的值传过去
}
public String getName() { //任何对象调用了getName方法就会得到name的内容
return name;
}
public void setName(String n) { //n的值传来之后 name就会被指向n的内容
this.name = n;
}
public int getAge() {
return age;
}
public void setAge(int a) {
this.age = a;
}
}
复制代码
以上代码中 利用了构造方法 将name=n 将age=a 完成了对这两个属性的初始化操作,而get方法则是谁需要,刚谁调用,比如:
String str = this.getName();//此时调用了get,将get的返回值 传给了str。
[
本帖最后由 曹文涛 于 2011-09-02 21:32 编辑
]
作者:
匿名
时间:
2011-9-2 21:24
set, get 都是方法,方法要么被对象调用(非静态方法),要么被类直接调用(静态方法)。被构造函数调用,我不知道行不行,构造函数一般是用来初始化值的。
作者:
匿名
时间:
2011-9-2 21:34
理解不对,对于私有成员,set和get是为外部调用提供特定的通道,如果想获得或修改某个成员,只能使用这两个方法,便于管理,构造方法是类内部定义的,对于类的私有成员具有访问权限,所以构造方法不需要通过调用set和get方法来初始化,虽然调用本身是没有问题的
我说的不敢保证一定正确,有能力的可以解答一下,顺便评价一下我的答案
作者:
匿名
时间:
2011-9-2 21:35
才这么一会功夫,前面就排两个啦
作者:
匿名
时间:
2011-9-3 00:33
呵呵,这个问题,如果是刚刚接触Java的话
那么你就只需要知道private和public的区别就可以了
还是先简单回顾下吧:
如果你在一个类的内部定义了一个private类型的变量或方法
那么,就只有在你这个类里面可以使用它,其他的类都是无法直接使用它的
而如果你在一个类的内部定义个了一个public类型的变量或方法
那么无论是在在哪个类里面,就都可以直接使用这个变量或方法了
所以,当你在一个类里面把某个变量定义成private的时候
由于其他的类无法直接使用这个变量
那么如果想要在其他的类里面改变它的值或者获取它的值的话,那该怎么办呢?
很简单,由于在其他的类中可以使用这个类中定义的public类型的方法
所以,如果你想让其他的类改变这个变量的值的话
你就需要在这个类中提供一个public类型的方法,在这个方法中可以改变这个变量的值
这样,当别的类调用这个方法的时候,就改变这个变量的值了
这个方法的名字,[color=Red][b]约定俗成[/b][/color]就是set方法
同理,如果你想要让别的类获取这个变量的值的话
你就同样需要提供一个public类型的方法,在这个方法中可以获取到这个变量的值
这方法的名字,[color=Red][b]约定俗成[/b][/color]也就是get方法
Tips:呵呵,在这里我再啰嗦两句约定俗成的力量吧
所谓的约定俗成,就好像是咱们日常生活中所使用的俗语一样
这样当你说出这个俗语的时候,别人就可以立刻知道你想表达的意思是什么
如果你不这么说虽然也没关系,但是别人就不能一下子就明白你想要表达的意思了
作者:
匿名
时间:
2011-9-3 11:53
标题:
回复 沙发 的帖子
谢谢.和我理解的差不多:lol
作者:
匿名
时间:
2011-9-3 11:56
标题:
回复 板凳 的帖子
是的,构造函数可以直接初始化对象.我当时遇到的问题是,要求在写类时就给属性设置默认值(通过第一个构造函数来实现了),然后后面又有一个要求在对象被创建时要有自己的初值,这时就要通过另一个构造函数来调来set了.
作者:
匿名
时间:
2011-9-3 11:59
标题:
回复 地板 的帖子
谢谢,你说的是意义上的理解,不过我是在细节的实现上有问题:loveliness:
作者:
匿名
时间:
2011-9-3 12:00
标题:
回复 7 # 的帖子
嗯嗯,基本上理解了.谢谢!:lol
作者:
匿名
时间:
2011-9-10 11:57
这样做其实也是为了保证类中的域(属性)对外部的隐藏,面对对象编程中,对象自己的属性都一般都由自己负责,不会直接暴露给外部,而是提供了相应的方法,set和get方法就是这样的方法。
而楼主提到的构造方法来调用,从而实现初始化,这自然可以,但我感觉没必要的吧,为什么不直接操作呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2