簡體   English   中英

Java數組類的成員

[英]Members of Java array class

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

我的問題是:

  • 這個“長度”的定義是什么?

  • 使用共變量返回類型(byte []替換Object)使用公共訪問說明符覆蓋受保護的Object 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);
    }
    }
  }

java中的數組有點像基元:雖然有一個Array.class來表示它,但它並沒有真正的“代碼”,因為類型是直接構建在語言中的,因此它的字段如length等等。通過反思可以訪問。

的JavaDoc

getDeclaredMethods

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

getDeclaredMethods

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM