当前位置: 首页 > news >正文

五大元素之一,累不累——Java内部类

目录

 简略版:

 详解版:      

 使用场景:

内部类的优点:

内部类的分类:

一. 成员内部类

1.创建对象

2.访问方法

 3. 外部类名.this. 

二. 静态内部类

1. 创建对象

2. 访问特点

三. 局部内部类

四. 匿名内部类

1. 格式:

2. 作用:

3. 本质:

4. 使用场景


 

 简略版:

1.简述:ava的类中有五大组成部分,分别是:成员变量,成员方法,构造函数(构造器),代码块,内部类;大多数情况下,类与类之间在位置上是平行的,独立的,而内部类是在一个类中添加另一个类,相当于类的“嵌套”。

2.使用场景:一个类中包含另一个事物,该事物也有自己的方法和属性,我们就可以将它定义为内部类;

3.优点:隐藏程序的细节和内部结构,提高程序的封装性;使结构看起来更加优美且合理;

4.分类:根据内部类的位置,我们分为静态内部类,成员内部类,局部内部类,匿名内部类;

 

详解版:      

        java的类中有五大组成部分,分别是:成员变量,成员方法,构造函数(构造器),代码块,内部类; 

        今天就讲讲内部类。大多数情况下,类与类之间在位置上是平行的,独立的,而内部类是在一个类中添加另一个类,相当于类的“嵌套”。

 使用场景:

        一个类中包含另一个事物,该事物也有自己的方法和属性,我们就可以将它定义为内部类;

如下代码所以,定义了一个汽车类,“嵌套”了一个引擎类,该类也有自己的的方法和属性;

class Motor{//汽车类class Engine{//发动机类String size;//发动机型号public void spin(){//发动机的行为/作用System.out.println("转速很快的");}}
}

而这种内部类的创建,就没有任何意义,因为Weight类没有自己的方法和行为 ;

class Animal{//定义一个动物类class Weight{//“嵌套”一个重量类}
}

内部类的优点:

        隐藏程序的细节和内部结构,提高程序的封装性;使结构看起来更加优美且合理;

内部类的分类:

        根据内部类的位置,我们分为静态内部类,成员内部类,局部内部类,匿名内部类;

        一般类该有的,内部类也都有,比如成员变量,成员方法,构造器等。

        下面的代码可以辅助理解;

class A{int b=10;//成员变量class B{};//成员内部类,与成员变量统一等级static int c=10;//静态变量static class C{};//静态内部类void method(){int d=7;//局部变量class D{};//局部内部类}
}

        内部类与成员变量,成员方法同等级:

        对于非静态内部类,其作用与成员变量,成员方法相同;由于是非静态的,所以需要使用类的对象才能调用,所以创建内部类的对象不同于创建普通类的;

public class OuterClass {//成员变量String name;//成员方法public void play(){System.out.println("这是外部类的方法");}//内部累;与成员变量,成员方法同等级class InnerClass{int age;public void eat(){System.out.println("这是内部类的方法");}}public static void main(String[] args) {OuterClass o=new OuterClass();o.play();OuterClass.InnerClass i=o.new InnerClass();i.eat();}
}
这是外部类的方法
这是内部类的方法进程已结束,退出代码0

        见名知意,通过类的名字我们知道,不同的类所处范围不同,作用范围不同,这就是不同内部类的本质区别;

一. 成员内部类

         与类的成员变量,成员方法所处等级相同,且在使用时,与类的成员变量,成员方法使用也相同,需要先创建类的对象,再进行调用;

1.创建对象

 外部类名.内部类名 对象名 = new 外部类名(). new 内部类名();

 Outer1.Inner i=new Outer1().new Inner();//内部类对象的创建

 

2.访问方法

         内部类实例方法直接使用其外部类实例/静态成员,实例成员即 无static 修饰的方法或属性,静态成员即 static 修饰的方法或成员;

