Java 内部类包含静态内部类(Static Nested Class)、非静态内部类(Inner Class)

news/2024/9/19 18:44:16/ 标签: java, 开发语言

在 Java 中,内部类主要分为以下几种类型:

  1. 成员内部类(Member Inner Class)
  2. 静态内部类(Static Nested Class)
  3. 局部内部类(Local Inner Class)
  4. 匿名内部类(Anonymous Inner Class)

1. 成员内部类(Member Inner Class)

这是最常见的内部类之一,作为外部类的一个成员存在。它不使用 static 修饰符,可以访问外部类的所有成员变量和方法。

特点

  • 需要通过外部类的实例来创建。
  • 可以访问外部类的所有成员,包括私有成员。

代码示例

java">class OuterClass {private int outerField = 10;// 成员内部类class InnerClass {void display() {System.out.println("Outer Field: " + outerField);}}
}public class Test {public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass();inner.display();}
}

2. 静态内部类(Static Nested Class)

静态内部类与成员内部类类似,但它使用 static 关键字修饰,不依赖外部类的实例,不能直接访问外部类的非静态成员。

特点

  • 不需要外部类的实例即可创建。
  • 只能访问外部类的静态成员。

代码示例

java">class OuterClass {private static int staticField = 20;// 静态内部类static class StaticNestedClass {void display() {System.out.println("Static Field: " + staticField);}}
}public class Test {public static void main(String[] args) {OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();nested.display();}
}

3. 局部内部类(Local Inner Class)

局部内部类是在方法或代码块内部定义的类,类似于局部变量,作用范围仅限于定义它的方法或块中。

特点

  • 只能在定义它的作用域内使用。
  • 可以访问外部类的成员和方法中的局部变量(这些局部变量必须是 final 或有效 final,即在定义后没有再修改过)。

代码示例

java">class OuterClass {void method() {final int localVar = 30;// 局部内部类class LocalInnerClass {void display() {System.out.println("Local Variable: " + localVar);}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();}
}public class Test {public static void main(String[] args) {OuterClass outer = new OuterClass();outer.method();}
}

4. 匿名内部类(Anonymous Inner Class)

匿名内部类是一种没有名字的局部内部类,通常在需要简洁实现接口或抽象类的场合使用。它可以在同一时间创建类的实例并定义其行为。

特点

  • 没有类名,直接使用 {} 定义。
  • 只能用来实例化接口或抽象类,或者继承一个具体的类。

代码示例

