Java-内部类

目录

概述

类的五大成员

定义

使用场景

访问特点

分类

成员内部类

如何书写

如何创建对象

变量重名时,内部类访问变量的内存图

静态内部类

局部内部类

匿名内部类


概述

类的五大成员

属性、方法、构造方法、代码块、内部类

定义

在一个类里面再定义一个类,这个类就被称为内部类。

使用场景

内部类表示的事物是外部类的一部分,且内部类单独存在没有意义。

访问特点

内部类可以直接访问外部类的成员,包括私有成员。

外部类要访问内部类的成员,则必须创建对象。

分类

成员内部类

如何书写

  • 写在成员位置的,属于外部类的成员
  • 成员内部类可以被修饰符所修饰
  • 在成员内部类里面,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量

如何创建对象

  • 在外部类中编写方法,对外提供内部类的对象(在成员内部类被private修饰的情况下)
  • 直接创建格式:外部类名.内部类名  对象名 = 外部类对象.内部类对象
Outer.Inner oi = new Outer().new Inner();

变量重名时,内部类访问变量的内存图

public class Outer {private int a = 10;class Inner {private int a = 20;public void show() {int a = 30;System.out.println(Outer.this.a);System.out.println(this.a);System.out.println(a);}}
}public class Test {public static void main(String[] args) {Outer.Inner oi = new Outer().new Inner();oi.show();}
}

输出a:就近原则,所以输出值为30;

输出this.a: this指代方法的调用者,即内部类对象002地址中的值20;

输出Outer.this.a:在创建内部类对象的时候,除了有成员变量外,还会有一个隐含的外部类对象的地址,这个时候会首先找到002地址,再找到它的外部类对象001地址中的a值10。

静态内部类

  • 实际上静态内部类就是成员内部类用static修饰符来修饰,是一种特殊的成员内部类

  • 静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的则需要创建外部类的对象 ,即:

    Outer o = new Outer();

  • 创建静态内部类对象的格式:外部类名.内部类名  对象名 = new 外部类名.内部类名();

Outer.Inner oi = Outer.Inner();
  • 调用静态方法的格式:外部类名.内部类名.方法名();

局部内部类

  • 将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量
  • 外界无法直接使用,需要在方法内部创建对象并使用
  • 该类可以直接访问外部类中的成员,也可以访问方法内的局部变量

匿名内部类

  • 匿名内部类本质上就是隐藏了名字的内部类。格式如下:
new 类名或者接口名() {重写方法;
};
  • 实质上大括号包含的部分就是一个类,这个类继承了前面的类或者实现了前面的接口,加上new之后,整体就是一个类的子类对象或者接口的实现类对象。匿名内部类实际上包含了继承或实现、方法重写以及创建对象这几个过程
  • 如果实现类只要使用一次,就可以使用匿名内部类简化代码

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

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

相关文章

LeetCode-478. 在圆内随机生成点【几何 数学 拒绝采样 随机化】

LeetCode-478. 在圆内随机生成点【几何 数学 拒绝采样 随机化】 题目描述:解题思路一:一个最简单的方法就是在一个正方形内生成随机采样的点,然后拒绝不在内切圆中的采样点。解题思路二:具体思想是先生成一个0到r的随机数len&…

第5章 固定通信网

文章目录 5.1 固定电话网 133 5.1.1 固定电话网的特点 133 5.1.2 电路交换 133 5.1.3 固定电话网的组成 134 5.2 分组交换网 136 5.2.1 分组交换的基本概念 136 5.2.2 分组交换网协议及性能特点 138 5.2.3 中国公用分组交换网 140 5.3 数字数据网 142 5.3.1 DDN的概…

软件测试要学习的基础知识——黑盒测试

黑盒测试概述 黑盒测试也叫功能测试,通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作是一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,只检查程序功能是否按照…

Mac电脑如何安装git

一、简介 在Mac上安装Git之前,可以先使用git --version来查看一下是否安装了Git,因为Mac系统可能自带了Git,或者在你安装XCode(或者XCode的命令行工具)时,可能已经安装了 Git。 如果Mac还没有安装Git的话&…

一篇吃透大厂面试题,2024找工作一帆风顺。

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

二叉树链式结构

