--内部类

目录

1. 成员内部类

2. 静态内部类

3. 局部内部类

4. 匿名内部类


 在Java中,内部类是定义在其他类内部的类。内部类有以下几种形式:成员内部类、静态内部类、局部内部类和匿名内部类。


1. 成员内部类


概念
成员内部类是定义在外部类的成员位置上的类。它与外部类之间具有一种特殊的关系,即成员内部类可以访问外部类的成员,包括私有成员。
 实现原理
在Java编译器编译成字节码时,对于成员内部类的实现原理如下:

内部类是一个独立的类文件,它的类名为"外部类$内部类"。
内部类的字节码文件中包含一个指向外部类的引用,以便访问外部类的成员。
在外部类的实例化过程中,会创建内部类的实例,并将外部类的引用传递给内部类,以建立它们之间的关联关系。

public class OuterClass {private int outerData = 10;public void outerMethod() {InnerClass inner = new InnerClass();inner.innerMethod();}// 成员内部类class InnerClass {private int innerData = 20;public void innerMethod() {System.out.println("外部类的数据:" + outerData);System.out.println("内部类的数据:" + innerData);}}public static class Main {public static void main(String[] args) {OuterClass outer = new OuterClass();outer.outerMethod();}}
}

2. 静态内部类


概念
静态内部类是定义在外部类中的静态类。它与外部类之间没有特殊的关系,可以看作是独立的类。静态内部类可以访问外部类的静态成员,但不能直接访问外部类的非静态成员。
实现原理
静态内部类的实现原理与成员内部类相比较简单:

静态内部类是一个独立的类文件,它的类名为"外部类$内部类"。
静态内部类中不包含对外部类的引用,因此可以直接访问外部类的静态成员。

public class OuterClass {private static int outerData = 10;private int nonStaticData = 20;public void outerMethod() {StaticInnerClass inner = new StaticInnerClass();inner.innerMethod();}// 静态内部类static class StaticInnerClass {private int innerData = 30;public void innerMethod() {System.out.println("外部类的静态数据:" + outerData);// System.out.println("外部类的非静态数据:" + nonStaticData); // 错误,无法直接访问外部类的非静态成员System.out.println("内部类的数据:" + innerData);}}
}class Main {public static void main(String[] args) {OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();inner.innerMethod();}
}

3. 局部内部类


 概念
局部内部类是定义在方法或代码块内部的类。它的作用域仅限于所在的方法或代码块内部,外部无法访问局部内部类。
 实现原理
局部内部类的实现原理与成员内部类和静态内部类有所不同:

局部内部类的字节码文件名由编译器生成,类似于"外部类$数字"的形式。
局部内部类的字节码文件中不包含对外部类的引用。
在外部类的实例化过程中,如果局部内部类没有被使用,则不会创建局部内部类的实例。

OuterClass {private int outerData = 10;public void outerMethod() {class LocalInnerClass {private int innerData = 20;public void innerMethod() {System.out.println("外部类的数据:" + outerData);System.out.println("内部类的数据:" + innerData);}}LocalInnerClass inner = new LocalInnerClass();inner.innerMethod();}
}class Main {public static void main(String[] args) {OuterClass outer = new OuterClass();outer.outerMethod();}
}

4. 匿名内部类


 概念
匿名内部类是一种没有名字的内部类,它没有定义在独立的类文件中,而是直接定义在方法或代码块中。匿名内部类通常用于创建一个只需要使用一次的类的实例。
实现原理
匿名内部类的实现原理是通过创建一个继承了某个类或实现了某个接口的子类来实现的。在编译时,编译器会自动生成一个类文件,并创建该类的实例。

