前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java学习笔记(基础篇)—内部类

java学习笔记(基础篇)—内部类

作者头像
chlinlearn
发布于 2019-07-24 02:58:47
发布于 2019-07-24 02:58:47
59500
代码可运行
举报
文章被收录于专栏:java老实人java老实人
运行总次数:0
代码可运行

一、内部类

1.顶层类和内部类的区别:

1)位置: 内部类是定义一个类的里面或者一个方法中,或者一个表达式中。 顶层类是定义在package下 2)修饰符:顶层类只能处于public和默认访问级别, 成员内部类可以处于public, protected, private和默认这4种访问级别;

2.作用:

1)可以避免命名冲突。 2)定义类的范围从package变成了类。在一个类的内部定义的类称为内部类。 3)进行再一次的封装 4)分担外围类的功能

3.内部类的分类:

​ 变量按照作用域可分为: ​ 1) 成员变量: 实例变量、静态变量; ​ 2) 局部变量; ​ 同样,内部类按照作用域可分为; ​ 1) 成员内部类: 实例内部类、静态内部类; ​ 2) 局部内部类;放在方法里 ​ 3) 匿名内部类

a) 静态内部类: 用static修饰,相当于静态方法。放在方法外,类里面的。

静态内部类具有以下特点: 1)静态内部类可以直接访问外部类的静态资源。如果静态内部类中的变量名字和外围类的变量名字相同,需要指定访问时的谁的名字。 2)静态内部类如果访问外部类的实例成员, 就必须通过外部类的实例去访问。 3)静态内部类的实例不会自动持有外部类的特定实例的引用, 在创建静态内部类的实例时,不必创建外部类的实例。 4)在静态内部类中可以定义静态成员和实例成员。 5)外围类可以通过完整的类名直接访问静态内部类的静态成员。 6)外围类可以通过内部类对象调用静态内部类对象的非静态成员。 7)在静态内部类中和外围类中创建静态内部类的对象:

静态内部类类名 m=new 静态内部类类名();

在其他类中创建静态内部类的对象:

外围类.静态内部类类名 m= new 外围类.静态内部类类名();

b)实例内部类:没有static修饰符。相当于成员变量。放在方法外,类里面的。

特点: 1)在内部类中,可以直接访问外部类的所有资源(属性和方法)。 2)成员内部类不能定义静态的资源,只能定义非静态的资源。 3)外围类不能直接访问成员内部类的资源.先创建成员内部类的对象,在通过调用非静态资源(对象.资源). 4)在成员内部类中和外围类中创建成员内部类的对象成员内部类中:

类名 m=new 成员内部类类名();

外围类中:

类名 m=this.new 成员内部类类名();

在其他类中创建成员内部类的对象:

外围类.成员内部类类名 m=new 外围类().new 成员内部类类名();

5)在创建实例内部类的实例时,外部类的实例必须已经存在。 6)在成员内部类中调用外围类中同名资源:

外围类.this.资源

7)如果实例内部类B与外部类A包含同名的成员, 那么在类B中,this.v表示类B的成员, A.this.v表示类A的成员 8)实例内部类的实例自动持有外部类的实例的引用。 9)外部类实例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部类实例,而一个外部类实例对应零个或多个内部类实例。

c) 局部内部类: 在一个方法中定义的内部类,它的可见范围是当前方法。和局部变量一样。

特点: 1)局部内部类只能在当前方法中使用。 2)局部内部类和实例内部类一样,不能包含静态成员。 3)在局部内部类中定义的内部类也不能被public、 protected和private这些访问控制修饰符以及static修饰(都是局部的); 4)可以访问外部类的所有成员。 5)局部内部类还可以访问所在方法中的final类型的局部变量。final延长局部变量的生命周期。

d)匿名内部类:在一个方法中定义的内部类,它的可见范围是当前方法。和局部变量一样。

