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

Может ли конструктор вызывать исключение в Java?

АКонструкцияИспользуется для инициализации объекта при создании. С точки зрения синтаксиса, он подобен методу. Разница заключается в том, что имя конструктора совпадает с именем класса, и у него нет типа возвращаемого значения.

Конструкторы не требуют явного вызова, они автоматически вызываются при инстанцировании.

Пример

public class Example {
   public Example(){
      System.out.println("Это конструктор класса example");
   }
   public static void main(String args[]) {
      Example obj = new Example();
   }
}

Результат вывода

Это конструктор класса example

Выбрасывание исключения в конструкторе

Да, как и методы, вы можете выбрасывать исключения из конструктора. Однако, если вы это делаете, вам нужно будет перехватывать/выбрасывать (обрабатывать) исключение в методе, который вызывает конструктор. Если вы не скомпилируете, то возникнет ошибка.

Пример

В следующем примере у нас есть класс Employee,构造函数 которого выбрасывает IOException, и мы создаем объект этого класса без обработки исключения. Таким образом, если вы скомпилируете этот程序, он будет генерировать ошибку компиляции.

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("Имя сотрудника ― " + name + " и возраст ― " + age);
   }
   public void display(){
      System.out.println("Имя: " + name);
      System.out.println("Возраст: " + age);
   }
}
public class ConstructorExample {
   public static void main(String args[]) {
      String filePath = "samplefile.txt";
      Employee emp = new Employee("Krishna", 25, filePath);
   }
}

Ошибка компиляции

ConstructorExample.java:23: ошибка: неоповещенная исключительная ситуация IOException; она должна быть перехвачена или объявлена в качестве выбрасываемой
   Employee emp = new Employee("Krishna", 25, filePath);
                  ^
1 ошибка

Пример

Чтобы сделать программу рабочей,.wrap instance line in try-catch или вызовите исключение.

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("Имя сотрудника ― " + name + " и возраст ― " + age);
   }
   public void display(){
      System.out.println("Имя: " + name);
      System.out.println("Возраст: " + 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("Не найден указанный файл");
      }
      emp.display();
   }
}

Результат вывода

Имя: Krishna
Возраст: 25
Основной учебник
Вам может понравиться