Основы Java (10) Типы массивов

Java задняя часть WeChat

1. Введение в классы массивов

В java массив также является ссылочным типом, то есть классом.

Давайте рассмотрим пример, чтобы понять класс массива:

public static void main(String[] args) {
    Class c = int[].class; 
    Class cIn = Integer[].class;
    Class ccIn = Integer[][].class;
    System.out.println(c.getName());
    System.out.println(cIn.getName());
    System.out.println(ccIn.getName());
    Class f = float[].class;
    Class flo = Float[].class;
    System.out.println(f.getName());
    System.out.println(flo.getName());
}

Результат вывода:

[I [Ljava.lang.Integer; [[Ljava.lang.Integer; [F [Ljava.lang.Float;

Приведенный выше результат вывода передается через классtoString()Содержимое вывода метода вы можете увидеть по закону, «[» представляет собой одномерный массив,"[[" означает двумерный массив и так далее. В то же время, если это ссылочный тип, за "[" должна следовать буква "L" + полное имя класса. И если это базовый тип, просто используйте соответствующую заглавную букву.

2. Классификация классов массивов

Как видно из вывода приведенного выше примера, класс массива классифицируется в JDK: для одномерного массива базового типа выведите «[», а для одномерного ссылочного массива выведите «[L», скорее "Л".

Классы массивов можно разделить на две категории:

  • Классы массивов примитивных типов;
  • Класс массива ссылочного типа;

Самая большая разница между этими двумя классами массивов заключается в том, что их классы-предки различны.

2.1 Классы массивов примитивных типов

Для основных типов,Одним из родительских классов класса массива базового типа является класс Object.


public static void main(String[] args) {
    int[] a = new int[3];
    Object o = a;//编译通过,类型转换成功;
    //打印一下数组的超类
    System.out.println("int[]的superClass是: "+int[].class.getSuperclass());
    
}

результат операции:

Суперкласс int[]: класс java.lang.Object

2.2 Классы массивов ссылочных типов

Для класса массива ссылочного типа все его классы-предки, помимо класса Object, также включают следующие классы:Если A является классом-предком B, A[] также является классом-предком B[] и т. д. для других измерений. Между различными измерениями нет никакой связи.

См. пример ниже:


public class Test_3 {
   
public static void main(String[] args) {
    Children[] childrens = new Children[3];
    Ancestor[] ancestors = childrens; //编译通过,类型上转成功
    // 判断childrens 是不是 Ancestor或者是其子类的实例,进一步证明 Children[] 是  Ancestor[]的子孙类
    System.out.println("childrens instanceof Ancestor[] : " + (childrens instanceof Ancestor[]));
}   
}


class Ancestor{//祖先类
    
}

class Parent extends Ancestor{//父类,继承于Ancestor
    
}

class Children extends Parent{//子类,继承于Parent
    
}

результат операции:

childrens instanceof Ancestor[] : true

В приведенном выше примере, посколькуAncestorдаChildrenкласс предков, поэтомуAncestor[]СлишкомChildren[]класс предков.

Если мы вызовем и выполним следующий код в это время:


System.out.println(Children[].class.getSuperclass());

Результат:

class java.lang.Object

Эй, зачем массив ссылочного типаChildren[]Родительский класс — это класс Object, тогда он такой же, как и выше.

Ancestor[]даChildren[]класс предков

Возник конфликт. Потому что, если родительским классом является Object, а класс Object является корневым классом, то существует только один класс-предок, и невозможно иметь другие классы-предки.

Почему это?

Давайте взглянемgetSuperclass()Описание API:

публичный класс getSuperclass() Возвращает класс, представляющий суперкласс объекта (класса, интерфейса, примитивного типа или пустоты), представленного этим классом. Возвращает null, если этот класс представляет класс Object, интерфейс, примитивный тип или void. Если этот объект представляет класс массива, возвращает объект Class, представляющий класс Object. -вернуть: Суперкласс класса, представленного этим объектом.

оказалось,getSuperclassЕсли вызывающий объект является объектом класса массива, то напрямую возвращайте объект класса класса Object..

Источник: http://www.cnblogs.com/jinggod/p/8428062.html.

В статье есть что-то неуместное, пожалуйста, поправьте меня, вы также можете обратить внимание на мой паблик WeChat:好好学java, для получения качественных ресурсов.