2 yueqiunabanbian yueqiunabanbian 于 2014.11.30 19:27 提问

java中有关get方法的使用(具体程序分析)

最近在学习java,用的徐彩霞的java基础教程。
有个例子不太明白。
/* /注释部分的get部分有和没有结果一样,想知道为什么要用get?
又必须要用的情况吗?
刚学,懂得比较少,谢谢了~
class Person
{
private String name;
private int age;
private void talk()
{
System.out.print("I'm "+name+" and " + age+" years old");
}
public void say()
{
talk();
}
public void setName(String str)
{
name=str;
}
public void setAge(int a)
{
if(a>0)
age=a;
}
/*public String getName()
{
return name;
}
public int getAge()
{
return age;
}
/
}
public class TestPersonDemo5 {

public static void main(String[] args) 
{
    // TODO Auto-generated method stub
  Person p=new Person();
  p.setName("John");
  p.setAge(30);
  p.say();
}

}

8个回答

shizhitita
shizhitita   2014.11.30 22:38
已采纳

set和get字面理解是设置和取得,在Java中也基本就是这种意思,你可以在一个类中进行设置变量值,然后又设置get方法可以让该变量值在别处让其它的类去得到。也就是get就是给别处一个得到的方法,所以你说的删除一些不影响因为这里不是别处。如果是其它的类去取得该值没有get方法就不行了,我的理解希望帮到你。

guwei4037
guwei4037   Ds   Rxr 2014.11.30 22:22

面向对象编程告诉我们在一个类中,通过set方法设置属性的值,通过get方法获取属性的值,而不要将属性直接暴露。你可以在get方法中进行各种处理,然后得到结果。

yueqiunabanbian
yueqiunabanbian 谢谢~
大约 3 年之前 回复
u011757360
u011757360   2014.11.30 22:43

这个例子只是展示java中一个类的基本函数成员,虽然在这个例子的运行中get函数没有用,但是它代表了一种获取与封装类成员的基本方法。作为一种隐蔽函数成员与处理方式的接口,set与get系列函数是类的基本成员函数。

yueqiunabanbian
yueqiunabanbian 谢谢
大约 3 年之前 回复
wodehaoyoule
wodehaoyoule   2014.11.30 22:52

这涉及到面向对象中的封装,很多情况下一个对象的属性我们只能获取不能修改,我们只能把这个属性设置为private或者protected,但是这样的话外部连获取该属性也获取不到了。所以我们只能手动添加一个public 的get方法,利用方法来返回private属性的值。这样可以保护属性不能被外部修改。

yueqiunabanbian
yueqiunabanbian 谢谢
大约 3 年之前 回复
yueqiunabanbian
yueqiunabanbian 谢谢
大约 3 年之前 回复
zhanglj166
zhanglj166   2014.11.30 23:42

这个涉及到对象的封装,如果成员变量用private修饰 ,那么属性只能由本类进行访问,其它类是无法访问到的。如果使用默认的,或者 public可能把成员变量暴露给用户,这样不利于应用程序的安全性。那么,这时候 ,如果我们要得到内存当中成员变量的值 ,只能公开一个public的方法,因是get方法,来取得变量的值 ,保证应用程序可以正常运行。

zhanglj166
zhanglj166 回复MZY940816: 堆栈上分配内存的调用效率和在堆上分配内存的效率差太多了。虽然在堆栈上分配内存效率高,不过在堆栈上分配内存有内存泄露的问题。(这是一个平庸程序员基本解决不了的问题...)java用了一种很天才的方法提高了在堆上分配内存的效率,尽管如此,java还是慢。他不太可能达到向c++那么快,尽管他一直在承诺总有一天虚拟机会和机器码速度一样快。
大约 3 年之前 回复
MZY940816
MZY940816 你好,意思我是理解了。但请问什么叫做暴露给用户?用户指的是?不利于应用程序的安全性具体是怎样?
大约 3 年之前 回复
yueqiunabanbian
yueqiunabanbian 谢谢
大约 3 年之前 回复
zhanglj166
zhanglj166   2014.11.30 23:42

这个涉及到对象的封装,如果成员变量用private修饰 ,那么属性只能由本类进行访问,其它类是无法访问到的。如果使用默认的,或者 public可能把成员变量暴露给用户,这样不利于应用程序的安全性。那么,这时候 ,如果我们要得到内存当中成员变量的值 ,只能公开一个public的方法,因是get方法,来取得变量的值 ,保证应用程序可以正常运行。

eagleyan
eagleyan   Rxr 2014.12.01 02:54

这个问题问的很好;对于java这类oop的语言,为了封装内部状态;尽量把成员对象设成private。这样外面的程序就不能直接访问这些成员变量了。但是有的时候,外面的对象要set或者get内部变量的值,所以就产生了accessor(get方法)和modifier(set方法)。在这个例子里。貌似accessor方法没有必要,但是生成person对象的目的是为了将来能访问它,如果缺少accessor方法,将来如何访问这些成员变量呢。
再加一句,对于这个例子,设计是有问题的,首先对人的设计,普通只设计生日(生日不变的),这样生日就是final类型了。至于姓名。取决于你的姓名是否改变。理论上来说即使姓名会改变,我们最好把姓名设计成final的。这样就不需要setName和setAge方法了。而是在构造函数里面设置姓名和生日。这里追加这么一句的原因是变量的常量化很重要,尤其对多线程编程环境。

yueqiunabanbian
yueqiunabanbian 谢谢
大约 3 年之前 回复
Lyric_Liu
Lyric_Liu   2014.12.04 21:20

java面向对象,有一种叫做“私有(privat)成员变量”的结构,可以有效防止外部类的非法或非故意的调用,比如,
public class 人{
public int 年龄;
}

public class 死神{
Vector<生物> set = new Vector<生物>();
public void 杀了活的太长的生物(){
.........
}
}

大致是这个意思。。。。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!