2012-07-20 45 views
4

Reflexion API顯示任何Java數組類都實現接口java.lang.Cloneable和java.io.Serializable。它沒有任何成員聲明。Java Array類的成員

我的問題是:

  • 凡本 '長度' 的定義?

  • 如受保護對象的clone()與公共訪問 符使用共變返回類型(字節[]替換對象)重寫,因爲我們 可以直接把它分配給一個byte []?

  • 如果與Cloneable和Serializable的關聯(IS-A)是 定義的?

此外,byte []類的訪問說明符包含「abstract final」,它不是Java中任何類或方法的合法組合。

import java.lang.reflect.*; 

    public class ArrayExplorer { 

     public static void main(String[] args) { 
     explore("Current class:", byte[].class); 

     byte[] bytes = { 65, 'A' }; 
     System.out.println(bytes.length); 

     byte[] cloned = bytes.clone(); 
     System.out.println(cloned); 

    } 

private static void explore(String msg, Class<?> class1) { 
    if (class1 == null) 
     return; 

    System.out.println("**************************************\n" + msg 
      + Modifier.toString(class1.getModifiers()) + " " + class1); 

    // if (class1 == Object.class) 
    // return; 
    Field[] fields = class1.getDeclaredFields(); 
    for (Field field : fields) { 
     System.out.println(field); 
    } 

    Method[] methods = class1.getDeclaredMethods(); 
    for (Method method : methods) { 
     System.out.println(method); 
    } 

    explore("Superclass:", class1.getSuperclass()); 
    explore("Classes:", class1.getClasses()); 
    explore("ComponentType:", class1.getComponentType()); 
    explore("DeclaredClasses:", class1.getDeclaredClasses()); 
    explore("DeclaringClass:", class1.getDeclaringClass()); 
    explore("EnclosingClass:", class1.getEnclosingClass()); 

    if (!class1.isInterface()) { 
     explore("Interfaces:", class1.getInterfaces()); 
    } 

} 

private static void explore(String msg, Class<?>[] classes) { 
    if (classes == null || classes.length == 0) 
     return; 
    System.out.println(msg); 
    for (Class<?> class1 : classes) { 
     explore("", class1); 
    } 
    } 
    } 

回答

0

的JavaDoc

getDeclaredMethods 

返回Field對象反映此Class對象所表示的類或接口聲明的所有字段的數組。這包括公共,受保護,默認(包)訪問和專用字段,但不包括繼承字段。返回的數組中的元素沒有排序並且沒有任何特定的順序。 如果類或接口聲明不存在字段,或者此Class對象表示原始類型,數組類或void,則此方法返回長度爲0的數組。

getDeclaredMethods 

返回Field對象反映此Class對象所表示的類或接口聲明的所有字段的數組。這包括公共,受保護,默認(包)訪問和專用字段,但不包括繼承字段。返回的數組中的元素沒有排序並且沒有任何特定的順序。 如果類或接口聲明不存在字段,或者此Class對象表示原始類型,數組類或void,則此方法返回長度爲0的數組。

0

Java中的數組是一個有點像原始的:雖然有一個Array.class表示,它並沒有真正有「碼」,因爲類型是內置到語言,所以它的字段像length等不能通過反射訪問。

+0

我聽說Java的本機代碼被公開(openJDK?),我們可以在那裏找到「代碼」嗎? – 2012-07-23 05:16:06