Обработка пользовательских исключений Java

#java #exception #compiler-errors

#java #исключение #ошибки компилятора

Вопрос:

Обновить:

Я исправил синтаксическую ошибку и удалил обработку исключений, и я получаю точно такое же сообщение об ошибке (конечно, другой номер строки):

 class Point {
    public Point (int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void displayPointPosition() {
        System.out.println("Position: "   x   " "   y);
    }
    private int x, y;
}

public class Exinfo2 {
    public static void main(String args[]) {
        Point a = new Point(1, 4);
        a.displayPointPosition();
        a = new Point(-3, 5);
        a.displayPointPosition();
    }
}
  

Это действительно должно быть ошибкой новичка, и мой редактор кода (Visual Studio Code) не выделяет ничего неправильного…

==============

Я изучаю Java и сейчас пытаюсь обрабатывать пользовательские исключения, но безуспешно. При компиляции моего кода у меня возникают различные сообщения об ошибках, и у меня даже есть проблема с образцом, который я скопировал из книги, поэтому кажется, что может быть что-то еще, кроме кода…

Это пример, который я пытаюсь заставить работать, и я получаю сообщение компилятора:

 "Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

        at Exinfo2.main(Point.java:23)".
  

Это код:

 class Point {
    public Point (int x, int y) throws ErrConst {
        if ( (x < 0) || (y < 0) ) {
          throw new ErrConst ("Constructor error:"   x   " "   y);
        }
        this.x = x;
        this.y = y;
    }

    public void displayPointPosition() {
        System.out.println("Position: "   x   " "   y);
    }
    private int x, y;
}

class ErrConst extends Exception {
    ErrConst(String mes) {
        super(mes);
    }
}

public class Exinfo2 {
    public static void main(String args[]) {
        try {
            Point a = new Point(1, 4);
            a.displayPointPosition();
            a = new Point(-3, 5);
            a.displayPointPosition();
        }
        catch (ErrConst e) {
            System.out.println(e.getMessage());
            System.exit(-1);
        }
    }
}
  

Я уверен, что это очень просто, но для меня это головная боль, поэтому я надеюсь, что добрый программист может потратить несколько минут, чтобы помочь мне … 🙂

Заранее спасибо! 🙂

Комментарии:

1. System.out.println(Position: " x " " y); не похоже на действительную Java — вам не хватает вводной цитаты перед Position

2. Привет, @PlayerOne, вы абсолютно правы, я допустил ошибку при редактировании кода после вставки сюда. У меня была (и все еще есть) точно такая же ошибка компиляции после того, как я исправил это. Спасибо!

3. Привет, @NathanHughes, спасибо за совет. Я удалил всю обработку исключений, и у меня та же ошибка. Должно быть, ошибка новичка, и мой редактор кода (Visual Studio Code) не выделяет ничего неправильного. Я опубликую код без обработки исключений.

Ответ №1:

Ваш код работает нормально, когда я пытаюсь его запустить.

Однако, согласно опубликованному вами исключению, похоже, что вы сохранили файл как Point.java . У вас есть несколько классов в одном файле, но вызывается ваш общедоступный класс Exinfo2 . В Java имя файла и имя открытого класса должны совпадать, так что, вероятно, в этом проблема.

Попробуйте сохранить файл как Exinfo2.java .


Однако сообщение об ошибке, которое вы получаете от компилятора, является странным. Обычно вы получаете сообщение об ошибке «класс Exinfo2 является общедоступным, должен быть объявлен в файле с именем Exinfo2.java «. Похоже, что ошибка, которую вы получаете, вызвана компилятором Eclipse, поэтому, возможно, плагин Visual Studio Code использует этот компилятор вместо обычного. Вместо этого попробуйте скомпилировать его следующим образом из командной строки:

 javac Exinfo2.java
java Exinfo2
  

Комментарии:

1. Привет! Потрясающе! Да, это было просто для начинающих, и я не повторю эту основную ошибку снова. Теперь я всегда буду помнить, что я должен использовать имя основного общедоступного класса в качестве имени файла, особенно если у меня более одного класса в одном файле. Теперь код работает нормально, включая обработку исключений! Это отличный способ начать мою пятницу! 🙂 Большое спасибо!

Ответ №2:

Я думаю, что в вашем классе Point .. метод displayPointPosition .. поток печати не нашел ваше сообщение .. можете ли вы попробовать изменить его .. для этого: System.out.println(«Позиция: » x » » y);

с уважением!