Java数组类的成员

Java数组类的成员,java,Java,反射API显示,任何Java数组类都实现了接口Java.lang.Cloneable和Java.io.Serializable。它没有声明任何成员 我的问题是: 该“长度”的定义在哪里 其中受保护的对象克隆()被公共访问覆盖 使用共同变量返回类型(字节[]替换对象)的说明符 是否可以直接将其分配给字节[] 其中,与可克隆和可序列化的关联(IS-A)为 定义 byte[]类的访问说明符还包含“abstract final”,它不是Java中任何类或方法的合法组合 import java

反射API显示,任何Java数组类都实现了接口Java.lang.Cloneable和Java.io.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);
    }
    }
  }
import java.lang.reflect.*;
公共类ArrayExplorer{
公共静态void main(字符串[]args){
探索(“当前类:”,字节[]。类);
字节[]字节={65,'A'};
System.out.println(字节.长度);
byte[]克隆=bytes.clone();
System.out.println(克隆);
}
私有静态void explore(字符串msg,类class1){
if(class1==null)
返回;
System.out.println(“***************************************************************\n”+消息
+toString(class1.getModifiers())+“”+class1);
//if(class1==Object.class)
//返回;
Field[]fields=class1.getDeclaredFields();
用于(字段:字段){
系统输出打印项次(字段);
}
方法[]methods=class1.getDeclaredMethods();
用于(方法:方法){
系统输出打印LN(方法);
}
探索(“超类:,class1.getSuperclass());
探索(“Classes:,class1.getClasses());
探索(“ComponentType:,class1.getComponentType());
探索(“DeclaredClasses:,class1.getDeclaredClasses());
探索(“DeclaringClass:,class1.getDeclaringClass());
探索(“封闭类:”,class1.getEnclosuringClass());
如果(!class1.isInterface()){
探索(“接口:”,class1.getInterfaces());
}
}
私有静态void explore(字符串消息,类[]类){
if(classes==null | | classes.length==0)
返回;
System.out.println(msg);
用于(类别1:类别){
探索(“,1类);
}
}
}

java中的数组有点像原语:虽然有一个
数组.class
来表示它,但它实际上没有“code”,因为类型是直接构建在语言中的,所以它的
长度
等字段不能通过反射访问。

getDeclaredMethods
返回字段对象数组,该数组反映由该类对象表示的类或接口声明的所有字段。这包括公共、受保护、默认(包)访问和私有字段,但不包括继承的字段。返回的数组中的元素没有排序,也没有任何特定的顺序如果类或接口未声明任何字段,或者如果此类对象表示基元类型、数组类或void,则此方法返回长度为0的数组。

getDeclaredMethods

返回字段对象数组,该数组反映由该类对象表示的类或接口声明的所有字段。这包括公共、受保护、默认(包)访问和私有字段,但不包括继承的字段。返回的数组中的元素没有排序,也没有任何特定的顺序如果类或接口未声明任何字段,或者如果此类对象表示基元类型、数组类或void,则此方法返回长度为0的数组。

我听说Java(openJDK?)公开了本机代码,我们能在那里找到“代码”吗?
getDeclaredMethods