通過反射獲取對象的所有屬性 為什么java需要getter/setter來獲取私有屬性?
為什么java需要getter/setter來獲取私有屬性?題主好,我來回答這個問題。首先,通過g/s來獲取私有屬性的值,是javaBean規(guī)范中的一條,主要是為了把對象私有的那點(diǎn)小秘密藏起來,避免被
為什么java需要getter/setter來獲取私有屬性?
題主好,我來回答這個問題。
首先,通過g/s來獲取私有屬性的值,是javaBean規(guī)范中的一條,主要是為了把對象私有的那點(diǎn)小秘密藏起來,避免被壞人看到。
舉例說明,張三是一個對象,張三的錢包是他的一個屬性,當(dāng)然張三為了安全起見,會把錢包藏起來,只有自己能看到,也就是說,錢包是private的。張三還有個坑爹兒子:小三子。因?yàn)橛辛诵∪?,張三就需要提供一個供小三子領(lǐng)生活費(fèi)的方法,而不是直接把錢包暴露給小三子。因?yàn)?,直接暴露給小三子的話,會有以下幾個問題:
1、張三控制不住小三子拿錢,萬一拿去買了游戲皮膚就不好了;
2、張三有多少錢,都可以被小三子看到,但是很多時候,張三是不希望被小三子看到的(例如私房錢);
3、小三子長大以后給張三生活費(fèi),給了多少張三也不知道,就好像得了老年癡呆一樣。
總之,通過方法來操作屬性的根本目的就是為了保護(hù)自己的私有屬性,不被外部直接訪問。
java里一個私有的屬性如何在其他類里面進(jìn)行訪問?
非私有方法間接訪問
既然是私有屬性就不建議直接訪問的,一般會提供方法來訪問私有屬性,這樣可以在方法中對屬性的訪問做一些控制。
反射直接訪問
當(dāng)然也可以通過反射來直接訪問。
我們準(zhǔn)備一個包含私有屬性的類
然后通過反射來訪問屬性,記得一定要加aField.setAccessible(true)這句代碼,不然就不能訪問私有屬性。
不加aField.setAccessible(true)
加了aField.setAccessible(true)