Soy nuevo en Java y por el tiempo que crea un array de objetos en Java.

Tengo una de clase a, por ejemplo –

A[] arr = new A[4];

Pero esto es sólo la creación de punteros (referencias) a Una y no de 4 objetos. Es esto correcto? Veo que cuando intento acceder a las funciones/variables en los objetos creados puedo obtener una excepción de puntero nulo.
Para ser capaz de manipular/acceso a los objetos que tenía que hacer esto —

A[] arr = new A[4];
for( int i=0; i<4; i++ )
    arr[i] = new A();

Es esto correcto o estoy haciendo algo mal? Si esto es correcto es realmente extraño.

EDIT: esto me parece extraño, porque en C++ que usted acaba de decir Un nuevo[4] y crea los cuatro objetos.

  • Yo sólo quería decir que este fue un útil excepcionalmente pregunta; gracias por preguntar.
InformationsquelleAutor user220201 | 2011-03-19

8 Comentarios

  1. 240

    Esto es correcto.

    A[] a = new A[4];

    crea 4 referencias, similar a hacerlo

    A a1;
    A a2;
    A a3;
    A a4;

    ahora no se podía hacer a1.someMethod() sin asignar a1 como

    a1 = new A();

    de manera similar, con la matriz de lo que usted necesita hacer

    a[0] = new A();

    antes de usarlo.

    • Esta respuesta me salvó un montón de confusión, gracias por su existencia.
    • esa última parte ‘antes de usarla» gracias por eso.
    • Yo tenía esta confusión también, ya que yo soy de C++ fondo siempre he supuesto que al igual que en C++ Java new palabra clave también llamadas al constructor y se le asigna el yo de la memoria. Supongo que en Java new sólo crea las referencias no es el objeto real en comparación a la de C++. Gracias por la respuesta.
    • no hay ninguna diferencia de C++ aquí. La primera new crea un objeto array. Estos son los objetos asignados dinámicamente («heap»). De manera similar a C++ de código sería A **a = new A*[4]; for (int i = 0; i < 4; ++i) { a[i] = new A(); }.
    • Lo nuevo crea referencias, pero ¿por qué no también inicializar del constructor para cada uno de los elementos de la matriz como en C++. Esto puede ser una tontería, pero quiero preguntar, cualquier problema que tendría, si hacemos?? @MeBigFatGuy
    • lo constructor de los elementos llamaría usted? ¿Y si el único elemento constructor toma un montón de argumentos? ¿Cómo crear esos objetos?

  2. 74

    Esto es correcto. Usted también puede hacer :

    A[] a = new A[] { new A("args"), new A("other args"), .. };

    Esta sintaxis también puede ser usado para crear e inicializar un array en cualquier lugar, como en un argumento del método:

    someMethod( new A[] { new A("args"), new A("other args"), . . } )
  3. 30

    Sí, crea sólo las referencias, que se establece en su valor predeterminado es null. Es por eso que usted obtenga un NullPointerException Usted necesita para crear objetos por separado y asignar la referencia. Hay 3 pasos para crear matrices en Java –

    Declaración – En este paso, debemos especificar el tipo de datos y las dimensiones de la matriz que vamos a crear. Pero recuerde, no hemos de mencionar los tamaños de dimensiones todavía. Se deja vacío.

    La creación de instancias de – En este paso, vamos a crear el array, o asignar memoria para la matriz, mediante la palabra clave new. Es en este paso que vamos a mencionar el tamaño de la matriz de dimensiones.

    De inicialización – La matriz siempre se inicializa para el tipo de datos del valor predeterminado. Pero podemos hacer nuestra propia inicializaciones.

    Declarar Matrices En Java

    Esta es la forma de declarar un array de una dimensión en Java –

    int[] array;
    int array[];

    Oracle recomienda que utilice la antigua sintaxis para declarar matrices.
    Aquí están algunos otros ejemplos de declaraciones legales –

    //One Dimensional Arrays
    int[] intArray;             //Good
    double[] doubleArray;
    
    //One Dimensional Arrays
    byte byteArray[];           //Ugly!
    long longArray[];
    
    //Two Dimensional Arrays
    int[][] int2DArray;         //Good
    double[][] double2DArray;
    
    //Two Dimensional Arrays
    byte[] byte2DArray[];       //Ugly
    long[] long2DArray[];

    Y estos son algunos ejemplos de ilegales declaraciones –

    int[5] intArray;       //Don't mention size!
    double{} doubleArray;  //Square Brackets please!

    La creación de instancias de

    Esta es la forma en que «instanciar», o asignar memoria para un array –

    int[] array = new int[5];

    Cuando la JVM se encuentra el new palabra clave, se entiende que se debe asignar memoria para algo. Y especificando int[5], queremos decir que queremos una matriz de ints, de tamaño 5.
    Así, la JVM crea la memoria y asigna la referencia de la nueva asignación de memoria para la matriz de la que una «referencia» de tipo int[]

    De inicialización

    Mediante un Bucle de – Mediante un bucle for para inicializar los elementos de un array es la forma más común para obtener la matriz de ir. No hay necesidad de ejecutar un bucle for, si usted va a asignar el valor predeterminado en sí, porque la JVM hace por usted.

    Todo en Uno..! – Podemos Declarar, Instanciar e Inicializar nuestra matriz de una sola vez. He aquí la sintaxis –

    int[] arr = {1, 2, 3, 4, 5};

    Aquí, nosotros no mencionar el tamaño, ya que la JVM puede ver que estamos dando a los 5 valores.

    Hasta que comenzamos a crear instancias de las referencias siguen siendo nulo. Espero que mi respuesta te ha ayudado..! 🙂

    Fuente – Los Arrays en Java

  4. 5

    Aquí es el claro ejemplo de la creación de la matriz de 10 empleados objetos, con un constructor que toma un parámetro:

    public class MainClass
    {  
        public static void main(String args[])
        {
            System.out.println("Hello, World!");
            //step1 : first create array of 10 elements that holds object addresses.
            Emp[] employees = new Emp[10];
            //step2 : now create objects in a loop.
            for(int i=0; i<employees.length; i++){
                employees[i] = new Emp(i+1);//this will call constructor.
            }
        }
    }
    
    class Emp{
        int eno;
        public Emp(int no){
            eno = no;
            System.out.println("emp constructor called..eno is.."+eno);
        }
    }
  5. 3

    Estás en lo correcto. Aparte de que si queremos crear una matriz de tamaño específico llena de elementos proporcionados por algunos como «de fábrica», ya que Java 8 (que introduce stream API) podemos usar este one-liner:

    A[] a = Stream.generate(() -> new A()).limit(4).toArray(A[]::new);
    • Stream.generate(() -> new A()) es como fábrica para separar elementos creados de una manera descrita por lambda, () -> new A() que es la aplicación de Supplier<A> – describe cómo cada nueva instancias debe ser creado.
    • limit(4) establece la cantidad de elementos que stream generar
    • toArray(A[]::new) (también puede escribirse como toArray(size -> new A[size])) – nos permite decidir/describa el tipo de matriz que debe ser devuelto.

    Para algunos tipos primitivos puede utilizar DoubleStream, IntStream, LongStream que, además, proporcionar a los generadores como range rangeClosed y algunos otros.

  6. 0

    Sí es correcto en Java hay varios pasos para crear una matriz de objetos:

    1. Declarar y, a continuación, Instanciar (Crear memoria para almacenar ‘4’ objetos):

      A[ ] arr = new A[4];
    2. La inicialización de los Objetos (En este caso, usted puede Inicializar 4 objetos de la clase a)

      arr[0] = new A();
      arr[1] = new A();
      arr[2] = new A();
      arr[3] = new A();

      o

      for( int i=0; i<4; i++ )
        arr[i] = new A();

    Ahora usted puede comenzar a llamar a los métodos existentes de los objetos que acaba de hacer, etc.

    Por ejemplo:

      int x = arr[1].getNumber();

    o

      arr[1].setNumber(x);
  7. 0

    Para la clase genérica es necesario crear una clase contenedora.
    Por Ejemplo:

    Set<String>[] sets = new HashSet<>[10]

    resultados en: «No se puede crear un genérico de la matriz»

    Utilizar en su lugar:

            class SetOfS{public Set<String> set = new HashSet<>();}
            SetOfS[] sets = new SetOfS[10];  
    • ¿Esta línea significa, que usted está tratando de crear una matriz de Conjuntos, donde el Conjunto es de tipo Cadena de caracteres?
  8. 0

    El genaral formulario para declarar una nueva matriz en java es la siguiente:

    type arrayName[] = new type[numberOfElements];

    Donde tipo es el tipo primitivo o un Objeto. numberOfElements es el número de elementos que se almacenará en la matriz y este valor no se puede cambiar porque Java no soporta la dinámica de las matrices (si usted necesita una solución flexible y dinámico de la estructura para la celebración de los objetos que usted desea, puede utilizar algunas de las colecciones Java).

    Permite inicializar una matriz para almacenar los salarios de todos los empleados de una pequeña empresa de 5 personas:

    int salaries[] = new int[5];

    El tipo de la matriz (en este caso int) se aplica a todos los valores de la matriz. No se puede mezclar los tipos en una matriz.

    Ahora que tenemos nuestros sueldos array inicializado queremos poner algunos valores en ella. Podemos hacer esto durante la inicialización como este:

    int salaries[] = {50000, 75340, 110500, 98270, 39400};

    O hacerlo en un momento posterior como este:

    salaries[0] = 50000;
    salaries[1] = 75340;
    salaries[2] = 110500;
    salaries[3] = 98270;
    salaries[4] = 39400;

    Más visual ejemplo de la creación de la matriz:
    Creación de una matriz de objetos en Java

    Para aprender más acerca de las Matrices, echa un vistazo a la guía.

Dejar respuesta

Please enter your comment!
Please enter your name here