当前位置: 代码迷 >> J2SE >> Eclipse写代码的小疑点
  详细解决方案

Eclipse写代码的小疑点

热度:183   发布时间:2016-04-24 00:20:49.0
Eclipse写代码的小问题
Java code
import java.awt.*;import java.awt.event.*;public class TankWar {    public static void main(String[] args) {        new MyFrame ("TankWar");    }}class MyFrame extends Frame {    MyFrame (String s) {        super (s);        setLayout (null);        setBounds (300,300,800,600);        setBackground (Color.white);        addWindowListener (new MyWindowListener());        setVisible (true);    }            class MyWindowListener extends WindowAdapter {        public void windowClosing(WindowEvent e) {            System.exit (0);        }    }}

为什么在类MyFrame的左边会显示一个小感叹号啊?是有问题吗?

------解决方案--------------------
这个是因为MyFrame实现了序列化接口,没有给定序列化的版本号造成的,版本号是跟对象的序列化和反序列化机制有关,这里你完全可以不理睬,非要去掉这个感叹号可以参考下面
加一行版本号的声明就行了
Java code
import java.awt.*;import java.awt.event.*;public class TankWar {    public static void main(String[] args) {        new MyFrame ("TankWar");    }}class MyFrame extends Frame {    /**     *      */    private static final long serialVersionUID = 1L;    MyFrame (String s) {        super (s);        setLayout (null);        setBounds (300,300,800,600);        setBackground (Color.white);        addWindowListener (new MyWindowListener());        setVisible (true);    }            class MyWindowListener extends WindowAdapter {        public void windowClosing(WindowEvent e) {            System.exit (0);        }    }}
------解决方案--------------------
没问题啊,因为Frame的父类的父类...
public abstract class Component implements ImageObserver, MenuContainer,Serializable{}

所以MyFrame 是序列化的类。

Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。 

因为有些对象是即时序列化了也不需要进行流操作,所以说他报的是警告。

你加个:
private static final long serialVersionUID = 1L;警告就会消失。
  相关解决方案