java - Java数组类的成员

标签 java

Reflexion API 表明任何 Java 数组类都实现接口(interface) java.lang.Cloneable 和 java.io.Serializable。它没有声明任何成员。

我的问题是:

  • 这个“长度”是在哪里定义的?

  • 其中 protected 对象 clone() 被公共(public)访问覆盖 使用协变返回类型(byte[] 替换 Object)的说明符,因为我们 可以直接赋值给一个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文档

getDeclaredMethods

返回一个 Field 对象数组,反射(reflect)由该 Class 对象表示的类或接口(interface)声明的所有字段。这包括公共(public)、 protected 、默认(包)访问和私有(private)字段,但不包括继承字段。返回的数组中的元素未排序且未按任何特定顺序排列。 如果类或接口(interface)未声明任何字段,或者如果此 Class 对象表示基本类型、数组类或 void,则此方法返回长度为 0 的数组。

getDeclaredMethods

返回一个 Field 对象数组,反射(reflect)由该 Class 对象表示的类或接口(interface)声明的所有字段。这包括公共(public)、 protected 、默认(包)访问和私有(private)字段,但不包括继承字段。返回的数组中的元素未排序且未按任何特定顺序排列。 如果类或接口(interface)未声明任何字段,或者如果此 Class 对象表示基本类型、数组类或 void,则此方法返回长度为 0 的数组。

关于java - Java数组类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11573128/

相关文章:

Java - 调整字体大小以适应区域

java - 使用 JComboBox 在 JEditorPane 中设置所选文本的字体大小

java - 对齐 TableViewer 和 TreeViewer

java - Spring data JPA中findBy和findOneBy的区别

java - 使用可执行 Jar 文件时如何设置 Java 参数

java - 执行两个或多个算法的策略模式

java - Ren'py启动器: "Cannot find Java SE Runtime environment"

java - 尝试从 java 代码生成 WADL 时,intellij IDEA 抛出 NoSuchMethodError

java - 对于 Jersey/JAXB,是否可以使用与 'parent' 和 'child' 相同的 POJO,但在用作 'child' 时删除某些属性?

java - @ManyToOne 在启用 Hibernate 二级缓存时延迟加载失败