Cómo crear constructores en Java
LA constructor
Conteúdo
Un constructor no tiene un tipo de retorno.
El nombre del constructor debe ser el mismo que el nombre de la clase.
A diferencia de los métodos, los constructores no son considerados como miembros de una clase. (Eso es importante cuando se trata de la herencia.)
Un constructor es llamado cuando se crea una nueva instancia de un objeto. De hecho, es la nueva palabra clave que llama al constructor. Después de crear el objeto, no se puede llamar al constructor de nuevo.
Este es el formato básico para la codificación de un constructor:
público Nombre de clase (parámetro de la lista) [Tiros excepción ...] {declaraciones ...}
La palabra clave pública indica que otras clases pueden acceder al constructor. Eso es por lo general lo que quiere, aunque es posible que desee crear un constructor privado. Nombre de clase debe ser el mismo que el nombre de la clase que contiene el constructor. Codificar la lista de parámetros de la misma manera que codifique para un método.
Observe también que un constructor puede lanzar excepciones si encuentra situaciones que no puede recuperarse.
Creación de constructores básicos
Probablemente la razón más común para la codificación de un constructor es proporcionar valores iniciales para los campos de clase cuando se crea el objeto. Supongamos que usted tiene una llamada Actor clase que tiene campos denominados nombre y apellido. Puede crear un constructor de la clase Actor:
Actor pública (String primero, Cadena pasado) {firstName = primera lastName = última-}
Entonces se crea una instancia de la clase Actor llamando a este constructor:
Actor a = new Actor ("Arnold", "Schwarzenegger") -
Se crea un nuevo objeto Actor por Arnold Schwarzenegger.
Al igual que los métodos, los constructores pueden ser sobrecargados. En otras palabras, puede proporcionar más de un constructor para una clase, siempre que cada constructor tiene una firma única. Aquí hay otro constructor de la clase Actor:
Actor pública (String primero, Cadena pasado, buena boolean) {firstName = primera lastName = último goodActor = bueno-}
Este constructor le permite crear un objeto Actor información además del nombre del actor:
Actor a = new Actor ("Arnold", "Schwarzenegger", false) -
Creación de constructores por defecto
Cada clase tiene un derecho a un constructor. Si usted no proporciona un constructor, Java nombra a uno para que, de forma gratuita. Este constructor libre se llama constructor por defecto. No acepta ningún parámetro y no hace nada, pero permite a su clase a una instancia.
Por lo tanto, las dos clases siguientes son idénticos:
pública Class1 {Class1 público () {}} Class1 pública {}
En el primer ejemplo, la clase declara explícitamente un constructor que no acepta ningún parámetro y no tiene declaraciones en su cuerpo. En el segundo ejemplo, Java crea un constructor por defecto que funciona igual que el constructor se muestra en el primer ejemplo.
El constructor por defecto es no creado si se declara ningún constructor para la clase. Como resultado, si se declara un constructor que acepta parámetros y todavía quiere tener un constructor vacío (sin parámetros y sin cuerpo), debe declarar explícitamente un constructor vacío para la clase.
Un ejemplo puede aclarar este punto hacia arriba. El siguiente código hace no compilar:
public class BadActorApp {main (String [] args) {static void públicas Actor a = new Actor () - // error: No se compilará}} class Actor {private String lastName-privada Cadena firstName-privada boolean-goodActor pública Actor (String pasado, Cadena primero) {lastName = último firstName = primera} Actor pública (String pasado, Cadena primera, buena boolean) {lastName = último firstName = primera goodActor = bueno-}}
Este programa no compilará porque no proporciona explícitamente un constructor por defecto para la clase- Actor porque proporciona otros constructores, el constructor por defecto no se genera de forma automática.
Llamar a otros constructores
Un constructor puede llamar a otro constructor de la misma clase mediante la palabra clave especial esto como una llamada al método. Esta técnica se utiliza comúnmente cuando se tiene varios constructores que construyen una sobre otra.
Considere la posibilidad de esta clase:
Actor clase pública {private String lastName-privada boolean Actor-goodActor public String firstName-privada (String pasado, Cadena primero) {lastName = último firstName = primera} Actor pública (String pasado, Cadena primera, buena boolean) {esto ( apellido, nombre) -goodActor = bueno-}}
Aquí el segundo constructor llama al primer constructor para establecer los campos Apellidos y firstName. Luego se establece el campo goodActor.
Usted tiene algunas restricciones en el uso de la palabra clave this como una llamada de constructor:
Usted puede llamar a otro constructor sólo en la primera declaración de un constructor. Por lo tanto, el siguiente código no se compilará:
Actor pública (String pasado, Cadena primera, buena boolean) {goodActor = bueno-este (apellido, nombre) - // Error: No se compilará}
Si intenta compilar una clase con este constructor, aparece un mensaje diciendo llamada a esta debe ser la primera declaración en el constructor.
Cada constructor puede llamar sólo otro constructor, pero se puede constructores de cadena. Si una clase tiene tres constructores, el primer constructor puede llamar a la segunda, que a su vez llama a la tercera.
No puede crear bucles en los que los constructores se llaman unos a otros. Aquí hay una clase que no compilará:
clase CrazyClass{ private String firstString- private String secondString- pública CrazyClass (String primera, segunda cadena) { esta (primera) - secondString = segundo } pública CrazyClass (String primero) { esta (primera, "DEFAULT") - // error: no lo hará // Compile }}
El primer constructor comienza llamando al segundo constructor, que llama al primer constructor. El compilador se queja de que este error es una invocación del constructor recursivo y educadamente se niega a compilar la clase.
Si usted no llama explícitamente un constructor en la primera línea de un constructor, Java inserta código que llama automáticamente al constructor por defecto de la clase base - es decir, la clase que esta clase hereda.