黑馬程式設計師Java培訓和Android培訓_java高新技術(一)
反射技術:
反射就是把java類中的各種成分對映成相應的java類。比如類中的屬性,方法,包名,建構函式。都回獨立成一個個相應的物件。主用應用於框架開發。
反射技術的基礎Class類,獲得位元組碼的方式有三種:1. Class cls = 類名.class;2. Class cls2 = Class.forName(“類名”);3. Class cls3 = new 類名().getClass();對於每一個型別都有他的Class例項物件,可以通過isPrimivitre(是否是原始型別)和isArray判斷是什麼型別。對於一個裝箱類可以通過 類名.TYPE 獲得它的基本資料型別.
構造方法反射的應用,獲得所有建構函式:Constructor cons[] = Class.forName(“java.lang.String”).getConstructors();獲得一個建構函式並例項一個物件(反射):Constructor constructor = Class.forName(“java.lang.String”).getConstructors(StringBuffer.class); String str = (String)constructor.newInstance(new StringBuffer(“abc”));使用預設建構函式例項一個物件可簡寫為:String str = String.class.newInstance()。
類成員變數反射的應用,對公有的成員變數:Field field = 物件名.getClass().getFiled(“欄位名”);欄位的值 = field.get(物件名);對私有的成員變數:Field field = 物件名.getClass().getDeclaredFiled(“欄位名”);field.setAccessible(true);欄位的值 = field.get(物件名);filed是一個類變數,不是物件變數。
類成員方法反射的應用,獲得方法:Method 方法名 = 類名.calss.getMethod(“方法名”,引數型別);例:Method mothodchatAt = String.class.getMethod(”chatAt”,int.class);呼叫方法:方法名.invoke(呼叫方法的物件,引數);例:String str = mothodchatAt.invoke(new String(“abc”),1);如果呼叫方法的物件為null說明這個方法為靜態方法。
package com.itcast.d23;
import java.lang.reflect.Method;
public class ReflectMethod {
public static void main(String[] args) throws Exception {
String startingClassName = "com.itcast.d23.TestReflect";
Method mainMethod = Class.forName(startingClassName).getMethod("test", String.class);
TestReflect tr = new TestReflect();
mainMethod.invoke(tr, "haha");
}
}
class TestReflect{
public void test(String str){
System.out.println(str);
}
}
陣列與Object的關係及其反射型別,陣列的位元組碼因維數和陣列的型別改變。Arrays工具類的asList方法可以把陣列轉成List輸出list列印所有元素。基本資料型別陣列除外,因為asList的傳入引數是Object陣列,基本資料型別不屬於Object。
陣列反射的應用,使用isArray判是否是一個陣列,java.lang.reflect.Array是陣列的反射類,array.getLength(陣列物件)獲得陣列的長度,array.get(陣列物件,索引)獲得指定索引的值。
ArrayList、HashSet的比較和HashCode的分析,ArrayList是有序的,HashSet是無序的,HashSet通過HashCode算出物件的雜湊碼,通過雜湊碼能夠快速的查詢到一個物件。儲存到HashSet中的物件不能在HashSet中修改,否則可能會照成記憶體洩漏,因為物件修改了,HashCode算出來的雜湊碼可能與修改前的不相同了。
javaBean是一種特殊的java類,主要用於傳遞資訊。
javaBean內省的操作:
PersonBean pb = new PersonBean("cc",22);
String propertyName = "name";
PropertyDescriptor pd = new PropertyDescriptor(propertyName, pb.getClass());
// 獲得寫方法
Method methodSetName = pd.getWriteMethod();
methodSetName.invoke(pb,value);
Method methodGetName = pd.getReadMethod();
Object retVal = methodGetName.invoke(pb);
使用BeanUtils工具包: (前提是匯入了BeanUtils相關的包)
PersonBean pb = new PersonBean("cc",22);
// 可以是一個級聯的變數
String propertyName = "name";
// 以字串的方式處理引數
//retVal = BeanUtils.getProperty(pb, propertyName);
// 以原型別處理引數
retVal = PropertyUtils.getProperty(pb, propertyName);
相關文章
- 黑馬程式設計師Java培訓和Android培訓Java技術二程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:培訓前奏程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:列舉程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:I/O程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓_IO(二)程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:程式設計基礎程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:物件導向程式設計師JavaAndroid物件
- 黑馬程式設計師Java培訓和Android培訓:內部類程式設計師JavaAndroid
- 黑馬程式設計師Java培訓和Android培訓:多執行緒程式設計師JavaAndroid執行緒
- 黑馬程式設計師Java培訓和Android培訓Java GUI圖形使用者介面程式設計師JavaAndroidGUI
- Java程式設計師技術培訓需要培訓哪些?Java程式設計師
- 黑馬程式設計師——Java高新技術---反射程式設計師Java反射
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 黑馬程式設計師_Java高新技術之列舉程式設計師Java
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 黑馬程式設計師--java高新技術 25--列舉,反射程式設計師Java反射
- 長沙Java培訓:自學Java程式設計有必要報培訓班麼?Java程式設計
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓Java容器類List和Set分析程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- Java程式設計師培訓班哪家比較好Java程式設計師
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- java培訓分享:java培訓架構師學習線路圖Java架構
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- Java培訓:長沙Java培訓機構排名Java
- Java培訓技術能過關嗎Java
- “達內”JAVA技術培訓有感(二)Java
- 好程式設計師Java培訓分享int和Integer的區別程式設計師Java