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 日

相关推荐

  • DataGrip激活脚本怎么用?附bash命令参考!

    免责声明:下文提到的 DataGrip 破解补丁与激活码均来自互联网公开分享,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版!官方正版低至 32 元/年:https://panghu.hicxy.com/shop/?id=18 DataGrip 是 JetBrains 出品的多平台数据库 IDE,支持 Windows、macOS 与 Linux。本文…

    DataGrip激活码 2025 年 9 月 13 日
    22100
  • 无需插件直接获取goland激活码,权威破解教程

    免责声明:以下教程所涉及的 GoLand 破解补丁与激活码均来源于互联网公开分享,仅供个人学习研究之用,禁止任何商业用途。若条件允许,请支持正版! 先放一张成果图镇楼:GoLand 2025.2.1 已成功激活至 2099 年,爽翻! 下面用图文一步步带你搞定最新版 GoLand 的“永久”激活。 前期准备 ⚠️ 如果你之前折腾过别的补丁却没成功,强烈建议:…

    2025 年 11 月 10 日
    12600
  • 2025年最新DataGrip激活码永久破解教程 – 支持Windows/Mac/Linux全系统

    本教程适用于JetBrains全家桶,包含DataGrip、PyCharm、IDEA等所有开发工具! 先展示最新DataGrip版本成功破解的截图,可以看到已完美激活至2099年,运行非常稳定! 下面将通过详细的图文教程,一步步教你如何将DataGrip永久激活至2099年。 此方法不仅适用于最新版本,旧版本同样有效! 支持Windows/Mac/Linux…

    DataGrip激活码 2025 年 8 月 1 日
    54500
  • pycharm破解2025最新+激活码同步更新

    免责声明:本教程所分享的PyCharm破解补丁及激活码均为网络收集,仅限个人学习使用,严禁商业用途。若涉及侵权,请联系作者删除。经济条件允许的话,强烈建议购买正版授权! 话不多说,先上图证明实力。下图是PyCharm 2025.2.1版本破解成功的界面截图,可以看到授权有效期已激活至2099年,相当给力! 接下来将通过图文详解的方式,手把手教你破解最新版Py…

    PyCharm激活码 2026 年 1 月 5 日
    42800
  • 最新pycharm破解优化指南+永久激活码演示

    申明:本教程 PyCharm破解补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 ! PyCharm是 JetBrains 推出的开发编辑器,功能强大,适用于 Windows、Mac 和 Linux 系统。本文将详细介绍如何通过破解补丁实现永久激活,解锁所有高级功能。 不管你是什么版本、什么操作系统…

    PyCharm激活码 4天前
    2100

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信