標籤:system 構造方法 [] field類 位元組碼 執行個體 使用方法 建立對象 point
1、得到各個位元組碼對應的執行個體對象(Class類型)的三種方式,樣本如下:
類名.class,比如,System.class
對象.getClass(),比如,new Date().getClass()
Class.forName("類名"),比如,Class.forName("java.util.Date")
2、Constructor類的使用,Constructor類代表某個類中的一個構造方法
得到某個類所有的構造方法:
Constructor[] constructors=Class.forName("java.lang.String").getConstructors();
得到某一個構造方法:
Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);
建立執行個體對象:
普通方式:
String str=new String(new StringBuffer("abc"));
使用反射:
Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);
String str1=(String) constructor.newInstance(new StringBuffer("abc"));
直接使用Class.newInstance()方法:
String str2=(String)Class.forName("java.lang.String").newInstance();
該方法內部是先得到預設的構造方法,然後用該構造方法建立對象執行個體
3、Field類代表某個類中的一個成員變數,使用方法如下:
class Point{ public int x; private int y; public Point() {} public Point(int x,int y){ this.x=x; this.y=y; }}public class Demo01 { public static void main(String[] args) throws Exception { Point point=new Point(1,2); Field xField=Class.forName("com.ly.java.enhance.reflection.Point").getField("x"); System.out.println(xField.get(point));
//得到私人屬性 Field yField=Class.forName("com.ly.java.enhance.reflection.Point").getDeclaredField("y"); yField.setAccessible(true); System.out.println(yField.get(point)); }}
4、Method類代表某個類中的一個成員方法,使用方法如下:
得到類中的某一個方法:
Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class);
調用類中的某一個方法:
String str="abc";
普通方式:System.out.println(str.charAt(1));
使用反射:
Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class);
System.out.println(charAt.invoke(str, 1));
java進階三:反射