public class OuterClass {public void outerMethod() {// 匿名内部类实现接口Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("匿名内部类执行");}};Thread thread = new Thread(runnable);thread.start();}
}class Main {public static void main(String[] args) {OuterClass outer = new OuterClass();outer.outerMethod();}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zigbee技术在智能农业领域的应用研究

Zigbee技术在智能农业领域的应用研究 **摘要:**随着现代信息技术的飞速发展,智能农业已成为当今农业发展的新趋势。Zigbee技术作为一种低功耗、低成本的无线通信技术,在智能农业领域具有广泛的应用前景。本文深入分析了Zigbee技术的原理和特…

opencv 十九 python下实现多线程间rtsp直播流的复用

在多线程拉流的任务场景中,有时需要将一个rtsp拉取多次,每重新打开一次rtsp视频流就要多消耗一次带宽,为此基于类的静态对象实现rtsp视频流的复用。 1、实现代码 import threading import cv2,time #接收摄影机串流影像,采用多线…

【嵌入式机器学习开发实战】(七)—— 政安晨:通过ARM-Linux掌握基本技能【环境准备:树莓派】

ARM-Linux是一种针对ARM架构的操作系统,它的设计目标是在低功耗、低成本的硬件平台上运行。ARM-Linux可以运行在多种ARM处理器上,包括树莓派。 树莓派(Raspberry Pi)是一款基于ARM架构的单板计算机,由英国的树莓派基金…

【系统架构师】-第12章-信息系统架构

信息系统架构(ISA)是指对某一特定内容里的信息进行统筹、规划、设计、安排等一系列有机处理的活动。 为了更好地理解信息系统架构的定义, 特作如下说明: (1)架构是对系统的抽象,它通过描述元素、元素的外部可见属性及元素之间的关系来反映这种抽象。因此…

open_clip仓库成分与模型文件model.py 介绍

起因: 在DA-CLIP的开源库的DA-CLIP.md中自述该项目基于CLIP 和open_clip,在之前的退化类型检测中 我一度以为仓库只是使用了CLIP 的源码, 然而当发现缺少da-clip的模型名称时,我发现DA-CLIP使用的完全是open_clip的代码版本&#…

16.JRE和JDK

程序员在编写代码的时候其实是需要一些环境,例如我们之前写的HelloWorld。我们需要的东西有JVM、核心类库、开发工具。 1、JVM(Java Virtual Machine):Java虚拟机,真正运行Java程序的地方。没有虚拟机,代码…

【微服务篇】分布式事务方案以及原理详解

分布式事务是指事务参与者、资源服务器、事务管理器分布在不同的分布式系统的多个节点之上的事务。在微服务架构、大型分布式系统和云计算等环境中,由于系统间调用和资源访问的复杂性,分布式事务变得尤为重要。 应用场景 跨系统交易:当交易…

C语言例4-9:格式字符s的使用例子

代码如下&#xff1a; //格式字符s的使用例子 #include<stdio.h> int main(void) {printf("%s,%5s,%-5s\n","Internet","Internet","Internet");//以三种不同格式&#xff0c;输出字符串printf("%10.5s,%-10.5s,%4.5s\n&q…

JAVA 100道题(22)

22.实现一个生产者-消费者问题&#xff0c;使用Java的线程同步机制。 生产者-消费者问题是一个经典的并发编程问题&#xff0c;其中生产者产生数据&#xff08;或产品&#xff09;&#xff0c;消费者消费这些数据。在Java中&#xff0c;我们可以使用wait()和notify()方法或者Bl…

2024年03月CCF-GESP编程能力等级认证C++编程五级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第1题 唯一分解定理描述的内容是( )? A. 任意整数都可以分解为素数的乘积 B. 每个合数都可以唯一分解为一系列素数的乘积 C. 两个不…

rtthread studio 基于bsp生成代码stm32l475正点原子潘多拉,以及硬件配置

1、基于bsp生成代码 rtthread studio 很强大的一个功能就是可以根据芯片或者bsp 生成驱动代码&#xff0c;而且rtthread内核 已经集成到了代码中&#xff01;&#xff01;只需要关注于如何使用硬件和设备完成我们想要的功能就可以&#xff1b; 它的官网文档也特别详细&#x…

实用有趣的宝藏网站推荐!【第二期】

上次给大家推荐了10个宝藏网站&#xff08;http://t.csdnimg.cn/qcRWY&#xff09;&#xff0c;这次我又来啦&#xff01; 话不多说&#xff0c;直接开始&#xff01; 先收藏&#xff0c;防止以后找不到了&#xff01; 整理不易&#xff0c;顺便把赞留下吧&#xff01; 1. 爱…

江苏开放大学2024年春《市政管理学050011》第一次形考作业参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 电大搜题 多的用不完的题库&#xff0c;支持文字、图片搜题…

代码随想录算法训练营Day55 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离

583. 两个字符串的删除操作 这道题的状态方程比上一题简单一些 初始化如下 class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size() 1, vector<int>(word2.size() 1));for (int i 0; i < word1…

数学错误总是越走越远,因为对前人一概不敢否定

最近整理了一下我以前对Erds-Turn猜想研究做的分析&#xff0c;得到的结论是&#xff1a;1927年产生的van der Waerden的结果尚未被正确证明&#xff0c;现存几个证明都有问题&#xff0c;特别地[F]的方法中无法证明在那个定义下的度量产生的拓扑里某些闭集是紧致集&#xff08…

2024年数字IC秋招-沐曦-GPU验证-笔试题

文章目录 前言一、选择题1. [多选]在Verilog里面&#xff0c;操作的可能的结果是2. [单选]在Verilog里面,如果想在逻辑中引入延时&#xff0c;可以使用3. [单选]如果X 4b1100,那么以下哪条语句会被执行?4. [多选]在Verilog里面&#xff0c;以下哪些对于操作符的描述是正确的5.…

Linux 基础IO [缓冲区文件系统]

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 目录 前言 一.Linux下一切皆文件 二.缓冲…

在线接口文档预言方案

在线接口文档预言方案 要求&#xff1a; ​ 支持自动生成接口文档 ​ 能够支持在线测试(http&#xff0c;websocket) ​ 对代码没有侵入性 一、目前涉及的相关技术收集 sudo apt update #更新数据 sudo apt upgrade #更新软件 sudo apt install openssh-server #下载安装…

数据结构与算法-分治算法

数据结构与算法 数据结构与算法是计算机科学中的两个核心概念&#xff0c;它们在软件开发和问题解决中起着至关重要的作用。 数据结构 数据结构是计算机中存储、组织和管理数据的方式&#xff0c;它能够帮助我们高效地访问和修改数据。不同的数据结构适用于不同类型的应用场…

14.黑盒测试

黑盒测试、白盒测试考题固定&#xff0c;重视&#xff01;&#xff01;&#xff01; 等价类、边界值、场景法&#xff1b;考察频率高&#xff01;&#xff01;&#xff01; 因果图&#xff0c;偶尔考&#xff1b;要能看懂因果图&#xff0c;结合题干填写缺失的部分内容&#x…