void inner(){//这是内部类的无实例方法int a=10;//内部类局部方法System.out.println(a);System.out.println(this.a);//内部类成员变量System.out.println(Outer1.this.a);//外部类成员变量,外部类名 点 this 点 变量名}

 

 3. 外部类名.this. 

System.out.println(Outer1.this.a);//外部类成员变量,外部类名 点 this 点 变量名

 

        下面的代码将给予说明:

public class Outer1 {int a=100;void outer(){System.out.println("这是方法!");}class Inner{int a=50;void inner(){int a=10;System.out.println(a);System.out.println(this.a);System.out.println(Outer1.this.a);//直接使用外部类成员变量}public static void main(String[] args) {Outer1.Inner i=new Outer1().new Inner();//内部类对象的创建i.inner();}}
}

二. 静态内部类

        在成员内部类的基础上,被关键字static修饰;

1. 创建对象

外部类名.内部类名 对象名 =  new 外部类名.内部类名();

Outer2.Inner i=new Outer2.Inner();//内部类对象的创建

 

2. 访问特点

        内部类的实例化方法可以直接访问外部类静态成员,不能直接访问外部类实例化成员;

 void inner(){//这是内部类的无实例方法// System.out.println(a);//不可以直接访问外部类的静态成员System.out.println(b);//可以直接访问外部类的静态成员}

 

         下面将给予代码进行说明:

class Outer2 {int a=100;static int b=200;//外部类静态成员变量static class Inner{//静态内部类void inner(){//这是内部类的无实例方法// System.out.println(a);//不可以直接访问外部类的静态成员System.out.println(b);//可以直接访问外部类的静态成员}public static void main(String[] args) {Outer2.Inner i=new Outer2.Inner();//内部类对象的创建i.inner();}}
}

 

三. 局部内部类

        与局部方法的位置相同,定义在方法体中;该内部类几乎用不到,了解即可;

class Outer3{void inner(){//这是外部类的方法class Inner{//内部类int a=19;void play(){System.out.println("这是内部类的方法");}}Inner i=new Inner();//内部类的对象创建i.play();}public static void main(String[] args) {Outer3 out= new Outer3();out.inner();}
}

. 匿名内部类

        匿名内部类是一种i特殊的局部内部类;匿名,是指该类没有名字;

1. 格式:

                new 抽象类/接口名(){

                        重写抽象方法;

              }

2. 作用:

        匿名内部类是抽象类/接口的子类,使用它可以不需要写实现类,直接调用接口,降低代码的冗余性;

 下面将给予代码进行说明:

class S{public static void main(String[] args) {//new Inter() {//new出来的是接口的实现类对象,相当于创建对象的等号右边,而左边是名字,这里没有,即匿名Inter i=new Inter(){//也可以使用多态接收该实现类对象,这里不是创建接口对象,接口不能创建对象@Overridepublic int sum(int x, int y) {//重写方法return x+y;}};//注意这里的分号,毕竟是new对象int a=i.sum(10,50);//调用方法System.out.println(a);}}
//接口
interface Inter{int sum(int x,int y);//抽象方法,public abstract 可以省略不写
}

 

3. 本质:

        其本身就是接口/抽象类的实现类对象;

4. 使用场景

        在开发中,匿名内部类作为方法的参数进行传输;

 下面将给予代码进行说明:

        程序从main方法开始执行,调用含参成员方法UseInter,将参数,即内部类(内部类实质就是接口/抽象类子类对像)传入成员方法的有参变量inter,调用内部类中的重写的接口的sum方法;

class S{//方法的参数如果是一个接口,调用此方法需要传入该接口的实现类对象static void UseInter(Inter inter){//成员方法int a=inter.sum(10,30);System.out.println(a);}public static void main(String[] args) {//调用方法,相当于UseInter(a),,a即内部类,匿名内部类本质是实现类的对象//因为UserInter方法的参数是一个接口,调用此方法需要传入该接口的实现类对象UseInter(new Inter(){@Overridepublic int sum(int x, int y) {//重写方法return x+y;}});}
}
//接口
interface Inter{int sum(int x,int y);//抽象方法,public abstract 可以省略不写
}

相关文章:

五大元素之一,累不累——Java内部类

目录 简略版: 详解版: 使用场景: 内部类的优点: 内部类的分类: 一. 成员内部类 1.创建对象 2.访问方法 3. 外部类名.this. 二. 静态内部类 1. 创建对象 2. 访问特点 三. 局部内部类 四. 匿名内部类 …...

YAML快速编写示例

一、案例 1.1 自主式创建service关联上方的pod 资源名称my-nginx-kkk命名空间my-kkk容器镜像nginx:1.21容器端口80标签njzb:my-kkk 1.1.1 创建一个demo文件夹 1.1.2 创建并获取模版文件 1.1.3 查看服务并编写yaml文件 1.1.4 编写yaml文件并部署,查看服务是否运行成…...

2024 江苏省大学生程序设计大赛 2024 Jiangsu Collegiate Programming Contest(FGKI)

题目来源:https://codeforces.com/gym/105161 文章目录 F - Download Speed Monitor题意思路编程 G - Download Time Monitor题意思路编程 K - Number Deletion Game题意思路编程 I - Integer Reaction题意思路编程 写在前面:今天打的训练赛打的很水&…...

【C语言】基于C语言实现的贪吃蛇游戏

【C语言】基于C语言实现的贪吃蛇游戏 🔥个人主页:大白的编程日记 🔥专栏:C语言学习之路 文章目录 【C语言】基于C语言实现的贪吃蛇游戏前言一.最终实现效果一.Win32 API介绍1.1Win32 API1.2控制台程序1.3控制台屏幕上的坐标COORD…...

代码审计(工具Fortify 、Seay审计系统安装及漏洞验证)

源代码审计 代码安全测试简介 代码安全测试是从安全的角度对代码进行的安全测试评估。(白盒测试;可看到源代码) 结合丰富的安全知识、编程经验、测试技术,利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷&#xf…...

cocos creator 3.x 手搓背包拖拽装备

项目背景: 游戏背包 需要手动 拖拽游戏装备到 装备卡槽中,看了下网上资料很少。手搓了一个下午搞定,现在来记录下实现步骤; 功能拆分: 一个完整需求,我们一般会把它拆分成 几个小步骤分别造零件。等都造好了…...

运维开发.Kubernetes探针与应用

运维系列 Kubernetes探针与应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263…...

Spring 框架:Java 企业级开发的基石

文章目录 序言Spring 框架的核心概念Spring 框架的主要模块Spring Boot:简化 Spring 开发Spring Cloud:构建微服务架构实际案例分析结论 序言 Spring 框架自 2002 年发布以来,已经成为 Java 企业级开发的标准之一。它通过提供全面的基础设施…...

在Docker中使用GPU

一、安装nvidia-container-toolkit 总之一句话:nvidia-docker和nvidia-docker2,nvidia-container-runtime 已经被英伟达迭代了,可以认为nvidia-container-toolkit是nvidia-docker和nvidia-docker2, nvidia-container-runtime 的替…...

vue3 前端实现导出下载pdf文件

这样的数据实现导出 yourArrayBufferOrByteArray 就是后端返回数据 // 创建Blob对象const blob new Blob([new Uint8Array(res)], { type: application/pdf })// 创建一个表示该Blob的URLconst url URL.createObjectURL(blob);// 创建一个a标签用于下载const a document.cr…...

AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比

博客导读: 《AI—工程篇》 AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效 AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署 AI智能体研发之路-工程篇(三&am…...

电商物流查询解决方案助力提升消费者体验

截至2023年12月,中国网络购物用户规模达9.15亿人,占网民整体的83.8%。这一庞大的数字不仅展现了电子商务的蓬勃发展,也标志着数字零售企业营销战略的转变——从以产品和流量为核心,到用户为王的新阶段。因此,提升消费者…...

【深度密码】神经网络算法在机器学习中的前沿探索

目录 🚝前言 🚍什么是机器学习 1. 基本概念 2. 类型 3. 关键算法 4. 应用领域 5. 工作流程 🚋什么是神经网络 基本结构 🚂神经网络的工作原理 前向传播(Forward Propagation): 损失函…...

搭载算能 BM1684 芯片,面向AI推理计算加速卡

搭载算能 BM1684 芯片,是面向AI推理的算力卡。可集成于服务器、工控机中,高效适配市场上所有AI算法,实现视频结构化、人脸识别、行为分析、状态监测等应用,为智慧城市、智慧交通、智慧能源、智慧金融、智慧电信、智慧工业等领域进…...

Python开发 我的世界 Painting-the-World: Minecraft 像素图片生成器

简介 Painting-the-World 是一款创新的工具,专为《我的世界》(Minecraft) 玩家及创作者设计,旨在将数字图片转变为游戏内的像素艺术。通过利用 RCON (Remote Console) 协议,本项目可以直接与《我的世界》服务器对话,根据输入的图…...

【经验分享】盘点“食用“的写文素材

一、构建框架 简介 1. 身份 擅长领域 2. 博客内容 3. 目前示例: 阿里云专家博主,华为云-云享专家,专注前、后端开发 博客内容:前后端实战教学、源码剖析、常见面试知识解析、算法题解与心得、日常考研总结等 目前正在备战考研&…...

实习碰到的问题w1

1.vueelementUI在输入框中按回车键会刷新页面 当一个 form 元素中只有一个输入框时&#xff0c;在该输入框中按下回车应提交该表单。如果希望阻止这一默认 行为&#xff0c;可以在 <el-form> 标签上添加 submit.native.prevent 。 参考&#xff1a;element-ui 表单 form …...

c#实现BPM系统网络传输接口,http协议,post

BPM通过http协议实现网络传输&#xff0c;语言使用.net(c#)&#xff0c;在这里只提供一个接口&#xff0c;具体代码如下,请参照&#xff1a; public string MakeRequest(string parameters) { ServicePointManager.ServerCertificateValidationCallback new Syst…...

如何修改开源项目中发现的bug?

如何修改开源项目中发现的bug&#xff1f; 目录 如何修改开源项目中发现的bug&#xff1f;第一步&#xff1a;找到开源项目并建立分支第二步&#xff1a;克隆分支到本地仓库第三步&#xff1a;在本地对项目进行修改第四步&#xff1a;依次使用命令行进行操作注意&#xff1a;Gi…...

结构设计模式 - 代理设计模式 - JAVA

代理设计模式 一. 介绍二. 代码示例2.1 定义 CommandExecutor 类2.2 定义 CommandExecutorProxy代理类2.3 模拟客户端2.4 测试结果 三. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...