Soy nuevo en Java y por el momento creé una matriz de objetos en Java.
Tengo una clase A por ejemplo:
A[] arr = new A[4];
Pero esto solo está creando punteros (referencias) A
y no 4 objetos. ¿Es esto correcto? Veo que cuando intento acceder a funciones / variables en los objetos creados, obtengo una excepción de puntero nulo. Para poder manipular / acceder a los objetos tuve que hacer esto:
A[] arr = new A[4];
for (int i = 0; i < 4; i++) {
arr[i] = new A();
}
¿Es correcto o estoy haciendo algo mal? Si esto es correcto, es realmente extraño.
EDITAR: Encuentro esto extraño porque en C ++ solo dices nuevo A[4]
y crea los cuatro objetos.
Respuestas:
Esto es correcto.
... crea 4
A
referencias, similar a hacer esto:Ahora no podría
a1.someMethod()
prescindir de asignara1
así:Del mismo modo, con la matriz necesita hacer esto:
... antes de usarlo.
fuente
new
palabra clave de Java también llama al constructor y asigna la memoria I. Supongo que en Javanew
solo crea las referencias, no el objeto real en comparación con C ++. Gracias por responder.new
crea un objeto de matriz. Estos son objetos asignados dinámicamente ("montón"). Entonces el código análogo de C ++ seríaA **a = new A*[4]; for (int i = 0; i < 4; ++i) { a[i] = new A(); }
.Esto es correcto. También puedes hacer:
Esta sintaxis también se puede usar para crear e inicializar una matriz en cualquier lugar, como en un argumento de método:
fuente
Sí, solo crea referencias, que se establecen en su valor predeterminado nulo. Es por eso que obtienes una NullPointerException. Necesitas crear objetos por separado y asignar la referencia. Hay 3 pasos para crear matrices en Java:
Entonces, hasta que creemos una instancia, las referencias permanecerán nulas. Espero que mi respuesta te haya ayudado..! :)
Fuente: matrices en Java
fuente
Aquí está el claro ejemplo de cómo crear una matriz de 10 objetos de empleados, con un constructor que toma parámetros:
fuente
Estás en lo correcto. Aparte de eso, si queremos crear una matriz de tamaño específico lleno de elementos proporcionados por alguna "fábrica", desde Java 8 (que introduce la API de flujo ) podemos usar esta línea:
Stream.generate(() -> new A())
es como la fábrica para elementos A separados creados de la manera descrita por lambda,() -> new A()
que es la implementación deSupplier<A>
: describe cómo deben crearse cada nuevas instancias A.limit(4)
establece cantidad de elementos que se corriente generartoArray(A[]::new)
(también se puede reescribir comotoArray(size -> new A[size])
): nos permite decidir / describir el tipo de matriz que se debe devolver.Para algunos tipos primitivos se pueden utilizar
DoubleStream
,IntStream
,LongStream
que además proporcionan generadores comorange
rangeClosed
y algunos otros.fuente
Sí, es correcto en Java, hay varios pasos para hacer una matriz de objetos:
Declarar y luego crear instancias (Crear memoria para almacenar objetos '4'):
Inicializando los objetos (en este caso puede inicializar 4 objetos de la clase A)
o
Ahora puede comenzar a llamar a los métodos existentes desde los objetos que acaba de hacer, etc.
Por ejemplo:
o
fuente
Para la clase genérica es necesario crear una clase de contenedor. Por ejemplo:
da como resultado: "No se puede crear una matriz genérica"
Use en su lugar:
fuente
La forma genaral para declarar una nueva matriz en java es la siguiente:
type arrayName[] = new type[numberOfElements];
Donde type es un tipo u objeto primitivo.
numberOfElements
es la cantidad de elementos que almacenará en la matriz y este valor no puede cambiar porque Java no admite matrices dinámicas (si necesita una estructura flexible y dinámica para contener objetos, puede utilizar algunas de las colecciones de Java).Inicialicemos una matriz para almacenar los salarios de todos los empleados en una pequeña empresa de 5 personas:
int salaries[] = new int[5];
El tipo de matriz (en este caso
int
) se aplica a todos los valores de la matriz. No puede mezclar tipos en una matriz.Ahora que tenemos nuestra matriz de salarios inicializada, queremos ponerle algunos valores. Podemos hacer esto durante la inicialización así:
int salaries[] = {50000, 75340, 110500, 98270, 39400};
O para hacerlo en un momento posterior como este:
Más ejemplo visual de creación de matriz:
Para obtener más información sobre las matrices, consulte la guía .
fuente