`
xly1981
  • 浏览: 149272 次
  • 性别: 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编程思想》.pdf

    本书不仅仅覆盖了Java的基本语法和面向对象编程的基础,更深入到Java内存管理、异常处理、多态性、接口、内部类、泛型、并发编程等高级主题。作者Bruce Eckel以丰富的实例和独特的视角引导读者理解和掌握Java编程的...

    java学习心得

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

    AIC的Java课程1-6章

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

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

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

    java常见疑惑与陷阱

    例如,了解`String`类内部的实现细节有助于我们更好地使用字符串对象;熟悉集合框架的不同组件可以帮助我们编写更高效的代码;掌握锁机制和并发工具则可以使我们在开发多线程应用时更加得心应手。 总之,不断探索和...

    java内存管理

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

    java自动售货机实验报告

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

    week01+java基础代码练习串有算法和给类测试题目

    Java作为一种广泛使用的编程语言,在全球有着众多的使用者和开发者。对于初学者而言,学习Java的历程通常始于理解其基础语法、算法思想以及面向对象的概念。本文将深入探讨Java编程的这些基础要素,并分析其在实际...

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

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

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

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

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

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

    初学JAVA制作的坦克大战小游戏,使用JAVA 的GUI模拟2,5D界面.zip

    在这个坦克大战游戏中,开发者可能使用了Java Swing或JavaFX这类图形库来创建GUI,并通过编程实现了坦克的移动、射击以及敌对坦克的AI行为。 值得注意的是,制作这样一个游戏不仅仅是编程的练习,它还需要一定的...

    【Java面向对象编程】封装、继承和多态原理与应用实例:提升代码安全性和复用性的核心机制详解

    使用场景及目标:①掌握封装的基本原则,学会使用访问控制修饰符保护类的属性和方法;②理解继承机制,能够在项目中合理构建类的层次结构;③熟悉多态的应用,利用父类引用指向子类对象实现灵活的方法调用。 阅读...

    java聊天系统源码.zip

    Java聊天系统源码.zip文件是一个压缩包,里面包含了Java语言编写的聊天系统的源代码。这份源代码是作为毕业设计的一部分,因此它的开发目的是提供一个可供学习和参考的聊天平台实例。考虑到这是一个专门针对Java语言...

    数据结构_Java_C_翻新笔记_学习实现_1741867677.zip

    紧接着,“数据结构_Java_C_翻新笔记_学习实现”这个文件可能详细记录了在Java和C语言环境下,数据结构各个基本组件的实现方式和使用场景。例如,数组、链表、栈、队列、树、图等数据结构在Java和C语言中的实现细节...

    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. **...

Global site tag (gtag.js) - Google Analytics