почему Java объявила serialVersionUID в классе Exception и Throwable?

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

public class MyApppException extends Exception {

    private String message = null;

    public MyApppException() {
        super();
    }
    public MyApppException(String message) {
        super(message);
        this.message = message;
    }
    public MyApppException(Throwable cause) {
        super(cause);
    }
}

компилятор, дающий мне ниже убывания

Сериализуемый класс InsceptionBalanceException не объявляет статическое окончательное поле serialVersionUID типа long

Из документа Java я понимаю значение serialVersionUID

Среда сериализации связывает каждый сериализуемый класс с номером версии, называемым serialVersionUID, который используется во время десериализации для проверки того, что отправитель и получатель сериализованного объекта загружают классы для этого объекта, которые совместимы с сериализацией. Если получатель загрузил класс для объекта с другим идентификатором serialVersionUID, чем класс соответствующего класса отправителя, то десериализация приведет к исключению InvalidClassException. Сериализуемый класс может объявить свой собственный serialVersionUID явно, объявив поле с именем "serialVersionUID", которое должно быть статическим, окончательным и длинным:

Но я не понял, почему Java объявила serialVersionUID в классе Exception и Throwable? Каково использование serialVersionUID в классе Exception и Throwable? Это действительно требуется? Если да, то почему? Кто-то, пожалуйста, уточните.

исключение

public class Exception extends Throwable {
    static final long serialVersionUID = -3387516993124229948L;

Throwable

public class Throwable implements Serializable {
    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -3042686055658047285L;
+1
21 июн. '15 в 8:19
источник поделиться
1 ответ

Ваше настроенное исключение может иметь состояние (= переменные экземпляра), они могут быть дополнительной информацией, которую вы хотите записать с исключением. Состояние - это то, что сериализуется. и вы можете изменить состояние при создании новой версии своего приложения (для exmaple, добавления новых переменных), чтобы класс, загружающий сериализованное Exception, должен знать, совместима ли загружаемая версия с определением класса, что JVM есть.

+1
21 июн. '15 в 8:24
источник

Посмотрите другие вопросы по меткам или Задайте вопрос