我的java學習筆記(12)關於反射(part 1)

來源:互聯網
上載者:User

標籤:虛擬機器   java   反射   異常   

1.能夠分析類能力的程式稱為反射。

2.在程式運行期間,java運行時系統始終為所有的對象維護一個被稱為運行時的類型標識。這個資訊跟蹤著每個對象所屬的類。虛擬機器利用運行時類型資訊選擇相應的方法執行。

3.這些儲存資訊的類被稱為Class。

4.Object類中的getClass()方法將會返回一個Class類型的執行個體。

String s = "hello";Class c1 = s.getClass();

5.如果類在一個包裡,包的名字也作為類名的一部分。

6.獲得類名的三種方法

    a.

Date d = new Date();Class c1 = d.getClass();String name = v1.getName();

   

  b.

String className = "java.util.Date";//這裡字串中儲存必須為類名或介面名Class c1 = Class.forName(className);String name = c1.getName();


     c.

Class c1 = String.class;string name = c1.getName();

7.一個Class對象實際上表示的是一個類型,而這個類型未必一定是一種類。例如,int不是類,但是int.class是一個Class類型的對象。

8.虛擬機器為每個類型管理一個Class對象。

9.newInstance方法可以建立一個執行個體對象,但注意該方法返回的是Object類型。

10.當程式運行過程中發生錯誤是,就會“拋出異常”。拋出異常比終止程式要靈活的多,這是因為可以提供一個“捕獲”異常的處理器對異常情況進行處理。

11.異常有兩種類型:未檢出異常和已檢查異常。

12.將可能拋出已檢查異常的一個或多個方法調用代碼放在try塊中,然後在catch子句中提供處理代碼。

try{    ...}catch(Exception e){    e.printStrackTrace();}

13.在java.lang.reflect包中有三個類Field、Method和Constuctor分別用於描述類的域、方法和構造器。三個類都有一個getName的方法,來返回項目的名稱。

14.Field類有一個getType方法,用來返回描述域所屬類型的Class對象。

15.Class類中的getFields、getMethods和getConstructors方法將分別返回類提供的public域、方法和類。

16.Class類中的getDeclaredFields、getDeclaredMethods和getDeclaredConstructors方法將分別返回類提供的全部域、方法和類。

執行個體代碼

import java.util.*;import java.lang.reflect.*;public class test {public static void main(String[] args){String name;Scanner in = new Scanner(System.in);System.out.println("請輸入類名:");name = in.next();try{Class c1 = Class.forName(name);Class superc1 = c1.getSuperclass();String modifiers = Modifier.toString(c1.getModifiers());if(modifiers.length() > 0)System.out.println(modifiers + " ");System.out.print("Class " + name);if(superc1 != null && superc1 != Object.class)System.out.println(" extends " + superc1.getName());System.out.print("\n{\n");printConstructors(c1);System.out.println();printMethods(c1);System.out.println();printFields(c1);System.out.println("}");}catch(ClassNotFoundException e){e.printStackTrace();}System.exit(0);}public static void printConstructors(Class c1){Constructor[] con = c1.getDeclaredConstructors();for(Constructor c : con){String name = c.getName();System.out.print("   ");String modifiers = Modifier.toString(c.getModifiers());if(modifiers.length() > 0)System.out.print(modifiers + " ");System.out.print( name + "(");Class[] paramType = c.getParameterTypes();for(int i = 0;i < paramType.length; i++){if(i > 0)System.out.print(",");System.out.print(paramType[i].getName());}System.out.println(")");}}public static void printMethods(Class c1){Method[] methods = c1.getDeclaredMethods();for(Method m : methods){Class retType = m.getReturnType();String name = m.getName();System.out.print("   ");String modifiers = Modifier.toString(m.getModifiers());if(modifiers.length() > 0)System.out.print(modifiers + " ");System.out.print(retType.getName() + " " + name + "(");Class[] paramTypes = m.getParameterTypes();for(int i = 0; i < paramTypes.length;i++){if(i > 0)System.out.print(",");System.out.print(paramTypes[i].getName());}System.out.println(")");}}public static void printFields(Class c1){Field[] fields = c1.getDeclaredFields();for(Field f:fields){Class type = f.getType();String name = f.getName();System.out.print("   ");String modifiers = Modifier.toString(f.getModifiers());if(modifiers.length() > 0)System.out.print(modifiers + " ");System.out.print(type.getName() + " " + name);}}}



輸出結果