特点: 1)没有类名,使用接口或者抽象类代替类名 2)访问外围类的一切资源(方法和属性) 3)访问该方法final修饰的局部变量,jdk1.8以后不需要 4)放在方法中或者作为参数。

几种内部类的区别:

  1. 创建

a. 声明的位置: 静态内部类:类的内部,方法的外部,用static关键字修饰; 实例内部类:类的内部,方法的外部,不用static关键字修饰; 局部内部类:方法的内部; 匿名内部类:既可以在类的内部,方法的外部,也可以在方法的内部;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  b. 实例化方式:
     静态内部类:new Outer.Inner();          //在外部类外创建;
                new Inner();                //在外部类内内部类外创建
     实例内部类:new Outer().new Inner();      //在外部类外创建;
                  this.new Inner();             //在外部类内内部类外创建 
     局部内部类:new Inner();                  //只能在方法内部创建
     匿名内部类:new 类名() {};            
  1. 访问 a. 外部类访问内部类: 静态内部类:通过完整的类名直接访问静态内部类的静态成员; 实例内部类:通过内部类的实例去访问内部类的成员; 局部内部类:不能访问; 匿名内部类:不能访问; b. 内部类访问外部类: 静态内部类:直接访问外部类的静态成员; 实例内部类:可以直接访问外部类的所有成员; 如果实例内部类B与外部类A包含同名的成员,那么在类B中, this.v表示类B的成员, A.this.v表示类A的成员。 局部内部类:可以直接访问外部类的所有成员, 访问所在方法中的final类型的参数和变量; 匿名内部类:可以直接访问外部类的所有成员, 访问所在方法中的final类型的参数和变量;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//成员内部类,静态内部类
StaticInnerTest.class
StaticInnerTest$MaxMin.class
//局部内部类
LocalInnerTest.class         
LocalInnerTest$1MaxMin.class
//匿名内部类
AnonymousInnerTest.class
AnonymousInnerTest$1.class
内部类的使用:

