跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 内部类详解

综述由AI生成Java 内部类允许将一个类定义在另一个类或方法内部。主要分为实例内部类、静态内部类、匿名内部类和局部内部类。实例内部类持有外部类引用,可访问外部成员;静态内部类无需外部类实例,不能直接访问外部非静态成员;匿名内部类常用于实现接口或继承类;局部内部类定义于方法中且作用域受限。通过代码示例对比了各类内部类的语法及字节码生成规则。

编程诗人发布于 2026/2/7更新于 2026/5/3123 浏览
Java 内部类详解

Java 内部类

一个事物的内部,还需要一个完整的结构进行描述,而这个结构只为外部服务,这个内部的完整结构叫内部类。可以将一个类定义到另一个类内,或一个方法内,里面的是内部类,外面的是外部类。

实例内部类

  1. 如何实例化内部类
  2. 外部类的成员在内部类中都能直接访问
package test2;

class OutClass {
    private int a = 3;
    public static int b = 2;

    class InClass {
        private int a = 1;

        // 在运行时确定的
        // static 修饰的调用不需要实例化就能调用,而这个变量在内部类需要实例化内部类才能使用
        // public static int d = 2;
        public static final int d = 3; // 在编译的时候就确定了,是个常量,不依赖于实例化
        public int e = 2;

        public void test() {
            System.out.println("inClass::test");
            System.out.println(this.a);      // 1
            System.out.println(a);           // 1
            System.out.println(OutClass.this.a); // 3
        }
    }

    public void test() {
        InClass inclass = new InClass();
        System.out.println(inclass.a);
        System.out.println(inclass.e);
        System.out.println("outClass::test");
    }
}

public class TestNbl {
    public static void main(String[] args) {
        // 实例化内部类
        OutClass class1 = new OutClass();
        OutClass.InClass class2 = class1.new InClass();
        OutClass.InClass class3 = new OutClass().new InClass();
        class1.test();
        class2.test();
    }
}
  1. 字节码文件 外部类类名$内部类类名.class

静态内部类

创建外部类对象的引用。静态内部类不需要有外部类对象的引用。

class OClass {
    private int a = 1;
    public static int b = 2;
    public int c = 3;

    static class IClass {
        public int d = 4;
        public static int e = 5;
        private int f = 6;

        public void test() {
            OClass Out = new OClass();
            System.out.println(Out.a);
            System.out.println(b);
            System.out.println(Out.c);
            System.out.println(d);
            System.out.println(e);
            System.out.println(f);
            System.out.println("iclass::test");
        }
    }

    public void test() {
        System.out.println("oclass::test");
    }
}

public class TestNbl {
    public static void main(String[] args) {
        OClass.IClass a = new OClass.IClass();
        a.test();
    }
}

匿名内部类

你有一个类实现了 IA 接口,重写了 test 方法。

interface IA {
    void test();
}

public class TestNbl {
    public static void main(String[] args) {
        // 第一种方法调用
        // 匿名内部类对象
        IA a = new IA() {
            public void test() {
                System.out.println("重写了接口的方法!");
            }
        };
        a.test();

        // 第二种方法调用
        new IA() {
            public void test() {
                System.out.println("重写了接口的方法!");
            }
        }.test();
    }
}

局部内部类

  1. 只能在其方法内部使用

  2. 不能被 public 和 static 修饰符修饰

  3. 很少使用

  4. 字节码文件 局部内部类在编译后会生成类似 OuterClass$1LocalInnerClass.class 的文件。

目录

  1. Java 内部类
  2. 实例内部类
  3. 静态内部类
  4. 匿名内部类
  5. 局部内部类
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 免费 Trae 编辑器体验:i18n 任务排队与模型调度机制分析
  • Android 陀螺仪基础:传感器数据与角度积分计算
  • GitHub 镜像加速实战:FastGit 与 Zhimg 部署指南
  • Arthas 实战:结合 IDEA 的 Java 线上排查流程
  • LLM 驱动的智能体(Agent)应用与实践指南
  • MATLAB 实现基于天牛须搜索算法(BAS)的无人机三维路径规划
  • 使用 for...of 实现异步任务串行执行
  • AI 大模型核心概念、原理与应用梳理
  • 单 Agent 与多 Agent 系统架构对比及选型指南
  • Unreal 对 C++ 的改造:UObject 对象模型详解
  • AIGC 技术发展历程、核心技术与应用前景
  • 前端面试题精选:ES6、Vue、跨域及性能优化详解
  • OpenClaw:从程序员玩具到开源 AI 代理的演变
  • Cursor + Figma MCP:AI 自动化还原设计稿实战
  • Windows 下 Python 包管理工具 uv 安装与 VSCode 配置指南
  • 获取豆包 AI API Key 并接入前端项目
  • SpringBoot 自动配置原理与实战详解
  • 数据结构基础:堆的概念与实现
  • MyBatis 动态 SQL 标签详解
  • Python 并发编程实战:多线程、多进程与线程池应用

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online