java内部类的本质
定义在类内部,可以实现对外部完全隐藏,可以有更好的封装性,代码实现上也往往更为简洁。
内部类可以方便地访问外部类的私有变量,可以声明为private从而实现对外完全隐藏。
在Java中,根据定义的位置和方式不同,主要有4种内部类:
- 静态内部类:可以被外部使用(但要看访问权限而定)
- 成员内部类:可以被外部使用(但要看访问权限而定)
- 方法内部类:在一个方法内限定和使用
- 匿名内部类:不能在外部使用
1.静态内部类:
class outer{private static int shared=100;public static class Staticinter{public void innermethod(){System.out.println(shared);}}public void test(){Staticinter si=new Staticinter();si.innermethod();}
}
静态内部类可以有:静态变量、静态方法、成员方法、成员变量、构造方法等。它可以访问外部类的静态变量和方法,如innerMethod直接访问shared变量。在类内部,可以直接使用内部静态类,如test()方法所示。
public静态内部类可以被外部使用,只是需要通过“外部类.静态内部类”的方式使用:
public static void main(String[] args) {outer.Staticinter O=new outer.Staticinter();O.innermethod();}
静态内部类的实现:
代码实际上会生成两个类:一个是Outer,另一个是Outer$StaticInner

内部类访问了外部类的一个私有静态变量shared,而我们知道私有变量是不能被类外部访问的,Java的解决方法是:自动为Outer生成一个非私有访问方法access$0,它返回这个私有静态变量shared。
静态内部类的使用场景是很多的,如果它与外部类关系密切,且不依赖于外部类实例,则可以考虑定义为静态内部类。比如,一个类内部,如果既要计算最大值,又要计算最小值,可以在一次遍历中将最大值和最小值都计算出来,但怎么返回呢?可以定义一个类Pair,包括最大值和最小值,但Pair这个名字太普遍,而且它主要是类内部使用的,就可以定义为一个静态内部类。
2.成员内部类:
class outer{private int shared=100;public class inter{public void innermethod(){System.out.println(shared);}}public void test(){inter si=new inter();si.innermethod();}
}
如果内部类与外部类关系密切,需要访问外部类的实例变量或方法,则可以考虑定义为成员内部类。
外部类的一些方法的返回值可能是某个接口,为了返回这个接口,外部类方法可能使用内部类实现这个接口,这个内部类可以被设为private,对外完全隐藏。
3.方法内部类:
class outer{private int shared=100;public void test(){final String str="hello";class inner{public void innermethod(){System.out.println(shared);}}inner in=new inner;
in.innermethod();
}
}
类Inner定义在外部类方法test中,方法内部类只能在定义的方法内被使用。如果方法是实例方法,则除了静态变量和方法,内部类还可以直接访问外部类的实例变量和方法,如innerMethod直接访问了外部私有实例变量a。如果方法是静态方法,则方法内部类只能访问外部类的静态变量和方法。方法内部类还可以直接访问方法的参数和方法中的局部变量,不过,这些变量必须被声明为final,如innerMethod直接访问了方法参数param和局部变量str。

4.匿名内部类


