java类中的get,set属性的作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java类中的get,set属性的作用相关的知识,希望对你有一定的参考价值。

javabean中一般都要写get set属性,我知道可以对数据进行存取操作,
我的问题是如果在public的类中定义了一个private的变量,又写了public的get set属性
getreturn m;
setm=value;只是这样对数据存取并没有对数据进行处理,那么以上这种情况和在类中定义一个public的变量但不写此变量的get set属性有什么区别

已下是我的理解,我用例子说明一下
private int m;
public int getM()
return m;

public void setM(int value)
m=value;

private的作用范围是自己本身这个.java文件,这样如果我不写get,set方法,那么其他类就无法操作m。如果像上面的例子,直接写成public int m
没什么大区别。
但是,如果我要在类取值的时候做一些操作,比如
public int getM()
return m+1;

public void setM(int value)
m=value+1;

这样就不一样了。
而且越学到后面,就会越觉得这样的写法很好。
比如用Struts的时候,我们前台传数据给后台,以前赋值要自己用set方法手动设值,如果按我这样规范命名,默认数据就会写到m中。
这其实也是一个规则吧。
不知道我这样说算不算准确。
参考技术A 哈,你能想到这个,说明你还是个肯动脑子的。
就我的理解,来分享一下吧:
1 首先JavaBean是有这个规定,所有的属性都要为私有,然后用get、set方法来存取,很多其他类使用JavaBean时,会根据get、set方法来做操作。
2 使用get、set的一个原因是:你将来可能要对所存取的对象,做一些改变,那么,如果直接引用了该对象,将来改起来,使用过这个类的对象,都要进行修改。如果用了get、set方法,那么就只要在这两个方法里面修改了,不会影响到使用这个类的其他对象。
3 很多人使用get方法时,是错误的。比如有一个private属性a,很多人在get方法里就直接像这样返回a“return a”,结果辛辛苦苦弄的private完全失效了,别人只要使用get方法,就完全可以修改这个属性。所以最好的返回这个a拷贝,以避免其状态被外人修改。如果需要修改状态,一律从set方法这个入口进去。
参考技术B 首先 public的变量 是不可行的,面向对象的重点就是 封装,就是不让别人看到你的东西 , 你的类提供的只是 public 的接口方法 , 这样的好处就是,你的内部实现可以随你修改,只要接口的 形参,返回不改, 别人调用你的接口,就完全不需要修改。

至于为什么要这么写 ,我的理解是,如前面一个人讲struts 会自动赋值;还有就是 程序的方法的功能要尽量的单一化,有助于以后的维护以及修改,还有你是可以修改 get set的实现方式的,而且此处一修改,所有的引用的都会起作用,完全不需要你一处一处的去查找修改。比如 getMm=*** return m。
参考技术C 这是javabean的规范,如在jsp中使用EL,比如你写了一个$a.name,它就会利用反射机制,调用a对象的getName方法得到返回值。还有其他各种各样的框架,如hibernate,它持久对象属性的提取,设置,就是根据public的get,set方法。
这是约定俗称的东西,没必要深究
参考技术D 这说到底是一个思维习惯的问题,JavaBean是有其规范的,其中get和set方法是其显著的特征

反射怎么获取类属性类型

有一个类: class People public int ID get; set; public string Name get; set; public bool Register set; get; public float Gold get; set; 我怎么通过反射获取每一个属性的类型,是Int型的,还是string型的还是float型的,我主要想实力话这个类的时候,初始化这些值,string 为Empty,Int为0.

参考技术A 反射可以获取到属性类型,Field类里面有个方法,getType()就是获取属性类型的。。。
下面是个示例代码。。。
public
static
void
main(String
args[])

People
peo
=
new
People();
Class
cla
=
People.class;
try

Field[]
fields
=
cla.getFields();
for(Field
field:fields)
Class
c
=
field.getType();
if(c==String.class)
field.set(peo,
"EMPTY");
else
if(c==Integer.class)
field.set(peo,
0);



catch
(SecurityException
e)

//
TODO
Auto-generated
catch
block
e.printStackTrace();
catch
(IllegalArgumentException
e)

//
TODO
Auto-generated
catch
block
e.printStackTrace();

catch
(IllegalAccessException
e)

//
TODO
Auto-generated
catch
block
e.printStackTrace();


主要就是用Class
c
=
field.getType();
这个来获取类型。。。。
希望能帮到你。。。仍有问题可以Hi我。。。或者直接追问。。。

以上是关于java类中的get,set属性的作用的主要内容,如果未能解决你的问题,请参考以下文章

java如何在自动生成的实体类中添加属性及其get、set方法

Java中的get()和set()

c#如何在父类(或是接口)当中定义一个子类必须要重写的字段(属性)?

反射怎么获取类属性类型

反射怎么获取类属性类型

java基础笔记----面向对象的三大特性