Исключение типа Исключение не может быть выдано, тип исключения должен быть подклассом Throwable - PullRequest
0 голосов
/ 26 октября 2018

Я пытался решить эту проблему в других вопросах, но все еще не понял, что именно означает Throwable.Прочитайте несколько статей об этом (его суперкласс бла-бла-бла), но все еще не знаете, как это реализовать.Забыл упомянуть, что я новичок в Java.Любой совет будет принят с благодарностью: D

Вот класс исключения:

class Exception {
private int pDen;
private int pMes;
private int kDen;
private int kMes;

public Exception(int pDen, int pMes, int kDen, int kMes) {
    super();
    this.pDen = pDen;
    this.pMes = pMes;
    this.kDen = kDen;
    this.kMes = kMes;
}
public void message()
{
    System.out.println("Isklucok");
}
public void promena()
{
    int tmpDen = 0;
    int tmpMes = 0;
    tmpDen = pDen;
    pDen = kDen;
    kDen = tmpDen;
    tmpMes = pMes;
    pMes = kMes;
    kMes = tmpMes;
}

}

А вот код, который я запускаю в другом классе, где я долженпоймай мое исключение, куда брошено.

try {
        if(pMes > kMes)
        {
            throw new Exception(pDen,pMes,kDen,kMes);
        }
        else if(pMes == kMes)
            if(pDen > kDen)
            {
                throw new Exception(pDen,pMes,kDen,kMes);
            }
    }
    catch(Exception e)
    {
        e.message();
        e.promena();
    }

Ответы [ 5 ]

0 голосов
/ 26 октября 2018

Класс Exception и его подклассы представляют собой форму Throwable, которая указывает условия, которые разумное приложение может захотеть перехватить.

В большинстве ситуаций вашим исключением может быть одно из них ниже:

  • Арифметическое исключение
  • ArrayIndexOutOfBoundException
  • ClassNotFoundException
  • IOException
  • NoSuchMethodException ...
1018*

Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться обнаружить.

И Exception, и Error являются подклассами Throwable.

Если вам нужно не только поймать Exceptions, но Errors, вы должны использовать Throwable.Но:

Большинство таких ошибок являются ненормальными условиями.Ошибка ThreadDeath, хотя и является «нормальным» условием, также является подклассом Error, поскольку большинству приложений не следует пытаться ее перехватить.

Если вы хотите отловить такую ​​вещь, как ThreadDeath error, выбудет использовать Throwable.Это может быть очень редкая ситуация.

В вашем примере, если вы просто хотите проверить числа, вы можете использовать что-то вроде этого:

public static void check(int pDen, int pMes, int kDen, int kMes) {

    if (pMes > kMes) {
        throw new IllegalArgumentException ("Your message.....");
    } else if (pMes == kMes) {
        if (pDen > kDen) {
            throw new IllegalArgumentException ("Your message.....");
        }
    }
}
0 голосов
/ 26 октября 2018

Пожалуйста, игнорируйте ответы, предлагающие реализовать собственный класс Exception. У Java есть свои: java.lang.Exception. Просто используйте это, и расширьте это при необходимости. Случаи, когда имеет смысл иметь свой собственный Throwable, но не выходящий за рамки стандартного Exception, очень редки.

0 голосов
/ 26 октября 2018

В ваш пользовательский класс распространяется Throwable. Его работает

 class Exception extends Throwable {
      //your code
  }
0 голосов
/ 26 октября 2018

Вам нужно будет создать собственный класс Exception, содержащий требуемый Constructors, следующим образом:

public class CustomException extends Exception {
    /* Optional: Include Serial UID */

    public CustomException(Throwable t) {
        super(t);
    }

    public CustomException(int pDen, int pMes, int kDen, int kMes) {
        /* Handle Info & Throw Exception */
    }

}

И тогда вы можете выбросить исключение следующим образом:

throw new CustomException(pDen,pMes,kDen,kMes);
0 голосов
/ 26 октября 2018

Создание вашего пользовательского исключения расширяет что-то из иерархии Throwable.

Например

// Exception here is java.lang.Exception, not the class from your example
public class MyException extends Exception {

    // ...

}
...