請輸入類名:
java.lang.String
public final 
Class java.lang.String
{
   public java.lang.String([B,int,int)
   public java.lang.String([B,java.nio.charset.Charset)
   public java.lang.String([B,java.lang.String)
   public java.lang.String([B,int,int,java.nio.charset.Charset)
   public java.lang.String([B,int,int,java.lang.String)
   java.lang.String([C,boolean)
   public java.lang.String(java.lang.StringBuilder)
   public java.lang.String(java.lang.StringBuffer)
   public java.lang.String([B)
   public java.lang.String([I,int,int)
   public java.lang.String()
   public java.lang.String([C)
   public java.lang.String(java.lang.String)
   public java.lang.String([C,int,int)
   public java.lang.String([B,int)
   public java.lang.String([B,int,int,int)


   public boolean equals(java.lang.Object)
   public java.lang.String toString()
   public int hashCode()
   public int compareTo(java.lang.String)
   public volatile int compareTo(java.lang.Object)
   public int indexOf(java.lang.String,int)
   public int indexOf(java.lang.String)
   public int indexOf(int,int)
   public int indexOf(int)
   static int indexOf([C,int,int,[C,int,int,int)
   static int indexOf([C,int,int,java.lang.String,int)
   public static java.lang.String valueOf(int)
   public static java.lang.String valueOf(long)
   public static java.lang.String valueOf(float)
   public static java.lang.String valueOf(boolean)
   public static java.lang.String valueOf([C)
   public static java.lang.String valueOf([C,int,int)
   public static java.lang.String valueOf(java.lang.Object)
   public static java.lang.String valueOf(char)
   public static java.lang.String valueOf(double)
   public char charAt(int)
   private static void checkBounds([B,int,int)
   public int codePointAt(int)
   public int codePointBefore(int)
   public int codePointCount(int,int)
   public int compareToIgnoreCase(java.lang.String)
   public java.lang.String concat(java.lang.String)
   public boolean contains(java.lang.CharSequence)
   public boolean contentEquals(java.lang.CharSequence)
   public boolean contentEquals(java.lang.StringBuffer)
   public static java.lang.String copyValueOf([C)
   public static java.lang.String copyValueOf([C,int,int)
   public boolean endsWith(java.lang.String)
   public boolean equalsIgnoreCase(java.lang.String)
   public static transient java.lang.String format(java.util.Locale,java.lang.String,[Ljava.lang.Object;)
   public static transient java.lang.String format(java.lang.String,[Ljava.lang.Object;)
   public void getBytes(int,int,[B,int)
   public [B getBytes(java.nio.charset.Charset)
   public [B getBytes(java.lang.String)
   public [B getBytes()
   public void getChars(int,int,[C,int)
   void getChars([C,int)
   private int indexOfSupplementary(int,int)
   public native java.lang.String intern()
   public boolean isEmpty()
   public static transient java.lang.String join(java.lang.CharSequence,[Ljava.lang.CharSequence;)
   public static java.lang.String join(java.lang.CharSequence,java.lang.Iterable)
   public int lastIndexOf(int)
   public int lastIndexOf(java.lang.String)
   static int lastIndexOf([C,int,int,java.lang.String,int)
   public int lastIndexOf(java.lang.String,int)
   public int lastIndexOf(int,int)
   static int lastIndexOf([C,int,int,[C,int,int,int)
   private int lastIndexOfSupplementary(int,int)
   public int length()
   public boolean matches(java.lang.String)
   private boolean nonSyncContentEquals(java.lang.AbstractStringBuilder)
   public int offsetByCodePoints(int,int)
   public boolean regionMatches(int,java.lang.String,int,int)
   public boolean regionMatches(boolean,int,java.lang.String,int,int)
   public java.lang.String replace(char,char)
   public java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
   public java.lang.String replaceAll(java.lang.String,java.lang.String)
   public java.lang.String replaceFirst(java.lang.String,java.lang.String)
   public [Ljava.lang.String; split(java.lang.String)
   public [Ljava.lang.String; split(java.lang.String,int)
   public boolean startsWith(java.lang.String,int)
   public boolean startsWith(java.lang.String)
   public java.lang.CharSequence subSequence(int,int)
   public java.lang.String substring(int)
   public java.lang.String substring(int,int)
   public [C toCharArray()
   public java.lang.String toLowerCase(java.util.Locale)
   public java.lang.String toLowerCase()
   public java.lang.String toUpperCase()
   public java.lang.String toUpperCase(java.util.Locale)
   public java.lang.String trim()


   private final [C value   private int hash   private static final long serialVersionUID   private static final [Ljava.io.ObjectStreamField; serialPersistentFields   public static final java.util.Comparator CASE_INSENSITIVE_ORDER}

我的java學習筆記(12)關於反射(part 1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.