`
xly1981
  • 浏览: 146612 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java内部类使用场景体会

    博客分类:
  • java
 
阅读更多
内部类的作用:

1.完善多重继承。
疑问在于:多重继承可以用组合的方式实现。内部类相对组合方式的优势应该就是内聚更好,因为内部类实现的逻辑对除了自己外部类以外的类是不透明的,代码专用。
Lock相关实现类里面的 Sync这个内部类均扩展了抽象类AQS,并实现AQS的tryAcquire、tryRelease、tryAcquireShared等方法,各个Lock类的Sync各是各的,而且自己用自己的。



2.实现事件驱动系统
用在回调的场景里面,感觉也是代码专用的效果,这是外部对内部的;另外有些场景外部类的私有变量内部类才能访问,那就既是约束,也是方便了。

1.addActionListener方法调用接口ActionListener的实现类--事件驱动模型系统
2.ActionListener接口的实现类又要使用别人ContentPane这个私有成员变量

addActionListener 方法要调用一个能访问自己私有成员变量的类,那只能是一个内部类了

public class ButtonTest extends JFrame {
    private static final long serialVersionUID = -5726190585100402900L;
    private JPanel contentPane;

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ButtonTest frame = new ButtonTest();
                    frame.setVisible(true);
                    frame.contentPane.requestFocus();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * Create the frame.
     */

    public ButtonTest() {
        setTitle("普通内部类的简单应用");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 300, 200);
        contentPane = new JPanel();
        contentPane.setLayout(null);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        final JButton redButton = new JButton();
        redButton.setText("红色");
        redButton.setBounds(15, 20, 82, 30);
        redButton.addActionListener(new ColorAction(Color.RED));//这里用事件模型
        contentPane.add(redButton);
    }
    
    private class ColorAction implements ActionListener {
        private Color background;        
        public ColorAction(Color background) {
            this.background = background;
        }

        public void actionPerformed(ActionEvent e) {
            contentPane.setBackground(background); //这里用到了外部类的私有成员变量
        }
    }
}
分享到:
评论

相关推荐

    java学习心得

    - **数据抽象**:通过类的定义,隐藏内部数据结构,仅暴露公共接口。 - **封装**:确保对象的内部状态只能通过定义的方法来访问和修改,增加代码的安全性和稳定性。 - **分类**:将相似的对象归类到相同的类别中,...

    AIC的Java课程1-6章

     能够使用类Arrays和Collections中的方法操作数组和集合。  知道实现比较器(Comparable,Comparator)用于排序算法(多态性)。  [*]了解同步包装和不可修改包装。 第12章 IO与串行化 2...

    Java源码阅读的真实体会.精选.doc

    理解FileReader等类的内部实现,以及整个IO架构图,有助于构建清晰的IO知识体系。Java IO包中,接口和继承关系的运用非常优雅,对于理解面向接口编程和设计模式有很大帮助。 当对基础有了足够的理解后,可以尝试...

    java内存管理

    Java内存管理是Java编程中的核心概念,它涉及到程序运行时如何高效地分配、使用和回收内存。在Java中,内存管理主要由JVM(Java Virtual Machine)负责,其中包括了垃圾收集机制,确保程序不会因为内存泄漏而导致...

    java自动售货机实验报告

    本实验旨在通过实际编程实践,加深学生对Java语言中循环控制结构的理解与运用能力,特别是`for`、`while`以及`do...while`循环的应用场景选择,进一步熟悉`switch-case`语句在条件判断中的使用。 #### 二、实验背景...

    java开发心的《java夜未眠》

    《Java夜未眠》这本书是作者在长期的Java开发实践中积累的心得体会,旨在帮助Java学习者更好地理解和掌握这门语言,避免常见的学习误区。书中的内容深入浅出,覆盖了从基础到进阶的多个方面,对于初学者和有一定经验...

    《Java2程序设计实用教程(第2版)》例题

    通过动手实践,你可以深入体会Java的强大功能,逐步成长为一名熟练的Java开发者。书中例题覆盖了上述所有知识点,对于每个例题,建议读者不仅要运行代码,还要理解其背后的逻辑和设计思路,以便于在实际项目中灵活...

    java设计模式之适配器模式.zip

    在Java编程中,适配器模式能够帮助我们复用已有的类,或者解决新旧系统之间的接口不匹配问题,从而提高代码的可重用性和灵活性。 适配器模式主要有两种形式:类适配器模式和对象适配器模式。在类适配器模式中,...

    《实用数据结构教程Java语言描述》源代码

    《实用数据结构教程Java语言描述》是一本深入探讨数据结构的教材,主要针对使用Java编程语言的读者。这本书的核心目标是帮助读者理解并掌握各种基本和高级数据结构的原理、实现以及它们在实际问题中的应用。通过源...

    java设计模式思想

    通过实际编码实现这些模式,读者可以更加深刻地体会到每个模式的优势和应用场景。例如,在实现单例模式时,可以通过懒汉式和饿汉式两种方式来创建唯一的实例;在应用工厂模式时,则可以通过抽象工厂或简单工厂等不同...

    java设计模式之外观模式.zip

    在Java中,我们可以创建一个外观类,该类持有对各个子系统对象的引用,并且提供方法来调用子系统的方法。客户端只需与外观类交互,无须知道子系统的具体实现。例如: ```java // 外观类 public class Facade { ...

    java几种常用的设计模式源码和心得

    本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入理解和应用这些模式具有很大的帮助。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式(Creational ...

    Java面向对象课程设计报告画图板毕业设计(论文)word格式.doc

    3. **图形保存与加载**:可以使用Java中的`ImageIO`类来处理图像的保存和加载操作。例如,`ImageIO.write(image, formatName, output)`用于将图像写入文件,而`ImageIO.read(input)`则用于从文件中读取图像。 4. **...

    Java Concurrency In Practice Learning Note

    博客文章“Java Concurrency In Practice Learning Note”则是一位开发者在阅读本书后的心得体会,通过链接(已给出)我们可以获取更多实践中的经验分享。 并发编程的核心在于如何高效地利用多核处理器资源,同时...

    用源码论述Eclipse学习体会

    它的主要特点和优势在于其灵活的插件体系结构,使得它不仅适用于Java开发,还可以通过安装不同的插件扩展到其他编程语言和应用场景。 首先,Eclipse 的体系结构是以插件为中心的。核心平台非常精简,大部分功能都是...

    java数据结构实验代码之升序顺序表.pdf

    1. **基本框架图**:通常会包含类图,显示顺序表接口(LList)和顺序表类(SeqList)之间的关系,以及类内部的属性和方法。 2. **设计想法**:首先定义一个接口LList,声明顺序表所需的操作。然后实现这个接口的...

    网易面试体会

    这些框架的理解不仅要停留在使用层面,还需要了解其内部工作原理,有时甚至需要阅读源代码来加深理解。 字符串处理也是面试中常考的部分,StringBuffer和StringBuilder的区别和联系是面试官常常会提及的问题。理解...

Global site tag (gtag.js) - Google Analytics