内部类实例化Serializable

昨天在做一个java项目的时候,发现下面代码中红色字体那行总是报NotSerializableException,查错误,MyRectangle这个类也明明实现了Serializable接口。

花了大半天,原来发现虽然MyRectangle虽然实现了Serializable接口,但MyRectangle在我的项目中是以内部类的形式定义的,

而内部类不能被序列化!

对于内部类来说,静态的内部类才可以被序列化,在MyRectangle类定义前加个static,问题就解决了。

以后还是提醒自己,尽量少用内部类,限制太多,以免造成不必要的麻烦。

还是先去查一下内部类和静态内部类的特点联系以及区别吧。

class MySaveListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(saveFileName==null)
            {
                jfc=new JFileChooser("d:/");
                jfc.showSaveDialog(null);
                sf=jfc.getSelectedFile();
                saveFileName=sf.getAbsolutePath();
                try {
                    ObjectOutputStream output=new ObjectOutputStream(new FileOutputStream(saveFileName));
                    Iterator e10=vrectangles.iterator();
                    while(e10.hasNext())
                    {
                        MyRectangle rectangle1=(MyRectangle)e10.next();
                        output.writeObject(rectangle1);
                    }
                    output.close();
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            else
            {

            }
        }
    }
时间: 2024-08-09 09:03:53

内部类实例化Serializable的相关文章

黑马程序员-----内部类、匿名内部类应用

class Outer{ // 定义外部类private String info = "helloworld" ; // 定义外部类属性private static String info2 = "helloeclipse"; // 定义静态变量class Inner{ // 定义内部类public void print(){// 内部类的好处之一:直接访问外部类属性System.out.println(info) ; // 直接访问外部类属性}}static cl

Java 嵌套类和内部类示例<三>

<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">package nested_inner_class;</span></span> <span style="font-size:18px;"> public class StaticNestedTest3 { pu

内部类,异常

Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟.下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名

java 基础知识总结

1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致. 2.Java有没有 goto? java中的保留字,现在没有在 java中使用. 3.&和&&的区别. &和&&都可以用作逻辑与的运算符,表示逻辑与(and) ,当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true,否则,只要有一方为 false,

Java基础提高篇

一.Java中的四舍五入 public static void test(){ System.out.println(Math.round(12.5d)); System.out.println(Math.round(-12.5d)); //使用银行家算法 BigDecimal d=new BigDecimal(100000); BigDecimal r=new BigDecimal(0.0187*3); BigDecimal i=d.multiply(r).setScale(2,Roundin

Core源码(三) Lazy&lt;T&gt;

Lazy<T>解决什么问题? 1.大对象加载 考虑下面的需求,有个对象很大,创建耗时,并且要在托管堆上分配一大块空间.我们当然希望,用到它的时候再去创建.也就是延迟加载,等到真正需要它的时候,才去加载. 显然,这里需要加一个中间层,将大对象封装起来,暴露接口,开始并不创建大对象,等到用户真正访问对象的时候,再去创建.另外,这个中间层应该可以封装不同类型的大对象,因此需要类模版.Lazy<T>就是为了解决这个问题. 典型的使用 public Lazy<AccountServic

技术篇7.0类的高级特性

类除了具有普通的特性之外,还具有一些高级特性,如包.内部类等.包在整个管理中起到了非常重要的作用,使用包可以有效地管理繁杂的类文件,解决类重名问题,当在类中配合与权限修饰符使用时,可以控制其他人对类成员的访问.同时在Java语言中一个更为有效的隐藏实现细节的技巧是使用内部类,通过使用内部类机制可以向上转型为被内部类实现的公共接口.由于在类中可以定义多个内部类,所以实现接口的方式也不止一个,只要将内部类中的方法设置为类最小范围的修饰权限即可将内部类的实现细节有效地隐藏. 抽象类 (概念)所谓抽象类

C# Lazy&lt;T&gt;(转)

本文来自:http://www.cnblogs.com/zhangpengshou/archive/2012/12/10/2811765.html .NET Framework 4 在一次次跳票中终于发布了,在一次偶然的机会,我看到了 Anytao 的 [你必须知道的.NET]第三十三回,深入.NET 4.0之,Lazy<T>点滴 . 我没有看过在.NET Framework 4.0 beta2 的 关于 Lazy<T> 的实现,也不知道正式版与之前的版本是否有过改进(改变),我只

java中的四种单例实现方式

在java中,单例设计模式是非常常见的设计模式,对单例设计模式的概念,不做过多的介绍,下面将逐一介绍四种单例设计模式: 1.第一种单例设计模式 1.1 代码实现 package com.singleton.one; /**  * 第一种单例设计模式  * @author Administrator  *  */ public class SingleTonOne { // 实例化 private static SingleTonOne instance = new SingleTonOne();