【Java语言】内部类

        可以将一个类的定义在另一个类或者一个方法内部(一般都是定义在类里面),在内部的类就称为内部类,在内部类的外部的类称为外部类。内部类可以在数据结构实现链表的结点等还有很多的地方使用它。然而内部类又分四种:静态内部类、实例内部类、局部内部类以及匿名内部类。

每一个内部类都有自己的字节码文件,对于内部类字节码文件就是外部类类名$内部类类名 ,对于匿名内部类字节码文件就是有些特殊是外部类类名$数字。

实例内部类

1.如何创建?

       实例化一个内部类不能和之前直接实例化一样(之前:Person p = new Person),创建内部类则是需要先创建一个外部类out,然后再创建的外部类.创建内部类,下图就是我所说的实例化一个对象。

2. 在实例内部中,是否可以定义静态的成员变量?

       在内部中,不可以定义静态变量,但是可以定义“常量”(即public static final int g = 7;)因为内部类依赖于外部类,必须外部类实例一个对象,内部类才能被创建,然而静态变量则是在创建外部类对象前就先实现的,这样这个静态变量就出现矛盾而报错。

3.当出现内部类与外部类数据成员一样时,怎没分辨这两者?

       我们既可以在内部类方法中调用也可以在实例完一个对象后调用。在内部类方法中调用相同变量时采用就近原则;如果是this.变量名,那就需要看是谁调用的这个方法,那么这个this指的就是谁;如果想要实现外部类的变量, 就需要外部类类名.this.变量名。

总结一下:

  1. 外部类中的任何成员可以在实例内部类方法中直接访问;
  2. 实例内部类所处的位置与外部类成员位置相同,也受访问限定符(public、private)的约束;
  3. 在实例内部类方法中访问同名的成员,优先访问内部自己的,如果要访问外部同名成员,则需要外部类类名.this.同名成员
  4. 实例内部类对象必须现有外部类对象的前提下才能创建
  5. 实例内部类是我非静态方法中包含一个指向外部类对象的引用;
  6. 外部类方法中,不能直接访问实例内部类的成员,如果要访问比想要创建内部类的对象(普通对象的创建); 在其它的类中就需要外部类对象.new 内部类类名()。
