Java封裝和反射是Java語言中非常重要的兩個(gè)概念,封裝是對類中的屬性和方法進(jìn)行訪問權(quán)限限制,以保證程序的穩(wěn)定性和安全性,反射則是動(dòng)態(tài)獲取和操作類的方法和屬性。
Java中的封裝主要通過private、protected、public這三種修飾符來實(shí)現(xiàn)。其中private修飾的方法或?qū)傩灾荒茉陬悆?nèi)部訪問,該類的外部調(diào)用者無法訪問;protected關(guān)鍵字修飾的方法或?qū)傩钥梢栽谠擃惢蛟擃惖淖宇愔性L問,并且該類的外部調(diào)用者也無法訪問;public修飾符則表示該方法或?qū)傩钥梢员蝗魏晤愒L問。
public class Person { private String name; protected int age; public String address; private void setName(String newName) { name = newName; } protected void setAge(int newAge) { age = newAge; } public void setAddress(String newAddress) { address = newAddress; } }
而反射則是對類進(jìn)行動(dòng)態(tài)操作的一種方式,它可以在程序運(yùn)行時(shí)動(dòng)態(tài)獲取和操作類的方法和屬性。Java中的反射主要通過Class類來實(shí)現(xiàn),通過Class類的getMethods()和getFields()方法可以獲取該類所包含的所有公共方法和屬性。然后可以通過Method類和Field類來動(dòng)態(tài)操作這些方法和屬性。
public class ReflectDemo { public static void main(String[] args) throws Exception { Class cls = Person.class; Method setNameMethod = cls.getDeclaredMethod("setName", String.class); Method setAgeMethod = cls.getDeclaredMethod("setAge", int.class); Field addressField = cls.getDeclaredField("address"); Person person = new Person(); setNameMethod.invoke(person, "Tom"); setAgeMethod.invoke(person, 20); addressField.set(person, "China"); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); System.out.println("Address: " + person.address); } }
總之,Java封裝和反射是Java語言中非常重要的概念。封裝可以保證程序的穩(wěn)定性和安全性,而反射則可以在運(yùn)行時(shí)動(dòng)態(tài)獲取和操作類的方法和屬性。掌握這兩個(gè)概念對于Java程序員來說是非常重要的。