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
上一篇 2025 年 7 月 26 日
下一篇 2025 年 7 月 26 日

相关推荐

  • GoLand激活保姆级教程来了,新手必看!

    免责声明:以下教程所涉及的 GoLand 破解补丁与激活码均来源于互联网公开渠道,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版! 先放一张成功截图镇楼:GoLand 2025.2.1 已顺利激活到 2099 年,稳! 下面用图文方式带你一步步搞定最新版 GoLand 的激活。 前期清理 若你之前尝试过其他补丁却失败,建议先彻底卸载旧版,或手动清理残…

    2025 年 9 月 18 日
    46400
  • 一文汇总pycharm激活码所有获取方式与破解教程

    免责声明:下文所述 PyCharm 破解补丁、激活码均搜集自互联网,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版! PyCharm 是 JetBrains 出品的一款跨平台 IDE,Windows、macOS、Linux 均可流畅运行。本文将手把手演示如何借助破解补丁完成永久激活,解锁全部专业功能。 无论您当前使用哪个版本、哪种系统,下文步骤都已为…

    2025 年 10 月 20 日
    1.2K00
  • PyCharm激活工具排行榜|最好用的五款工具推荐!

    本指南同样适用于 IntelliJ IDEA、DataGrip、GoLand 等 JetBrains 全家桶产品,一步到位,无需重复折腾! 先放一张成功截图镇楼:PyCharm 已激活至 2099 年,爽到飞起! 下面用图文形式手把手演示,如何把 PyCharm 直接干到 2099 年。老版本也能用,Win / macOS / Linux 全平台通杀,成功率…

    PyCharm激活码 2025 年 9 月 17 日
    67700
  • Java通过百度地图API获取定位-普通IP定位

    登录邮箱提醒功能实现:基于IP定位的实践指南 在本项目中,我们旨在通过用户的IP地址获取其地理位置信息,以便在登录邮箱时提供更精确的提醒。以下是实现该功能的详细步骤和代码示例。 百度地图开放平台 本文将详细介绍如何利用百度地图开放平台的API来实现IP定位功能。首先,访问百度地图开放平台官网了解更多信息。 开始前的准备工作 在开始之前,我们需要完成以下步骤:…

    未分类 2024 年 12 月 27 日
    79000
  • 最新datagrip破解视频讲解+永久激活码配置

    免责声明:下文所述 DataGrip 2025.2.1 破解补丁与激活码均源自网络公开资源,仅限个人学习研究,禁止商业用途。若遇版权争议,请立即联系作者删除。条件允许时,请支持正版! 先放一张“战果”:DataGrip 已成功激活到 2099 年,爽歪歪! 下面用图文方式手把手带你完成最新版 DataGrip 的激活流程。 嫌折腾?官方正版全家桶低至 32 …

    DataGrip激活码 2025 年 11 月 12 日
    26700

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信