程序未执行 - 编译警告

时间:2013-06-10 12:47:58

标签: java serialversionuid

我是一名新的java程序员。我试图在eclipse中执行这个程序,但错误是

The serializable class LoveJava does not declare a static final serialVersionUID field of type long.

private static final long serialVersionUID = 1L; 

为什么我必须声明这一行?

import acm.graphics.*;
import acm.program.*;

public class LoveJava extends GraphicsProgram {

    private static final long serialVersionUID = 1L;

    public void run(){
        add(new GLabel("I love Java"),100,75);
    }
}

2 个答案:

答案 0 :(得分:2)

欢迎来到java社区。

在询问之前阅读specific API,此处是API的重要部分。

  

序列化运行时将每个可序列化类与版本号相关联,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送方和接收方是否已加载与该序列化兼容的该对象的类。如果接收者为具有与相应发送者类的serialVersionUID不同的对象加载了一个类,则反序列化将导致InvalidClassException。可序列化类可以通过声明名为“serialVersionUID”的字段来明确声明其自己的serialVersionUID,该字段必须是static,final和long类型:

答案 1 :(得分:0)

阅读博客文章"Eclipse: Ignore “Not Declare Static Final SerialVersionUID” Warning",以便将Eclipse配置为忽略此编译器警告。

或者在类声明之前添加@SuppressWarnings(“serial”),以避免首先引发编译器警告。像这样:

import acm.graphics.*;
import acm.program.*;

@SuppressWarnings(“serial”)
public class LoveJava extends GraphicsProgram {

    private static final long serialVersionUID = 1L;

    public void run(){
        add(new GLabel("I love Java"),100,75);
    }
}