属性名前两个字母要么都是大写的要么都是小写的(当然数字与_、$算小写)

关于属性名

“属性名前两个字母要么都是大写的 要么都是小写的”。。。。。。

为什么这么说呢?仅仅是因为规范么?人生若只如初见该多好,那就挺听一个对java的初见小菜鸟根据感受娓娓道来吧。。。。

 

刚开始接触java时认为声明的全局变量就是对象的属性,当然这也是最初的定义,老师刚开始也这么讲。于是通过对属性的赋值操作来改变对象的状态。

当然没过多久,就明白了面向对象的一个特性--》封装性。这时才明白,不能像之前那么随心所遇的改变对象的状态了,要通过gettersetter 进行对应的访问,当然这也是必须的,因为没有对象愿意把自己的隐私全部暴露出来,没有哪个Person类的对象愿意把性别设置成 男、女之外其他的什么。。。

再后来,便一步步陷入java的深渊,开始解除令人惊叹不已的反射机制了,这也算是java作为强大的动态语言的根本所在吧。我们可以在运行时对内存中的对象一览无余,当然也是因为内存中有他对应的类的Class实例,也就对他的类结构了如指掌了。 

甚至可以获取、操作私有的结构,包括私有化的属性,记得有一个好问的同学说了一句: ‘我们就这么就获取到了千辛万苦私有化的属性,这不违背了封装性了’。不错如果真 的直接这样对属性进行赋值了,的确是违背了封装性,数据又不安全了。

但是反射机制是无法避免的,虽然对象不小心暴露他的这些隐私了,但是我们可以装作不知道么,最起码尊重一下他人,当然这也是最安全的做法,没准稍微好奇一下他就或死或残了呢。所以我们可以继续装作获取不到这些属性,可以按照封装性的思想继续通过getter setter访问不是极好么?

所以到现在学到一些框架、工具等对象,发现大量的反射,对属性的操作当然也是通过getter setter访问比较安全。 所以到这个阶段所说的属性基本上就指的是通过getter setter方法来定义的属性 比如 setAge() 属性就是age  setNumber() 属性就是number

最初大家都知道,getter setter 前三个字母之后,第一个字母小写,这便是属性名了, 但是如果想定义了两个字段名是iDCard IDcard。他们的setter岂不是一样了, 产 生了混淆。同样idCardIdCard 根据setter方法也产生了混淆。因为长得一 样, 但是java只能做一个决定。所以通过这种setter方法定义的属性名只能返回一种, 具 体怎么返回,源码规则是这样的:

if (str == null || str.length() == 0) {

return str;

}

if (str.length() > 1 && Character.isUpperCase(str.charAt(1))

&& Character.isUpperCase(str.charAt(0))) {

return str;

} else {

char ca[] = str.toCharArray();

ca[0] = Character.toLowerCase(ca[0]);

return new String(ca);

}

就是说,如果set后前两个字母都大写,那么属性值原样返回,否则将首字母小写返回。这样的结果就是要么前两个字母都大写,要么都小写。所以有了那句话,“属性名前两个字母要么都是大写 要么都是小写”,所以为了避免字段与属性的混淆,我们在字段的命名上也尽量按照这一规则。在使用反射时,也要根据setter/getter赋值与取值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值