Foro de elhacker.net

Programación => Java => Mensaje iniciado por: arts en 10 Octubre 2013, 17:01 pm



Título: duda basica seguramente en java
Publicado por: arts en 10 Octubre 2013, 17:01 pm
He visto en algunos ejemplos de java algo que me ha sonado a chino, el problema es que me viene solo esto y no me explica nada más. Y no veo de que forma puede usarse el ejemplo es decir, simplemente me pone los comentarios y ahí se termina todo, no avanza para ver como se usa.

Precio [] catalogo; // Creacion de la referencia
catalogo = new Precio [5]; // Creación del array de referencias
catalogo[0] = new Precio();

¿ Para que se usa una instancia de una clase del tipo Array?, y como se usa ?. Haber algún iluminado que me alumbre que no le veo sentido, principalmente porque como no continua no puedo ni imaginarme para que se usa.

Un saludo y gracias  :)


Título: Re: duda basica seguramente en java
Publicado por: Fakedo0r en 11 Octubre 2013, 13:38 pm
Es un Array de una clase llamada Precio. Supongo que sabes que normalmente las clases se instancian. Entonces simplemente lo que hace es acceder al primer objeto del array y luego instanciarlo.

Esto:

Código
  1. catalogo[0] = new Precio(); // Instancia de la clase

Es equivalente a:

Código
  1. Precio cPrecio = new Precio(); // Instancia de la clase


Título: Re: duda basica seguramente en java
Publicado por: arts en 23 Octubre 2013, 01:25 am
Es decir: ¿ en el primero metes en la posición 0 del array catalogo un constructor de la clase Precio vacío de forma temporal y para acceder a algún método de Precio valdría con poner por ejemplo catalogo[0].dameSalario(); ?

Y el segundo simplemente es una instancia cPrecio de la clase Precio ? con el que puedo hacer perfectamente cPrecio.dameSalario();


Título: Re: duda basica seguramente en java
Publicado por: Mitsu en 23 Octubre 2013, 01:51 am
Un array puedes declararlo de tipos de datos y de objetos. Por lo que cuando haces:

Código
  1. Libreria[] libro = new Libreria[10];
  2.  

Lo que estás haciendo es crear un array tipo Libreria con 10 objetos Libreria dentro.

Si bien esos elementos están creados, no están instanciados. Por lo que son de tipo Librería, tienen que instanciarse para poder usarse.

Código
  1. Libreria[0] = new Libreria(); // El primer objeto ya está instanciado. Los demás aun no.
  2.  

Ahora, como hemos instanciado el primer objeto del arreglo tipo Libreria, podemos acceder a sus metodos y variables (en caso tuviera).

Código
  1. libro[0].registrarLibro("Lo que el viento se llevo"); // llama a un metodo de la clase Librera llamado registraLibro.
  2.  

Si quieres llamar a un método ni bien instancias el objeto, puedes hacer lo siguiente:

Código
  1. libro[0] = new Libreria().registrarLibro("Lo que el viento se llevo");
  2.  



Saludos.


Título: Re: duda basica seguramente en java
Publicado por: visualfree en 23 Octubre 2013, 16:45 pm
Estimado:

Te dejo un ejemplo sencillo.

Código:
import java.util.*;
class Promedio{
        public static void main(String[] args){
                Scanner in=new Scanner(System.in);
                int[] nota=new int[7];//nota va a ser la "variable instacia" del arreglo de enteros de 0 a 7
                int suma=0;
                int promedio=0;
                for(int i=0;i<7;i++){//vuelta 7 veces de 0 a 6
                        System.out.println("Ingresar nota:"+i);
                        nota[i]=in.nextInt();//Llenamos tu arreglo
                        //Almacenamos valor en pos i del arreglo nota.
                        suma=suma+nota[i];
                }
                promedio=suma/7;
                System.out.println("El promedio de enteros es:"+promedio);

        }
}

Atento a tus comentarios.

Saluda Atte.


Título: Re: duda basica seguramente en java
Publicado por: arts en 24 Octubre 2013, 01:04 am
Estimado:

Te dejo un ejemplo sencillo.

Código:
import java.util.*;
class Promedio{
        public static void main(String[] args){
                Scanner in=new Scanner(System.in);
                int[] nota=new int[7];//nota va a ser la "variable instacia" del arreglo de enteros de 0 a 7
                int suma=0;
                int promedio=0;
                for(int i=0;i<7;i++){//vuelta 7 veces de 0 a 6
                        System.out.println("Ingresar nota:"+i);
                        nota[i]=in.nextInt();//Llenamos tu arreglo
                        //Almacenamos valor en pos i del arreglo nota.
                        suma=suma+nota[i];
                }
                promedio=suma/7;
                System.out.println("El promedio de enteros es:"+promedio);

        }
}

Atento a tus comentarios.

Saluda Atte.

Ese ejemplo lo entiendo, sin embargo lo entiendo porque hace la instancia sin mas y usa el nombre de la instancia para acceder al array recorrerlo llenarlo y hacer la media.
Sin embargo en el ejemplo anterior de Libros primero se crea el array de 10 elementos con el nombre libro. Y después hace librería[0] = new Libreria(); cuando yo habría hecho como tu en el ejemplo, habría usado libro[0] = new librería(), sin embargo el usa todo el rato libro y es lo que me confunde.  :/


Título: Re: duda basica seguramente en java
Publicado por: Mitsu en 24 Octubre 2013, 03:27 am
Trata de comprender 2 cosas.

Crear un objeto es muy diferente a INSTANCIAR.

Cuando tu creas un objeto y no lo instancias, ese objeto tiene el valor Null, por que no apunta a nada.  Ese objeto tienes que instanciarlo para que pueda usar sus métodos. Un objeto no es más que una referencia de una clase en particular.

Así, si hacemos lo del ejemplo anterior:

Código
  1. Libreria[] libro = new Libreria[10];
  2.  

Estamos creando solamente diez referencias de la clase Librería. Si ahora tratáramos de hacer esto:

Código
  1. libro[0].registrarLibro("Lo que el viento se llevo");
  2.  

Te dará un hermoso NullPointerException. ¿Por qué? Sencillamente porque NO HEMOS INSTANCIADOS LAS REFERENCIAS U OBJETOS, como quieras llamarle. Todo objeto en Java necesita ser instanciado, de lo contrario, el objeto será prácticamente inexistente e inútil.


Saludos.


Título: Re: duda basica seguramente en java
Publicado por: arts en 24 Octubre 2013, 16:30 pm
Vale ya lo pillo. Ya se como va gracias.