java">interface Greeting {void sayHello();
}public class Test {public static void main(String[] args) {// 匿名内部类Greeting greeting = new Greeting() {@Overridepublic void sayHello() {System.out.println("Hello from Anonymous Inner Class!");}};greeting.sayHello();}
}

各类内部类的使用场景:

  • 成员内部类:用于一个类逻辑上需要划分为多个类时,并且需要内部类访问外部类的实例变量和方法的场景。
  • 静态内部类:用于当内部类不需要访问外部类的实例成员时,并且希望减少外部类和内部类之间耦合的场景。
  • 局部内部类:适用于需要在方法或代码块中临时定义类的场景。
  • 匿名内部类:适合用来简化代码,特别是在只需要实现一次接口或者继承某个类的场景中。

总结来说,Java 提供了多种内部类类型,以便根据不同的需求对代码结构进行优化和简化。


http://www.ppmy.cn/news/1523960.html

相关文章

芋道系统excel导出,springcloud+vue3

前端代码&#xff1a; <el-form-item><el-buttontype"success"plainclick"handleExport":loading"exportLoading"v-hasPermi"[teach:course-manage:export]"><Icon icon"ep:download" class"mr-5px&quo…

【mysql】mysql之主从延迟复制测试场景

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

当水泵遇上物联网:智能水务新时代的浪漫交响

在当代科技的宏伟乐章中&#xff0c;物联网&#xff08;IoT&#xff09;技术宛如一位技艺高超的指挥家&#xff0c;引领着各行各业迈向智能化的新纪元。当这股创新浪潮涌向古老的水务行业时&#xff0c;一场前所未有的“智能水务”革命便悄然上演&#xff0c;而水泵——这一传统…

小宝宝的好伙伴Baby Buddy

好友 Eduna 前天半夜告诉我&#xff0c;Docker 的下载已经恢复&#xff0c;又可以愉快的玩耍了&#xff0c;大家赶紧去试试吧~ 什么是 Baby Buddy &#xff1f; Baby Buddy 是宝宝的好伙伴&#xff01;能帮助宝爸、宝妈、及护理人员跟踪宝宝的睡眠、喂食、换尿布、趴着的时间等…

【Linux】循序进阶学运维-服务篇-tomcat入门

[rootgaosh-1 jdk]# ##### []( )2\. 配置java环境\[rootgaosh-1 jdk\]# vim /etc/profile![在这里插入图片描述](https://img-blog.csdnimg.cn/20200801062552258.png)export JAVA_HOME/root/jdk/jdk1.8.0_131 ## 路径一定要对 export PATH J A V A H O M E / b i n : JAVA_HO…

Collections

Collections 是 Java 中的一个实用工具类&#xff0c;提供了一系列静态方法来操作集合。以下是其详细介绍&#xff1a; 前置知识 在 Java 中&#xff0c;可变参数&#xff08;Varargs&#xff09;允许方法接受可变数量的参数。使用可变参数时&#xff0c;可以传递任意数量的参…

EmguCV学习笔记 C# 11.3 DNN其它

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术

Python Web 框架篇&#xff1a;Flask、Django、FastAPI介绍及其核心技术 目录 &#x1f40d; Flask Flask 核心概念&#xff08;路由、视图函数、模板渲染&#xff09;Flask Blueprint 模块化应用Flask 扩展&#xff08;Flask-SQLAlchemy、Flask-WTF、Flask-Migrate 等&#…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

半监督学习能否帮助训练更好的模型?

数据科学家面临的最常见挑战之一是缺乏足够的标记数据来训练一个可靠且准确的模型。标记数据对于监督学习任务&#xff0c;如分类或回归至关重要。然而&#xff0c;在许多领域&#xff0c;获取标记数据既昂贵又耗时&#xff0c;有时甚至是不切实际的。另一方面&#xff0c;未标…

CSS学习18--伸缩布局

伸缩布局 一、伸缩布局二、属性设置 一、伸缩布局 给父级display: flex; 给孩子flex: 1; 自由变动 <html><head><style>section {width: 1000px;height: 200px;border:1px solid pink;margin:100px auto;/*父级盒子添加f1ex*/dispLay:flex;/*伸缩布局模式*/…

HW | AMD GPU上 “nvidia-smi -lms” 的等价指令——MI300X实时查看GPU使用率

文章目录 .实验背景.nvidia-smi -lms.rocm-smi 等价指令.结语. . 实验背景 最近在使用AMD MI300X GPU进行实验&#xff0c;MI300X是目前AMD最先进的几款数据中心GPU之一。该GPU的软件指令和NVIDIA的不同&#xff0c;主要因为底层的驱动命名不同&#xff08;在我理解确实是这样…

小型洗衣机什么牌子好又便宜?五款备受好评机型测评,闭眼入

在日常生活中&#xff0c;内衣洗衣机已成为现代家庭必备的重要家电之一。选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;市场上众多内衣洗衣机品牌琳琅满目&#xff0c;让我们往往难以选择。那么&a…

HarmonyOs 应用基础--Swiper-样式结构重用-GridGridItem

目录 九、Swiper-样式&结构重用-Grid&GridItem 1. Swiper 1.1. 适用场景 1.2. 基本用法 1.3. 常用属性方法 1.4. 调整导航点 1.5. 案例-小米有品 2. 样式&结构重用 2.1. Styles 2.2. Extend 2.3. Builder 2.4. Extend、Styles、Builder 对比 3. 网格布…

opencv图像透视处理

引言 在图像处理与计算机视觉领域&#xff0c;透视变换&#xff08;Perspective Transformation&#xff09;是一种重要的图像校正技术&#xff0c;它允许我们根据图像中已知的四个点&#xff08;通常是矩形的四个角&#xff09;和目标位置的四个点&#xff0c;将图像从一个视…

C语言---循环程序设计万字总结(2)

选择、循环结构 最简单的结构是 if-else &#xff08;类比日常生活中 如果…否则…&#xff09; 其次&#xff0c; switch&#xff0c; 最后是三大循环结构&#xff0c; while do-while for 选择、循环结构是后续学习的基石&#xff0c; 尤其是与数组和指针 关联性很强 一、选…

Python\Scripts文件夹中只有pip3.exe而缺少pip.exe

解决办法&#xff1a; 以管理员身份运行命令提示符 执行如下命令 mklink D:\Python\Scripts\pip.exe D:\Python\Scripts\pip3.exe&#xff08;命令中的路径应填入你的Python安装路径&#xff0c;并且Python\Scripts路径也正常放入系统变量中&#xff09; 然后就可以检查你的…

美团面试题:生成字符串的不同方式

美团面试题:生成字符串的不同方式 引言问题分析动态规划思路伪代码C代码实现代码解析复杂度分析优化建议结论引言 小红拿到了一个空字符串 s s s,她希望通过两种操作生成一个给定的字符串 t t t。我们需要计算生成字符串

springboot项目编写发送异常日志到企微工具包

1.创建基础Bean public final class ThreadFactory implements java.util.concurrent.ThreadFactory {private static final AtomicInteger poolNumber new AtomicInteger(1);private final ThreadGroup group;private final AtomicInteger threadNumber new AtomicInteger(1…

学校不会教的找工作信息差,靠谱招聘网站分享给你

1、国家大学生就业服务平台 2、中国公共招聘网 3、中国国家人才网