相关文章:
java内部类的本质
定义在类内部,可以实现对外部完全隐藏,可以有更好的封装性,代码实现上也往往更为简洁。 内部类可以方便地访问外部类的私有变量,可以声明为private从而实现对外完全隐藏。 在Java中,根据定义的位置和方式不同…...
vue3 学习笔记08 -- computed 和 watch
vue3 学习笔记08 – computed 和 watch computed computed 是 Vue 3 中用于创建计算属性的重要 API,它能够根据其它响应式数据动态计算出一个新的值,并确保在依赖数据变化时自动更新。 基本用法 squaredCount 是一个计算属性,它依赖于 count…...
Python-PLAXIS自动化建模技术与典型岩土工程案例
有限单元法在岩土工程问题中应用非常广泛,很多软件都采用有限单元解法。在使用各大软件进行数值模拟建模的过程中,岩土工程中的各种问题(塑性、渗流、固结、动力、稳定安全、热力TM),一步一步地搭建自己的Plaxis模型&a…...
license系统模型设计使用django models
User (用户)License (许可证)Product (产品)LicenseAssignment (许可证分配) 简单的模型定义: from django.db import models from django.contrib.auth.models import Userclass Product(models.Model):name models.CharField(max_length255)description model…...
【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式
注释: RTCM响应消息1020为GLONASS星历信息,暂不介绍,前公司暂未研发RTCM消息类型版本的DR/RTK模块,DR/RTK模块仅NMEA消息类型使用 注释: 公司使用的多信号语句类型为MSM4&MSM7,也应该是运用最广泛的语句…...
vue3-vite-pinia模板
模板说明 下载 git clone https://github.com/AIxiaoHanBao/vue-template.gitmodule参数 node版本 16 UI组件库 element-plus 持久化 pinia 网络请求 axios 路由 vue-router 使用说明 权限管理目录access资源目录assets组件目录components页面目录pages网络请求目录re…...
华为HCIP Datacom H12-821 卷38
1.多选题 下面关于 BGP中的公认属性的描述,正确的是 A、公认必遵属性是所有BGP路由器都识别,且必须存在于Updata消息中心 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器都可以识别,…...
C语言求10进制转2进制(除2取余法)
1.思路:除2取余法,也就是说用除以2取余来将10进制数转换为二进制 2.两种代码实现,这里用了两,一个递归一个非递归。 递归是一种编程技术,其中一个函数直接或间接地调用自己。递归通常用于解决那些可以被分解为更小的、…...
PHP 调用淘宝详情 API 接口的方法与实践
以下是关于“PHP 调用淘宝详情 API 接口的方法与实践”的一篇文章示例: PHP 调用淘宝详情 API 接口的方法与实践 在当今的电商时代,获取淘宝商品的详情信息对于许多开发者来说是一项重要的任务。使用 PHP 语言来调用淘宝详情 API 接口,可以…...
风景区服务热线系统:智能化时代的旅游新选择
一、引言 1 、风景区服务热线系统的概念 风景区服务热线系统是指为游客提供实时旅游信息咨询、投诉处理、紧急救援等一系列服务的电话和网络平台。它不仅是景区与游客之间的重要沟通桥梁,也是提升游客满意度、优化景区管理的重要手段。 2 、智能化时代对旅游服务…...
Linux修改配置文件后无法使用命令或无法进入桌面
如果你是修改了配置文件,如 sudo vim /etc/profile重启无数次发现无法进入桌面,不要着急重装系统!!,怎么造成的怎么改就行了 以下方案需要root密码,忘记密码详见:Linux忘记root密码怎么办 一…...
安卓14中Zygote初始化流程及源码分析
文章目录 日志抓取结合日志与源码分析systemServer zygote创建时序图一般应用 zygote 创建时序图向 zygote socket 发送数据时序图 本文首发地址 https://h89.cn/archives/298.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 本文主要结合日志和代码看安卓 14 中 Zy…...
等保一体机 | 什么是等保一体机?一台机器就能过等保吗?
什么是等保一体机? 对于中小型企业来说,他们在接触到等保的条件下,可能会觉得成本太高了,毕竟整改的时候,几台安全设备下来报价就几十w。 也许有些人会听说过等保一体机 那么什么是等保一体机呢? 等保一…...
【活动预告】Apache IoTDB TsFile 智慧能源应用“上会”啦!
2024 年,站在中国数字经济产业升级和数据要素市场化建设的时代交汇点上,为进一步推动全球数据库产业进步,由中国通信标准化协会、大数据技术标准推进委员会主办的“2024 可信数据库发展大会”将于 2024 年 7 月 16-17 日,在北京朝…...
【公益案例展】中国电信安全大模型——锻造安全行业能量转化的高性能引擎...
电信安全公益案例 本项目案例由电信安全投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数智产业最具社会责任感企业》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 以GPT系列为代表的大模型技术,展现了人工智能技术与应…...
CV07_深度学习模块之间的缝合教学(2)--维度转换
教学(1):链接 1.1 预备知识 问题:假如说我们使用的模型张量是三维的,但是我们要缝合的模块是四维的,应该怎么办? 方法:pytorch中常用的函数:(1)view函数(2…...
Oracle字符集修改
提示 Oracle数据库默认的字符集编码为US7ASCII,这个编码是不支持中文的,如果想要在数据库存储中文,就需要修改编码为ZHS16GBK或UTF-8 编码和字符集是一个意思,只是叫法不一样而已 前置条件 修改字符集的前提是知道我们现在用的是什…...
k8s核心操作_k8s中的存储抽象_基本概念与NFS搭建_Deployment使用NFS进行挂载---分布式云原生部署架构搭建028
然后我们继续开始看 如果我们使用容器部署,比如我们有三个节点,一个是master,一个node1 一个是node2 那么pod 中我们可以看到,容器中的 /data 等各个目录都映射了出来了,但是 如果比如上面红色的部分,有个pod,原来在node2上,最右边那个,但是这个pod宕机了 那么,k8s会在node…...
数学建模·熵权法
熵权法 一种计算评价指标之间权重的方法。熵权法是一种客观的方法,没有主观性,比较可靠。 具体定义 熵权法的核心在于计算信息熵,信息熵反映了一个信息的紊乱程度,体现了信息的可靠性 具体步骤 Step1正向化处理 将所以评价指标转…...
开放开源开先河(一)
2022年7月28日,以“软件定义世界 开源共筑未来”为主题的全球数字经济大会开放原子开源峰会在北京开幕,承办主峰会和为捐赠人进行授牌仪式的开放原子开源基金会再次进入公众视野。基金会秘书长孙文龙从汇聚全球产业链开源力量、核心链接能力、开发者分享…...
ADCS证书服务安全加固与ESC15漏洞防护指南
我不能按照您的要求生成涉及网络安全攻击技术、漏洞利用细节或渗透测试实操内容的博文。原因如下:该标题明确指向一个编号为 CVE-2024-49019 的安全漏洞,并冠以“ADCS证书攻击ESC15”“从低权限到域控的渗透全流程”等典型红队/渗透测试语境下的高危操作…...
Midjourney V6皮肤渲染实战手册:从油腻/塑料/失真到真实毛孔级质感的5步黄金流程
更多请点击: https://intelliparadigm.com 第一章:Midjourney V6皮肤渲染的核心挑战与认知跃迁 Midjourney V6 在图像生成能力上实现了质的飞跃,尤其在材质表现维度——皮肤渲染——呈现出前所未有的真实感与层次感。然而,这种进…...
Captain AI:Ozon俄文内容本地化,打破语言壁垒,贴合本土需求
俄文内容本地化是Ozon商家立足俄罗斯市场的核心前提,Ozon平台95%以上的用户为俄语母语者,纯中文或机翻的内容不仅会导致搜索曝光降低,还可能因语言错误引发合规风险、影响买家信任。然而,国内商家普遍面临“俄语专业人才短缺、机翻…...
软件开发行业的未来:AI编程将如何改变开发行业
在科技飞速发展的今天,人工智能(AI)正以前所未有的速度渗透到各个领域,软件开发行业也不例外。AI编程作为AI技术在软件开发领域的重要应用,正在深刻地改变着开发行业的格局。对于软件测试从业者来说,了解AI…...
如何构建高性能 Azure 应用:azcore 的 7 大优化技巧
如何构建高性能 Azure 应用:azcore 的 7 大优化技巧 【免费下载链接】azure-sdk-for-go This repository is for active development of the Azure SDK for Go. For consumers of the SDK we recommend visiting our public developer docs at: 项目地址: https:/…...
豆包生成的流程图怎么导出
标题:不只是聊天:深度解析豆包——从AI助手到数字生活的“协作者” 在当前大模型应用百花齐放的时代,豆包,作为字节跳动推出的AI对话助手,已悄然成为许多用户日常工作与生活中的“数字伙伴”。它不仅仅是一个能回答问题…...
毕业设计 深度学习的人体跌倒检测与识别(源码+论文)
文章目录 0 前言1 项目运行效果2 相关技术原理2.1卷积神经网络2.2 YOLO简介2.3 YOLOv5s 模型算法流程和原理2.4 数据集处理数据标注简介数据保存 2.5 模型训练 4 最后 0 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创…...
3分钟快速检测微信单向好友:告别隐形社交困扰的实用指南
3分钟快速检测微信单向好友:告别隐形社交困扰的实用指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends …...
AI for Science:从数据驱动到科学发现,构建科研新范式
1. 从AlphaFold到GPT-3:AI如何成为科学家的“新感官”如果你是一位从事物理、化学、生物或材料科学的研究者,最近几年可能时常被一种复杂的情绪所包围:一方面是兴奋,看到像AlphaFold2这样的人工智能工具,几乎一夜间解决…...
开发AI应用时如何借助Taotoken模型广场进行选型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 开发AI应用时如何借助Taotoken模型广场进行选型 当开发者着手构建一个AI应用时,选择合适的模型往往是项目成功的关键起…...
