08 – 面向对象编程的高阶部分解析

一、类中的组成部分 - 代码块

基本概况

代码块是类的五大组成部分之一,其余部分包含成员变量、构造器、方法以及内部类。

代码块的种类

静态代码块

其格式为static {},特性是在类加载时自动执行,由于类仅加载一次,所以静态代码块也仅执行一次。它的作用是完成类的初始化,比如对静态变量进行初始化赋值。

示例代码:

public class CodeBlock {
    // 静态资源
    public static String name;
    public static String[] pokeCards = new String[54];

    // 静态代码块
    // 主要功能:对类的静态资源进行初始化
    static {
        System.out.println("===静态代码块执行了===");
        name = "可乐";
        pokeCards[0] = "A";
        pokeCards[1] = "2";
        // 此处省略其他类似赋值语句
    }

    public static void main(String[] args) {
        // 目的:认识代码块,理解代码块的执行顺序与基本作用
        System.out.println("===main方法执行了===");
    }
}

执行结果:

===静态代码块执行了===
===main方法执行了===
实例代码块

格式为{},特点是每次创建对象时都会执行实例代码块,且在构造器之前执行。作用与构造器相同,用于完成对象的初始化,例如对实例对象进行初始化。

示例代码:

public class CodeBlock {
    // 实例变量
    private String name;
    private String[] direction = new String[4];

    // 实例代码块,无static修饰,属于对象相关
    // 基本功能:初始化对象的实例资源
    {
        System.out.println("===实例代码块执行了===");
        name = "可乐";
        direction[0] = "东";
        direction[1] = "南";
        direction[2] = "西";
        direction[3] = "北";
    }

    public static void main(String[] args) {
        // 目的:认识代码块,理解代码块的执行顺序与基本作用
        System.out.println("===main方法执行了===");
        new CodeBlock();
    }
}

执行结果:

===main方法执行了===
===实例代码块执行了===

二、内部类

基本概述

若一个类定义在另一个类的内部,该类便称为内部类。使用场景为当一个类的内部包含完整事物且无单独设计必要时,可将该事物设计为内部类。

示例代码:

public class Car {
    // 内部类
    public class Engine {
    }
}
成员内部类

是类中的普通成员,如同普通成员变量、成员方法。

示例代码:

// 外部类
public class OuterClass {
    // 外部类静态变量
    public static String name = "可乐";

    // 外部类实例变量
    private int age;

    // 外部类静态方法
    public static void test() {
    }

    // 成员内部类,无static修饰,属于外部类对象持有
    public class InnerClass {
        public void show() {
            System.out.println("成员内部类的show方法");
            // 成员内部类可直接访问外部类的静态变量
            System.out.println(name);

            // 成员内部类可直接访问外部类的静态方法
            test();

            // 成员内部类可直接访问外部类的实例成员
            System.out.println(age);
        }
    }
}

public class InnerClassDemo {
    public static void main(String[] args) {
        // 目标:理解成员内部类的语法
        // 成员内部类创建对象的格式
        // 外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
        OuterClass.InnerClass oi = new OuterClass().new InnerClass();
        oi.show();
        // 成员内部类访问外部类成员的特点:
        // 1、成员内部类可直接访问外部类的静态成员,也可直接访问外部类的实例成员
    }
}
静态内部类

带有static修饰的内部类,属于外部类自身持有。

示例代码:

// 外部类
public class OuterClass {
    // 静态内部类
    public static class InnerClass {
    }
}

// 语法
// 外部类名.内部类名 对象名 = new 外部类.内部类();
OuterClass.InnerClass oi = new OuterClass.InnerClass();

// 外部类
public class OuterClass {
    // 外部类静态变量
    public static String name = "可乐";

    // 外部类实例变量
    private int age;

    // 外部类静态方法
    public static void test() {
    }

    // 静态内部类,有static修饰,属于外部类持有
    public static class InnerClass {
        public void show() {
            System.out.println("静态内部类的show方法");
            // 静态内部类可直接访问外部类的静态变量
            System.out.println(name);

            // 静态内部类可直接访问外部类的静态方法
            test();

            // 静态内部类 不可 直接访问外部类的实例成员
            System.out.println(age); // 会报错
        }
    }
}

