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 日

相关推荐

  • 全网首发2025goland激活码免费申领,权威破解教程

    声明:本教程所涉及的 GoLand 破解补丁与激活码均来自互联网公开渠道,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版! GoLand 是 JetBrains 专为 Go 语言打造的 IDE,跨 Windows、macOS、Linux 三大平台,功能全面。下文将手把手教你借助破解补丁完成永久激活,解锁全部高级特性。 无论你当前是 2025.2 还是…

    2025 年 11 月 12 日
    58500
  • DataGrip2026激活破解最简单方法三步搞定

    本教程适用于IDEA、PyCharm、DataGrip、Goland等JetBrains系列所有产品! 无需多言,先展示最新版本成功激活的截图,如下所示,可以看到软件已成功授权至2099年,非常给力! 接下来,我将通过详细的图文步骤,为大家完整演示如何将DataGrip激活至2099年。 此激活方案同样兼容此前的旧版本软件! 无论您使用的是何种操作系统或软件…

    DataGrip激活码 2026 年 5 月 20 日
    23200
  • datagrip破解方案更新+激活码自动激活

    本教程适用于IDEA、PyCharm、DataGrip、Goland等,支持Jetbrains全家桶! 废话不多说,先上最新版本破解成功的截图,如下,可以看到已经成功破解到 2099 年辣,舒服! 接下来,我就将通过图文的方式, 来详细讲解如何激活DataGrip至 2099 年。 当然这个激活方法,同样适用于之前的旧版本! 不管你是什么操作系统,什么版本,…

    DataGrip激活码 2025 年 12 月 19 日
    43900
  • IDEA破解是否影响更新?经验分享来了!

    声明:下文所述 IntelliJ IDEA 破解补丁、激活码均来源于互联网公开渠道,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版! IntelliJ IDEA 是 JetBrains 出品的一款跨平台 IDE,支持 Windows、macOS 与 Linux。本教程将手把手演示如何借助破解补丁完成永久激活,解锁全部高级特性。 无论你使用哪个版本、哪…

    IDEA破解教程 2025 年 9 月 14 日
    37200
  • 限时领取intellij idea激活码,配套intellij idea破解教程同步上线

    声明:下文所涉 IntelliJ IDEA 破解补丁与激活码均源自网络公开渠道,仅供个人学习研究,禁止商业用途。若遇侵权,请立即联系作者删除。条件允许时,请支持正版! IDEA 是 JetBrains 出品的一款跨平台开发利器,支持 Windows、macOS 与 Linux。本文将手把手演示如何借助破解补丁完成永久激活,一次性解锁全部高级特性。 无论你安装…

    2025 年 11 月 4 日
    28000

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信