English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

¿Puede lanzar una excepción el constructor en Java?

ConstrucciónSe utiliza para inicializar el objeto en el momento de la creación. En términos de sintaxis, es similar a un método. La diferencia radica en que el nombre del constructor es el mismo que el de la clase y no tiene tipo de retorno.

No es necesario llamar explícitamente al constructor, estos constructores se llaman automáticamente en el momento de la instanciación.

Ejemplo

public class Example {
   public Example(){
      System.out.println("Este es el constructor de la clase ejemplo");
   }
   public static void main(String args[]) {
      Example obj = new Example();
   }
}

Resultado de salida

Este es el constructor de la clase ejemplo

El constructor lanza excepciones

Sí, al igual que los métodos, puede lanzar excepciones desde el constructor. Pero si lo hace, debe capturar la excepción en el método que llama al constructor/Lanzar (manejar) excepciones. Si no compila, se generará un error.

Ejemplo

En el siguiente ejemplo, tenemos una clase llamada Employee, cuyo constructor lanza IOException, y no manejamos la excepción al instanciar la clase. Por lo tanto, si compila el programa, generará un error en tiempo de compilación.

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Employee{
   private String name;
   private int age;
   File empFile;
   Employee(String name, int age, String empFile) throws IOException{
      this.name = name;
      this.age = age;
      this.empFile = new File(empFile);
      new FileWriter(empFile).write("Employee name is "+name+"and age is "+age);
   }
   public void display(){
      System.out.println("Name: "+name);
      System.out.println("Age: "+age);
   }
}
public class ConstructorExample {
   public static void main(String args[]) {
      String filePath = "samplefile.txt";
      Employee emp = new Employee("Krishna", 25, filePath);
   }
}

Error en tiempo de compilación

ConstructorExample.java:23error: exception no reportada IOException; debe ser capturada o declarada como lanzada
   Employee emp = new Employee("Krishna", 25, filePath);
                  ^
1 error

Ejemplo

Para que el programa funcione correctamente, envuelva la línea de instanciación en un try-en catch o lanzando una excepción.

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Employee{
   private String name;
   private int age;
   File empFile;
   Employee(String name, int age, String empFile) throws IOException{
      this.name = name;
      this.age = age;
      this.empFile = new File(empFile);
      new FileWriter(empFile).write("Employee name is "+name+"and age is "+age);
   }
   public void display(){
      System.out.println("Name: "+name);
      System.out.println("Age: "+age);
   }
}
public class ConstructorExample {
   public static void main(String args[]) {
      String filePath = "samplefile.txt";
      Employee emp = null;
      try {
         emp = new Employee("Krishna", 25, filePath);
      }catch(IOException ex) {
         System.out.println("No se encontró el archivo especificado");
      }
      emp.display();
   }
}

Resultado de salida

Name:  Krishna
Age: 25