public class InnerClassDemo {
    public static void main(String[] args) {
        // 目标:理解静态内部类的语法
        // 静态内部类创建对象的格式
        // 外部类名称.内部类名称 对象名 = new 外部类名称.内部类名称();
        OuterClass.InnerClass oi = new OuterClass.InnerClass();
        oi.show();
        // 静态内部类访问外部类成员的特点:
        // 1、静态内部类可直接访问外部类的静态成员,不可直接访问外部类的实例成员
    }
}
局部内部类(了解)

局部内部类定义在方法、代码块、构造器等执行体中。

示例代码:

public class OuterClass {
    public static void main(String[] args) {

    }

    public static void go() {
        // 局部内部类
        class A {

        }

        abstract class B {

        }

        interface C {

        }
    }
}
匿名内部类(重点)

是特殊的局部内部类,所谓匿名,指程序员无需为该类声明名字,默认有隐藏名字。

语法:

new 类 或 接口(参数值) {
    类体(一般为方法重写);
};

示例:

new Animal() {
    @Override
    public void eat() {
    }
};

特点:匿名内部类本质是子类,会立即创建子类对象。作用是更方便地创建子类对象。

示例代码:

// 父类
public abstract class Animal {
    public abstract void cry();
}

// main
public class TestDemo {
    public static void main(String[] args) {
        // 匿名内部类 创建子类对象
        // 匿名内部类实际有名字,外部类名$编号.class(TestDemo$1.class)
        Animal a = new Animal() {
            @Override
            public void cry() {
                System.out.println("cat~");
            }
        };

        a.cry();
    }
}

匿名内部类在开发中常作为对象参数传输给方法,例如学生、老师参加游泳比赛场景。

// main
public class TestDemo {
    public static void main(String[] args) {
        // 目标:理解匿名内部类在开发中的用途,常作为对象参数传输给方法
    }
}

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12984.html

(0)
LomuLomu
上一篇 19小时前
下一篇 15小时前

相关推荐

  • 微服务架构下SpringBoot构建Docker镜像并整合SkyWalking全指南

    一、前言 随着微服务开发模式愈发成熟,微服务的健康状况检测以及服务间的链路追踪成为众多实际运营项目必须考虑的要素。在大型服务平台中,微服务链路追踪有着举足轻重的地位,它不仅能够监控各个服务的健康状态,还能协助开发、测试、运维等人员快速排查、分析并定位线上问题,同时可以对服务运行过程中各服务之间的调用情况以及性能瓶颈点进行定位等,几乎涵盖了服务运行过程中各项重…

    未分类 2025 年 6 月 18 日
    17400
  • java: JDK isn‘t specified for module ‘product-service‘问题解决

    目录 问题 解决方法 1.打开File->Project Structure… 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isn’t specified for module ‘product-service’ 查看pom.xml文件也添加了…

    2025 年 1 月 11 日
    33300
  • 【潜意识Java】Java匿名内部类深入笔记总结,助力开启高效编程新征程。

    目录 一、匿名内部类是什么 (一)概念引入 (二)语法结构 二、匿名内部类的优势 (一)简洁的代码表达 (二)灵活的功能实现 三、匿名内部类在实际场景中的应用 (一)图形绘制系统 (二)事件驱动编程 四、匿名内部类与局部内部类、成员内部类的比较 (一)与局部内部类的区别 (二)与成员内部类的区别 五、匿名内部类的注意事项 (一)访问外部变量的限制 (二)调试…

    2025 年 1 月 19 日
    37400
  • SpringBoot 3.5即将亮相,新特性超吸睛

    文章标题: Spring Boot 3.5即将登场,众多新特性引人瞩目 文章内容:Spring Boot 3.5将于本月发布,带来了不少值得关注的能力提升。以下是本次更新的重要亮点: 🚀 任务调度能力强化 :TaskDecorator优化定时任务机制 💾 Vibur连接池 :高性能数据库连接的全新可选方案 🔒 安全监控升级 :SSL证书状态清晰可见 ⚙ 配置…

    2025 年 6 月 24 日
    6400
  • 🚀 2025年最新IDEA激活码分享:永久破解IDEA终极教程(附破解补丁)

    💻 前言 本教程适用于JetBrains全家桶,包括IDEA、PyCharm、DataGrip、Goland等开发工具!无需复杂操作,小白也能轻松上手~ 先给大家看看最新IDEA版本破解成功的实锤截图👇 有效期直达2099年,简直不要太爽! 🔍 教程适用性 无论你使用的是:- 最新版IDEA 2024.3.5- 旧版本IDEA- Windows/Mac/Li…

    IDEA破解教程 2025 年 6 月 30 日
    14400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信