问题描述
- JAVA serializable 类 未声明类型为 long 的静态终态
-
新手,就是完全照书上码了一段,但怎么会有这些提示?
![图片说明](http://img.ask.csdn.net/upload/201502/18/1424249621_652792.png)
还有一张传不上去
这都是些什么问题?麻烦大致讲下 谢谢
代码如下
import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class Test extends JFrame implements ActionListener{ JLabel lbl1,lbl2; JTextField txt1,txt2,txtResult; JButton btnCalc; public Test(){ super("我的第一个Swing程序"); txt1=new JTextField(5); lbl1=new JLabel("="); txtResult=new JTextField(7); txtResult.setEditable(false); btnCalc=new JButton("计算"); btnCalc.addActionListener(this); Container c=getContentPane(); c.setLayout(new FlowLayout()); c.add(txt1); c.add(lbl1); c.add(txt2); c.add(lbl2); c.add(txtResult); c.add(btnCalc); setSize(500,100); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e){ float num1=0,num2=0,result=0; try{ num1=Float.parseFloat(txt1.getText()); num2=Float.parseFloat(txt2.getText()); result=num1+num2; }catch(Exception ex){ txtResult.setText("数据非法!"); return; } txtResult.setText(Float.valueOf(result).toString()); } public static void main(String[] args){ new Test(); } }
解决方案
虽然你没有直接实现Serializable,接口,但你继承的javax.swing.JFrame这个类实现了Serializable接口。
个人建议学习类的时候,留意下类实现哪些了接口(接口你已经学习过的)。用面向对象的思想去看类实现了哪些接口,可以理解为对象应该具备哪些功能(所以实现对应的接口)。
前几天在家没网,回复的有点慢。
解决方案二:
你写的这个类实现 java.io.Serializable 接口,实现该接口表示以启用其序列化功能。提示 private static final long serialVersionUID,添加一个final修饰的序列化版本号(变量的值不可以改变)。
如果你没有添加serialVersionUID,并且修改了成员变量,就可能抛出一个InvalidClassException异常。
其实,这个提示并不是错误,只是一个警告,表示你写的代码可能会出现问题。
解决方案三:
这个东西是在你的类进行序列化传输的时候,进行序列化和反序列化的需要使用的。这个值就相当类的id值。
但是IDE考虑到如果缺少这个值,反序列化话的时候会出现意想不到的结果,所以建议你显式声明这个值。
时间: 2024-11-02 08:29:25