日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java中属性是什么意思啊_Java中的字段和属性到底有什么区别?

發(fā)布時(shí)間:2023/12/8 java 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中属性是什么意思啊_Java中的字段和属性到底有什么区别? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java中的字段和屬性到底是什么?他們的含義真的是相同的嗎?如果不同,那他們到底又分別是何含義呢?

相信上面的問題,對于很多Java初學(xué)者都是相當(dāng)困惑的,但是好像把他們理解為一個(gè)含義也沒啥問題,很多Javaer也就這么放過這個(gè)問題了,但是遇到如下兩個(gè)問題,你能正確解決并給出問題出現(xiàn)的原因嗎?

先給出如下的一個(gè)JavaBean

public class UserInfoVo {

private boolean isCool;

private String Name;

private String aGe;

private String BIrthday;

private String address;

public String getaddress() {

return address;

}

public void setaddress(String address) {

this.address = address;

}

public boolean isCool() {

return isCool;

}

public void setCool(boolean cool) {

isCool = cool;

}

public String getName() {

return Name;

}

public void setName(String name) {

Name = name;

}

public String getaGe() {

return aGe;

}

public void setaGe(String aGe) {

this.aGe = aGe;

}

public String getBIrthday() {

return BIrthday;

}

public void setBIrthday(String BIrthday) {

this.BIrthday = BIrthday;

}

}

問題一

假設(shè)我們現(xiàn)在要在spring的配置文件中配置上述JavaBean的一個(gè)實(shí)例,如下。暫時(shí)不設(shè)置除Id外其他屬性值。

當(dāng)我們啟動(dòng)spring容器時(shí),我們將得到如下錯(cuò)誤,這個(gè)錯(cuò)誤具有很強(qiáng)的誤導(dǎo)性,明明類中定義了aGe,也提供了setter方法,為什么報(bào)錯(cuò)說找不到?

問題二

在使用JSP的時(shí)候,頁面返回ModelAndView,且返回一個(gè)UserInfo實(shí)例類,在JSP頁面中使用isCool時(shí),頁面報(bào)錯(cuò)說找不到,或者返回json數(shù)據(jù)時(shí)。

企業(yè)微信截圖_0bb7396f-fbb9-4296-8a99-b5fc7957d44d.png

解決方案

很多有經(jīng)驗(yàn)的Javaer對于上述兩個(gè)問題都能很好的解決,但很少有人能給出問題出現(xiàn)的原因。這里我們也先給出這兩個(gè)問題的解決方案,之后再給出問題出現(xiàn)的原因。

字段名的前兩個(gè)字母要么全大寫,要么全小寫

boolen類型的字段不要以is開頭(這里阿里巴巴的開發(fā)者手冊也重點(diǎn)強(qiáng)調(diào)了)

問題出現(xiàn)的原理

對于這兩個(gè)問題出現(xiàn)的原理,歸根結(jié)底就是開發(fā)者對于Java中字段和屬性的含義模糊不清導(dǎo)致的。

字段

Java中字段的含義就是Java類中定義的成員變量,可以通過Java的反射機(jī)制獲取所有的字段名,Class#getFields()方法或者Class#getDeclaredFields()方法,這里可以看出field其實(shí)就是字段的意思。

屬性

Java中的屬性,其實(shí)是相對于JavaBean來說的。所以在Java中,正確的說法應(yīng)該是JavaBean中有XXX屬性,Java類中有OOO字段或成員變量。屬性的英文翻譯是property

BeanInfo beanInfo = Introspector.getBeanInfo(UserInfo.class);

PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {

System.out.println(propertyDescriptor.getName());

}

如上代碼就會(huì)輸出UserInfo類對應(yīng)的JavaBean的所有屬性名

輸出結(jié)果

可以看出一共有class、cool、dizhi、id四個(gè)屬性,其中class屬性我們暫時(shí)先不管。在XML中的配置或者JSP頁面以及JSON序列化,其實(shí)都是使用的JavaBean的屬性,而不是Java中定義的字段。那么對于前面說的兩個(gè)問題也就很容易解釋了。對于問題一,我們在XML中配置了iD值,但JavaBean中確實(shí)是沒有這個(gè)屬性的,只有id屬性。對于問題二也是一樣,JavaBean中只有cool屬性。

總結(jié)

在Java中很少有直接操作類字段的情況,大部分都是操作JavaBean的屬性,所以要了解好屬性名的規(guī)則,牢記上面的解決方案,真不小心遇到問題,知道了背后的原理,相信也會(huì)很容易解決的。

JavaBean的屬性名其實(shí)就是Java類中定義的setter或者getter方法名,去掉set或者get或者is得到的字符串,判斷首字母是否是小寫,如是,則該字符串就是屬性名,否則再判斷第二個(gè)字母是否是大寫,如是,則該字符串就是屬性名,否則將首字母小寫得到的名稱就是屬性名,比如getDizhi()方法屬性名就是dizhi,getdizhi()方法屬性名也是dizhi,getdIzhi()方法屬性名就是dIzhi,getDIzhi()方法屬性名就是DIzhi,其中bool類型的屬性的get方法名不是以get開頭,而是以is開頭。對于只有g(shù)et或者只有set方法的屬性,我們就說他是只讀或只寫屬性。之所以規(guī)定Java的字段定義不準(zhǔn)以is開頭且首兩個(gè)字母要么都大寫要么都小寫,就是為了讓JavaBean的屬性名與字段名一致,這樣對于初學(xué)者就不會(huì)造成一定的困惑,即是不了解也能正常使用。

總結(jié)

以上是生活随笔為你收集整理的java中属性是什么意思啊_Java中的字段和属性到底有什么区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。