• 【12】Head First Java 学习笔记


    HeadFirst Java

    本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。

    第一章 Java入门
    第二章 面向对象
    第三章 变量
    第四章 方法操作实例变量
    第五章 程序实战
    第六章 Java函数库
    第七章 继承与多态
    第八章 深入多态
    第九章 构造器与垃圾收集器
    第十章 数字与静态
    第十一章 异常处理
    第十二章 图形用户接口 GUI


    前言

    这一章承接上一章,继续设计音乐播放器。但GUI并不是我学习Java的重点,这里只简单介绍相关概念了~有兴趣的朋友,可以阅读本书第十二章。

    windows、图形

    JFrame——window对象
    组件

    监听、事件源、事件

    ActionEvent 事件,按钮是其来源
    .addActionListener(ActionListener) 向按钮注册,调用该方法的就是按钮
    ActionListener 监听接口,必须实现actionPeformed()

    ActionEvent 只是携带数据的载体
    事件源会在用户操作时产生事件(比如:用户按下按钮,按钮是事件源)
    想要获得按钮的事件,必须有监听接口监听对应事件。而我们编写代码主要就是写这一块,以及监听到后的处理。

    如何取得按钮的ActionEvent (监听和事件源沟通)

    实现对应事件监听接口——就是写好继承通用监听接口的类~
    对按钮注册——即告知按钮,我会监听某某事件
    定义事件处理方法——当按钮触发,接口就会听到,并执行该方法

    还记得第七八章吗,接口是一个纯抽象类,继承它必须实现其方法!
    这里讲的很粗糙,主要只介绍了后续内部类需要的铺垫,因为内容是基于GUI设计程序写的,不过多关注,这里大家不舒服可以看看原书P357-362.
    在这里插入图片描述

    多个按钮,不同事件?——内部类(本章重点!)

    内部类可以存取外部类的方法与实例变量(包括私private)
    内部类的实例存取外部类实例的内容——只能存取他所属的
    在这里插入图片描述

    非常特殊的异常情况:内部类定义在静态方法中。大家可以思考以及搜索一下~

    如何创建内部类的实例

    内部对象(实例)会绑在 执行 初始化内部类的代码(方法)的对象(实例)上。

    对象就是指类模板创建的一个实例~,这里简单回顾一下。

    class Outer {
    	private int x;
    	//Inner inner = new Inner(); 创建外部类对象时,直接初始化也可以~
    	public void InitInner() {
    		Inner inner = new Inner();
    	}
    	class Inner {
    		void go() {
    			x = 42;
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    回到实现按钮程序,如下图,更好体会内部类的意义。
    在这里插入图片描述

    P373~374提出三种方法,但都不如内部类
    实现两个Peform,不合理!不能在同一个类中实现一个方法两次。
    两个按钮注册同一个监听口,不够面向对象。因为进行Pefrom需要查询事件源,后续增加或者改变维护不方便
    创建不同的监听口。不行,存取不到Mygui上的变量~
    在这里插入图片描述
    在这里插入图片描述

    总结

    内部类——提供在一个类中实现同一接口的多次机会

    一般的类,不能实现同一个方法两次(执行内容不同)!
    但使用内部类,就可以不同的方式实现同一的接口的某个方法

    思考——内部类就是用来实现这种 按钮事件处理程序 吗?(非常重要的思考)

    为什么不直接实现独立的类?
    ——需要多次实现同一个接口!
    ——两个不同的类表示两种事物,这才是面向对象!
    内部类无法重用,何必这样?
    ——IS-A与多态思想!外部与内部类需要通过不同的IS-A测试!
    ——我们知道注册方法必须是ActionListener类,但如果某类已经继承了其他类怎么办?
    ——类可以继承多个接口,但只能有一个父类。那内部类的意义到底体现在哪?体现在IS-A测试与多态
    ——举个例子,某类不能既是Dog又是监听接口(不合理对吧),但有时必须这样(甲方非要好几个狗按钮的监听接口?),那么内部类就有作用了。
    即 Dog继承Animal,Dog IS-A 动物,但Dog IS-not 监听接口;这时通过内部类代表监听接口。多个内部类 IS-A 监听接口,这样我们通过了IS-A测试,且对监听接口(ActionListener类)也实现了多次!方便方法(addActionListener)传参数时以多态形式传入

  • 相关阅读:
    智工教育:注册计量师一级和二级的科目一样吗?
    【第一篇】- 深入学习Git 教程
    [C国演义] 第十七章
    MySQL JSON_TABLE() 函数
    mybatis条件判断及动态sql的简单拓展
    【机器学习教程】二、逻辑回归:从概率到分类的利器
    Redis1:Redis介绍、Redis基本特性、关系型数据库、非关系型数据库、数据库发展阶段
    模型可视化工具Netron手把手教学
    CameraProvider进程-Android12
    135.如何进行离线计算-1
  • 原文地址:https://blog.csdn.net/weixin_45845008/article/details/138165887