1.前置说明 我们手动构建一棵二叉树: 注意:上述代码并不是创建二叉树的方式 从概念中可以看出,二叉树定义是递归式的,因此后序基本操作中基本都是按照该概念实现的 2.二叉树的遍历 2.1前序、中序以及后序遍历 学习二叉树结构&a…

库函数qsort的使用及利用冒泡排序模拟实现qsort

文章目录 🚀前言🚀void*类型指针🚀库函数qsort的使用🚀利用冒泡排序实现库函数qsort() 🚀前言 今天阿辉将为大家介绍库函数qsort的使用,还包括利用冒泡排序模拟实现qsort以及void*类型的指针,关…

解析原理:微信自动查找优惠券做返利机器人是如何实现的?

解析原理:微信自动查找优惠券做返利机器人是如何实现的? 在现今的互联网时代,人工智能和大数据技术的应用越来越广泛,其中微信自动查找优惠券并做返利机器人的出现,为人们提供了全新的购物体验。那么,这个…

数据结构与算法之美学习笔记:31 | 深度和广度优先搜索:如何找出社交网络中的三度好友关系?

目录 前言什么是“搜索”算法?广度优先搜索(BFS)深度优先搜索(DFS)解答开篇内容小结 前言 本节课程思维导图: 社交网络中,有一个六度分割理论,具体是说,你与世界上的另一…

vue自定义指令配置小程序按钮权限

先创建一个js文件 plugins.js // import { // auth, // authAll // } from "./tools"; import tools from "./tools.js" // import Vue from vuefunction install(Vue, options) {Vue.prototype.$auth tools.auth;Vue.prototype.$authAll tools.auth…

Web安全-初识SQL注入(一)

1、初识SQL注入 1.1、什么是注入? 将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。 注入能导…

前端知识笔记(二十五)———JS中的异步编程与Promise

一、JavaScript的异步编步机制 在了解JavaScript的异步机制之前,我们首先需要理解JavaScript是一种单线程语言。单线程就意味着所有的任务需要按照顺序一次执行,如果前一个任务没有完成,后一个任务就无法开始。这个特性在执行大量或耗时任务时…

mysql有哪些锁,理解各种表锁和行锁

全局锁 主要用于数据库的备份,但会使得备份期间不能有任何事务插入删除更新数据,这很影响实际业务。所以通常不用这个全局锁来完成数据库的备份。假设数据库的存储引擎支持可重复读,那么常见的方法是通过MVCC来实现的,也就是备份…

解决ant-design-vue中Select组件v-model值为空字符串不显示placeholder的bug

方法一: 1.找到node_modules/ant-design-vue/es/vc-select/SingleSelector.js文件 搜索renderPlacehoder方法 将其修改为 const renderPlacehoder () > {const list props.values.filter(val > val.value ! );if (list[0]) {return null}... }2.在此文件中…

springboot遇到的问题02

问题1 JsonFormat(patter"yyyy-MM-dd HH:mm:ss") 这种返回给前端,时间可能会相差8个小时,,,因为JsonFormat 默认的timeZone 是 GMT (即标准时区),会造成输出少8个小时 修改为:JsonFor…

ROS2教程05 ROS2服务

ROS2服务 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author holds all right…

Dockerfile脚本编写流程及示例

学习dockerfile指令 Dockerfile 指令 说明 FROM 指定基础镜像 MAINTAINER 声明镜像的维护者 LABEL 添加元数据标签 RUN 在容器中执行命令 CMD 容器启动后默认执行的命令 EXPOSE 暴露容器的端口 ENV 设置环境变量 ADD 将文件、目录或远程文件添加到容器中 COP…

Maxwell学习笔记

1 概述 Maxwell 是由美国 Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台…

选择测试自动化工具的4个技巧

预计至2026年,全球软件测试自动化市场价值将超过499亿美元,这意味着市场上的自动化测试工具数量也将同步增长。在这样的情况下,企业该如何选择最适合自己的自动化测试工具呢? 什么是测试自动化工具 数字经济迫使几乎每个企业都创建…

InnoDB的锁

自增锁 自增锁是一种特殊的表级别锁(table-level lock),专门针对事务插入 AUTO_INCREMENT 类型的列。最简单的情况,如果一个事务正在往表中插入记录,所有其他事务的插入必须等待,以便第一个事务插入的行&a…