class OuterClass{public int a = 1;private int b = 2;public static int c = 3;class InnerClass{public int a = 1111;public int d = 4;private int e = 5;//public static int f = 6;//静态方法最先创建,但是内部类又是依赖与外部类的,//就会出现矛盾,在f创建前必须要创建外部类,而这里的f则是在最先创建的外部类还没有实例化public void test() {System.out.println("内部类的test方法");System.out.println(a);//就近原则 1111System.out.println(this.a);//谁调用test方法谁就是this, System.out.println(OuterClass.this.a);System.out.println(d);System.out.println(e);}}public void test() {System.out.println("外部类的test方法");System.out.println(a);System.out.println(b);System.out.println(c);}
}public class Test{public static void main(String[] args) {//实例一个外部类对象OuterClass out = new OuterClass();  //实例一个内部类对象//InnerClass in = new InnerClass();//不能实例单独一个内部类 //所以在实例一个内部类时,一定要有一个内部类对象OuterClass.InnerClass out_in1 = out.new InnerClass();//外部类.创建内部类OuterClass.InnerClass out_in2 = new OuterClass().new InnerClass();//然后就可以调用内部类的方法及属性System.out.println(out_in1.d);out_in1.test();}
}

静态内部类

       静态内部类的创建不需要创建外部类,直接外部类类名.内部类类名就可以创建内部类对象,还有在内部类中可以定义静态成员,其他的都和实例内部类相像。 

匿名内部类

       匿名内部类允许实例化时没有名字,并且只需要使用一次。它也和普通类创建一样抽象方法必须要继承等其他问题。

       在匿名内部类中只能访问没有修改过的成员(变量的捕获)。

局部内部类

在方法中定义内部类,那么就是只能在该方法中使用。这个不过多说明,使用的次数较少。

使用次数是:静态内部类>匿名内部类>实例内部类>局部内部类 

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

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

相关文章

DemoFusion 技术浅析(三):渐进式上采样

渐进式上采样模块(Progressive Upsampling Module) 是 DemoFusion 框架的核心组件之一,其主要目标是逐步提高图像分辨率,同时保留和增强图像细节。为了实现这一目标,该模块结合了多种上采样技术、扩散模型以及精细化的…

软件工程 测试

软件测试是根据从用户和系统规范收集的需求对软件进行评估。测试在软件开发生命周期的阶段级别或程序代码的模块级别进行。软件测试包括验证和确认。 软件验证 验证是检查软件是否满足用户要求的过程。它在 SDLC 结束时执行。如果软件符合它的要求,他就会被验证。…

在CANoe中Ping多播地址的若干问题

在CANoe中添加网络节点Dut,作为加入多播组的主机,配置TCP/IP Stack和网卡参数: IP地址:192.168.0.17MAC地址:02:00:00:00:00:17在CANoe中添加网络节点Tester,作为发送多播报文的数据源,配置TCP/IP Stack和网卡参数: IP地址:192.168.0.52MAC地址:02:00:00:00:00:52Dut…

基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0095 1. 主要功能: 基于51单片机的病床呼叫系统proteus仿…

【机器学习算法】——逻辑回归

目录 逻辑回归理解损失函数代码练习1. 房屋价格与面积的关系2.基于学生特征的录取概率预测 逻辑回归理解 逻辑回归是用来二分类的! 是在线性回归模型之后加了一个激活函数(Sigmoid)将预测值归一化到【0~1】之间,变成概率值。 一般计算其中一…

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别 一、背景 财务数据是指企业经营活动和财务结果的数据记录,反映了企业的财务状况 与经营成果。对行业、企业的财务数据进行分析,就是要评价其过去的经营业绩、 衡量现在的财务状况、预测…

【Android】View的工作流程——measure

1.View的工作流程入口 1.1DecorView被加载到Window中 看到这里你对Activity的构成有一定的了解,每个 Activity 都有一个与之关联的 Window 对象,而 DecorView 是这个 Window 的根视图。当DecorView被创建以及加载资源的时候,此时它的内容还…

4.opengl中变换

变换 1.向量 向量有一个方向(Direction)和大小(Magnitude,也叫做强度或长度)。 数学家喜欢在字母上面加一横表示向量,比如说vv。当用在公式中时它们通常是这样的: 1.1.向量相乘 1.1.1.点乘 我们该如何计算点乘呢?点乘是通过将…

聊聊开发一个接口用到哪些Swagger 注解

文章目录 常用swagger注解类注解方法注解字段注解 Swagger配置引入依赖编写配置类静态资源映射访问swagger ui 为什么要聊Swagger呢,原因是我发现实际开发中前端同事每次都需要问我枚举是什么,经过反思,我觉得是接口文档写的不够好。所以整理…

【Nginx系列】多个路径指向一个地址

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

fastadmin修改后台登录背景

背景 fastadmin 用习惯了&#xff0c;但是登录界面真的不好看&#xff0c;今天就修改一下。先看界面&#xff1a; 解决方案 1.安装插件&#xff1a;后台登录背景。 2.上传固定图片修改登录页面为如下&#xff1a; <!DOCTYPE html> <html> <head>{include…

Unreal Engine Groom打包没有物理模拟

编辑器中运行头发有物理模拟效果&#xff0c;打包后没有 Project Setting 加/HairStrands

MCU-USB转UART的底层逻辑

USB/UART Bridge: Understand Everything in Animations - Parlez-vous Tech 没有 USB 端口的 PC 如何与单片机通信&#xff1f; 答案就在 USB/UART 桥接器中。 无论是用于调试、连接 IoT 传感器还是进行工业监督&#xff0c;此桥接器都简化了硬件集成并使通信更加可靠。以…

仿真键盘输入遇到Edge环境不识别 回车符如何处理

这个问题我也是最近才遇到&#xff0c;可能现在大家都喜欢用新架构&#xff0c;基于网页来写应用管理软件。 当遇到Edge环境下&#xff0c;文本框不识别回车符如何处理&#xff0c;根据笔者经验可通过配置Edge 基于键盘管理设置来解决这个事情。如图 即在Edge浏览器环境下&…

在做题中学习(79):最小K个数

解法&#xff1a;快速选择算法 说明&#xff1a;堆排序也是经典解决问题的算法&#xff0c;但时间复杂度为&#xff1a;O(NlogK)&#xff0c;K为k个元素 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章&#xff0c;分别学习&#xff1a;数组分三块&#…

【html网页页面009】html+css制作学校官网主题网页制作含登录(5页面附效果及源码)

校园网站主题网页制作 &#x1f964;1、写在前面&#x1f367;2、涉及知识&#x1f333;3、网页效果&#x1f308;4、网页源码4.1 html4.2 CSS4.3 源码获取w034学校网页源码及介绍链接 &#x1f40b;5、作者寄语 &#x1f964;1、写在前面 学校网站主题的网页 一共5个页面 网…

2024-12-08 数字人最新论文更新(MEMO, INFP, IF-MDM, SINGER, One Shot, One Talk, FLOAT等)

2024-12-08 数字人最新论文更新(MEMO, INFP, IF-MDM, SINGER, One Shot, One Talk, FLOAT等) 汇总一下最近一个星期的一些数字人论文的更新&#xff0c;我觉得比较有意思的一些文章比如SINGER&#xff0c;用Diffusion来做sing的talking head&#xff0c;确实是一个不错的文章&…

亚马逊云科技用生成式AI,向开发的复杂性动手了

生成式 AI、分布式扩展功能全面进化&#xff0c;还降价了。 同一天的发布&#xff0c;完全不同的方向。 今天凌晨&#xff0c;云计算巨头亚马逊云科技的 re:Invent 与大号创业公司 OpenAI 的发布「撞了车」。后者公布了一系列生成式 AI 应用&#xff0c;价格更贵、性能更强大&a…

HTML+CSS+JS实现简单的打字机

HTMLCSSJS实现简单的打字机 js /*** 动态打字效果函数* (select和element只能选择一个)* param {Object} options - 配置选项* param {string} options.select - 选择器&#xff0c;用于定位要显示文本的DOM元素("#id"或".class")* param {Object} optio…

[Collection与数据结构] 位图与布隆过滤器

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…