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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java反射课程教程

發布時間:2024/1/23 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java反射课程教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1為什么需要反射?(reflect)
Person p = new Student();

p在編譯時的類型是person,但是在運行時是student。

為了讓程序在運行時發現對象和類的真實信息,有兩種做法:
1,假設我們知道類的具體信息,可以通過instanceof 運算符進行判斷。
2,在編譯的時候不知道對象和類的信息,可以通過反射獲取。

三種獲取class對象的方法。
獲取Class對象第一種class.forName

try {Class clazz1 = Class.forName("com.aaa.entity.Person");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}

獲取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中的(繼承的)方法

Method[] methods2 = clazz2.getDeclaredMethods();System.out.println(methods2.length);for (Method method : methods2) {System.out.println(method.getName());}

使用反射獲取屬性,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創建持久層框架
/**
* 通用方法獲取對象集合

public static List selectObjList(String sql,Object[] params,Class clazz) throws Exception{List list = new ArrayList();con = getConnection();try {ps = con.prepareStatement(sql);setParams(params);rs = ps.executeQuery();//列數ResultSetMetaData rsm = rs.getMetaData();int count = rsm.getColumnCount();//獲取列數while(rs.next()){Object obj = clazz.newInstance();//實例化一個對象for(int i=1;i<=count;i++){String key = rsm.getColumnName(i);//獲取列名Object value = rs.getObject(i);//獲取對應列的值Field field = clazz.getDeclaredField(key);//獲取對象的成員變量(字段名)field.setAccessible(true);//設置可訪問if(value!=null){field.set(obj, value);}}list.add(obj);}} catch (SQLException e) {e.printStackTrace();}finally{closeAll();}return list;}

總結

以上是生活随笔為你收集整理的Java反射课程教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。