图形化界面中组件的监听事件工厂模式,在内部类只有在该外围类有意义,出了该外围类就没有意义了, 就可以将该类定义成内部类。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Linux源码分析-RDMA的通信连接管理CM模块
RDMA CM 是一种通信管理器,用于设置可靠、连接和不可靠的数据报数据传输。 它提供用于建立连接的 RDMA 传输中立接口。 API 概念基于套接字,但适用于基于队列对 (QP) 的语义:通信必须通过特定的 RDMA 设备进行,并且数据传输基于消息。 RDMA CM 可以控制 RDMA API 的 QP 和通信管理(连接建立/拆除)部分,或者仅控制通信管理部分。 它与 libibverbs 库定义的 verbs API 结合使用。 libibverbs 库提供了发送和接收数据所需的底层接口。 RDMA CM 可以异步或同步操作。 用户通过在特定调用中使用 rdma_cm 事件通道参数来控制操作模式。 如果提供了事件通道,rdma_cm 标识符将报告该通道上的事件数据(例如连接结果)。 如果未提供通道,则所选 rdma_cm 标识符的所有 rdma_cm 操作将被阻止,直到完成。 RDMA CM 为不同的 libibverbs 提供商提供了一个选项来宣传和使用特定于该提供商的各种 QP 配置选项。 此功能称为 ECE(增强连接建立)
晓兵
2024/04/27
1.2K0
Linux源码分析-RDMA的通信连接管理CM模块
RDMA - 通信库Libfabric的verbs实现(GDR概览)
Libfabric: https://github.com/ofiwg/libfabric.git
晓兵
2024/12/28
3050
RDMA - 通信库Libfabric的verbs实现(GDR概览)
DAOS Mercury(HG) Libfabric(OFI) RDMA 分层verbs接口调用详解
参考之前的分享中, DAOS与RDMA分层关系如下图, DAOS引擎 -> CART(RPC/大块数据/集合RPC请求) -> Mercury(HG: RPC注册/回调/RPC操作/预期/非预期消息/大块消息/轮训/阻塞/网络抽象等) -> Libfabric(网络抽象层,对rxm,rdma verbs, socket, 共享内存等抽象) -> RDMA(verbs) -> rdma-core(用户态驱动) -> RDMA网卡硬件驱动(如:英伟达 mellanox迈络思), 今天咱们来探讨一下分层verbs接口调用详情
晓兵
2023/10/05
1K2
DAOS Mercury(HG) Libfabric(OFI) RDMA 分层verbs接口调用详解
DAOS低时延与高性能RDMA网络(CART_RPC_Mercury_Libfabric_Rxm_Verbs_RDMA)
RDMA(Remote Direct Memory Access)远程直接内存访问是一种技术,它使两台联网的计算机能够在主内存中交换数据,而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样,RDMA 提高了吞吐量和性能,因为它可以释放资源(如cpu),从而加快数据传输速率并降低延迟。在大规模并行计算机集群中特别有用,比如分布式存储,超算中心。
晓兵
2023/06/23
9170
DAOS低时延与高性能RDMA网络(CART_RPC_Mercury_Libfabric_Rxm_Verbs_RDMA)
RDMA-Linux-infiniband-RDMA子系统-源码分析-IB架构-IB设备初始化和注册-内核uverbs接口注册-GID缓存机制
该驱动程序通过 Linux 网络堆栈实现 InfiniBand RDMA 传输。 它使具有标准以太网适配器的系统能够与 RoCE 适配器或运行 RXE 驱动程序的另一个系统进行互操作。 有关 InfiniBand 和 RoCE 的文档可以从 www.infinibandta.org 和 www.openfabrics.org 下载。 (另请参见 siw,它是 iWARP 的类似软件驱动程序。)该驱动程序分为两层,一层与 Linux RDMA 堆栈接口,并实现内核或用户空间动词 API。 用户空间动词 API 需要一个名为 librxe 的支持库,该支持库由通用用户空间动词 API libibverbs 加载。 另一层与第 3 层的 Linux 网络堆栈接口。要配置和使用 soft-RoCE 驱动程序,请使用“配置 Soft-RoCE (RXE)”部分下的以下 wiki 页面:https://github.com/linux-rdma/rdma-core/blob/master/Documentation/rxe.md
晓兵
2024/04/19
1.9K0
RDMA-Linux-infiniband-RDMA子系统-源码分析-IB架构-IB设备初始化和注册-内核uverbs接口注册-GID缓存机制
RDMA_verbs详解-修改队列对属性(ibv_modify_qp)-ceph-ucx-nccl-intel rdma驱动源码解析
QP上可变化的属性描述了QP的发送和接收属性。 在 UC 和 RC QP 中,这意味着将 QP 与远程 QP 连接。 在 Infiniband 中,应向子网管理员 (SA) 执行路径查询,以确定 QP 应配置哪些属性或作为最佳解决方案,使用通信管理器 (CM) 或通用 RDMA CM 代理 (CMA) 连接 QP。 然而,有些应用程序(如ceph)更喜欢自行连接 QP,并通过套接字交换数据来决定使用哪些 QP 属性。 在 RoCE 中,应在连接的 QP 的 QP 属性中配置 GRH,或在 UD QP 的地址句柄(Address Handle)中配置 GRH。 在 iWARP 中,应仅使用通用 RDMA CM 代理 (CMA) 连接 QP。 结构体: struct ibv_qp_attr 描述了队列对QP的属性:
晓兵
2024/02/24
9524
RDMA_verbs详解-修改队列对属性(ibv_modify_qp)-ceph-ucx-nccl-intel rdma驱动源码解析
Linux RDMA RXE/SoftRoCE 软件RoCE-内核驱动源码
rdma_rxe 内核模块提供 RoCEv2 协议的软件实现。 RoCEv2 协议是存在于 UDP/IPv4 或 UDP/IPv6 之上的 RDMA 传输协议。 InfiniBand (IB) 基本传输标头 (BTH) 封装在 UDP 数据包中。 创建 RXE 实例后,通过 RXE 进行通信与通过任何 OFED 兼容的 Infiniband HCA 进行通信相同,尽管在某些情况下会涉及寻址问题。 特别是,虽然 GRH 标头的使用在 IB 子网中是可选的,但对于 RoCE 来说是强制性的。 基于 IB 动词编写的动词应用程序应该可以无缝工作,但它们需要在创建地址向量时提供 GRH 信息。 修改库和驱动程序以提供硬件所需的从 GID 到 MAC 地址的映射
晓兵
2024/04/10
2.4K2
Linux RDMA RXE/SoftRoCE 软件RoCE-内核驱动源码
RDMA_verbs编程详解-查询设备列表(ibv_get_device_list)和打开设备(ibv_open_device)
IB设备通过ib_core驱动注册后(lsmod|grep ib), 在sysfs下生成的目录树参考如下:
晓兵
2024/02/13
1.2K0
RDMA_verbs编程详解-查询设备列表(ibv_get_device_list)和打开设备(ibv_open_device)
分布式存储_高性能RDMA网络_架构设计_性能调优参考_网卡排查命令_笔记
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
晓兵
2023/11/03
4.9K0
分布式存储_高性能RDMA网络_架构设计_性能调优参考_网卡排查命令_笔记
RDMA_verbs详解-ibv_reg_mr(注册内存)源码分析
博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts
晓兵
2024/03/23
1.5K2
RDMA_verbs详解-ibv_reg_mr(注册内存)源码分析
NVMe-oF,nvme_cli_initiator与tgt(spdk_tgt)之Fabrics(RDMA)流程源码分析
NVMe over Fabrics (NVMe-oF) 是 NVMe 网络协议对以太网和光纤通道的扩展,可在存储和服务器之间提供更快、更高效的连接,并降低应用程序主机服务器的 CPU 利用率
晓兵
2023/07/14
2.3K0
NVMe-oF,nvme_cli_initiator与tgt(spdk_tgt)之Fabrics(RDMA)流程源码分析
DAOS_分布式存储_mercury_libfabric_rdma_rpc高性能网络_大块数据_bulk传输_中断_轮询自动切换_等笔记
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
晓兵
2023/11/03
4290
DAOS_分布式存储_mercury_libfabric_rdma_rpc高性能网络_大块数据_bulk传输_中断_轮询自动切换_等笔记
RDMA - ODP按需分页设计原理-优点-源码浅析
HMM: 异构内存管理(Heterogeneous Memory Management)
晓兵
2024/06/14
7540
RDMA - ODP按需分页设计原理-优点-源码浅析
DAOS分布式存储_libfabric_高性能RPC_rdma网络_笔记
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
晓兵
2023/11/03
6630
DAOS分布式存储_libfabric_高性能RPC_rdma网络_笔记
Nvidia DOCA - 芯片上的数据中心软硬件架构简介
DOCA: Data Center-on-a-Chip Architecture, 芯片上的数据中心架构
晓兵
2024/03/31
5440
Nvidia DOCA - 芯片上的数据中心软硬件架构简介
RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)
这篇文章描述了通过 PCI Express 结构在 CPU 和 NIC 之间发生的一系列协调事件,以通过 InfiniBand 互连传输消息并发出其完成信号。
晓兵
2024/06/16
1K0
RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)
UCX-UCT统一通信传输层3-服务端和客户端调用栈详解(及相关)_源码解读
https://github.com/ssbandjl/ucx/blob/master/category/uct_readme
晓兵
2023/10/30
1.3K0
UCX-UCT统一通信传输层3-服务端和客户端调用栈详解(及相关)_源码解读
NCCL与RDMA和MPI基本框架源码分析
verbs:宽松排序内存区域,添加一个标志以允许创建宽松排序内存区域。 通过此类 MR 的访问可以通过允许系统对某些访问重新排序来提高性能。 由于宽松排序是一种优化,因此不支持它的驱动程序可以简单地忽略它。 可选的 MR 访问位范围是根据内核匹配部分定义的,其第一个条目将为 IBV_ACCESS_RELAXED_ORDERING。 如果应用程序使用可选范围中的一位,则库会将其屏蔽掉,以防内核不支持“MR 可选模式”, IBV_ACCESS_RELAXED_ORDERING 此设置允许 NIC 放宽在网络和目标内存区域之间传输数据的顺序。放宽排序允许网络发起的写入(例如传入消息发送或 RDMA 写入操作)以任意顺序到达内存。这可以提高某些应用程序的性能。但是,放宽排序具有以下影响:不再保证 RDMA 写入后写入消息的顺序。(发送消息仍将按顺序匹配已发布的接收缓冲区。)针对同一内存区域的背靠背网络写入使该区域处于未知状态。放宽排序不会改变完成语义,例如数据可见性。也就是说,完成仍然确保所有数据都是可见的,包括来自先前传输的数据。放宽排序的操作也不会绕过原子操作
晓兵
2025/02/06
3772
NCCL与RDMA和MPI基本框架源码分析
优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源
DMA 代表直接内存访问。这意味着应用程序可以在 CPU 干预的情况下直接访问(读/写)主机内存。如果您在主机之间执行此操作,它将成为远程直接内存访问 (RDMA)
晓兵
2023/12/19
2K2
优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源
RDMA - GDR GPU Direct RDMA快速入门2
https://hpcadvisorycouncil.atlassian.net/wiki/spaces/HPCWORKS/pages/2791440385/GPUDirect+Benchmarking
晓兵
2025/03/30
4110
RDMA - GDR GPU Direct RDMA快速入门2
推荐阅读
Linux源码分析-RDMA的通信连接管理CM模块
1.2K0
RDMA - 通信库Libfabric的verbs实现(GDR概览)
3050
DAOS Mercury(HG) Libfabric(OFI) RDMA 分层verbs接口调用详解
1K2
DAOS低时延与高性能RDMA网络(CART_RPC_Mercury_Libfabric_Rxm_Verbs_RDMA)
9170
RDMA-Linux-infiniband-RDMA子系统-源码分析-IB架构-IB设备初始化和注册-内核uverbs接口注册-GID缓存机制
1.9K0
RDMA_verbs详解-修改队列对属性(ibv_modify_qp)-ceph-ucx-nccl-intel rdma驱动源码解析
9524
Linux RDMA RXE/SoftRoCE 软件RoCE-内核驱动源码
2.4K2
RDMA_verbs编程详解-查询设备列表(ibv_get_device_list)和打开设备(ibv_open_device)
1.2K0
分布式存储_高性能RDMA网络_架构设计_性能调优参考_网卡排查命令_笔记
4.9K0
RDMA_verbs详解-ibv_reg_mr(注册内存)源码分析
1.5K2
NVMe-oF,nvme_cli_initiator与tgt(spdk_tgt)之Fabrics(RDMA)流程源码分析
2.3K0
DAOS_分布式存储_mercury_libfabric_rdma_rpc高性能网络_大块数据_bulk传输_中断_轮询自动切换_等笔记
4290
RDMA - ODP按需分页设计原理-优点-源码浅析
7540
DAOS分布式存储_libfabric_高性能RPC_rdma网络_笔记
6630
Nvidia DOCA - 芯片上的数据中心软硬件架构简介
5440
RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)
1K0
UCX-UCT统一通信传输层3-服务端和客户端调用栈详解(及相关)_源码解读
1.3K0
NCCL与RDMA和MPI基本框架源码分析
3772
优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源
2K2
RDMA - GDR GPU Direct RDMA快速入门2
4110
相关推荐
Linux源码分析-RDMA的通信连接管理CM模块
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档