Java反射课程教程
1為什么需要反射?(reflect)
Person p = new Student();
p在編譯時的類型是person,但是在運行時是student。
為了讓程序在運行時發現對象和類的真實信息,有兩種做法:
1,假設我們知道類的具體信息,可以通過instanceof 運算符進行判斷。
2,在編譯的時候不知道對象和類的信息,可以通過反射獲取。
三種獲取class對象的方法。
獲取Class對象第一種class.forName
獲取Class對象第二種.class
Class clazz2 = Person.class;//獲取Class對象第三種getClass()Person p = new Person();Class class3 = p.getClass();getName() :以 String 的形式返回此 Class 對象所表示的實體(類、接口、數組類、基本類型或 void)名稱。
getSimpleName() :返回源代碼中給出的基礎類的簡稱。
newInstance() :創建此 Class 對象所表示的類的一個新實例。
forName(String className) :返回與帶有給定字符串名的類或接口相關聯的 Class 對象
使用反射獲取構造器
//獲取構造器
Constructor[] cons = s.getClass().getConstructors();
for (Constructor constructor : cons) {
System.out.println(constructor);
}
使用反射獲取公共方法,注意不包括構造方法,但是包括Object中的方法
Method[] methods = clazz2.getMethods();
System.out.println(methods.length);
for (Method method : methods) {
System.out.println(method.getName());
}
使用反射獲取所有包括私有方法,注意不包括構造方法,但是不包括Object中的(繼承的)方法
使用反射獲取屬性,getFields只能獲取公共屬性
Field[] fields = clazz2.getFields();System.out.println(fields.length); 如果想獲取所有的,使用getDeclaredFields() Field[] fields = clazz2.getDeclaredFields();System.out.println(fields.length); 設置對象屬性 Student student = new Student();Field field = student.getClass().getDeclaredField("name");//field.setAccessible(true);field.set(student, "張三");System.out.println(student.getName());2創建持久層框架
/**
* 通用方法獲取對象集合
總結
以上是生活随笔為你收集整理的Java反射课程教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《编译原理》课程标准
- 下一篇: Java编程讲义之Eclipse开发工具