Java 中的内部类的定义

目录

一、成员内部类

二、静态内部类

三、局部内部类

四、匿名内部类


一、成员内部类

public class InnerClass {String name;private Integer age;static String hobby;/*** 成员内部类* 1、成员内部类中只能定义非静态属性和方法* 2、成员内部类中可以访问外部类的成员,私有的可以,静态的也可以*/public class MemberInnerClass {//static int num;  报错int age = 20;public void test() {//当本类中没有该属性,则会去外部类中寻找该属性,访问外部类属性System.out.println("访问外部类的成员变量:" + name); // => null//当本类中有该属性,此时访问的是内部类的 age,this代表的是 MemberInnerClassSystem.out.println("访问内部类的成员变量:" + age); // => 20System.out.println("访问外部类的私有成员变量:" + InnerClass.this.age);// =>nullSystem.out.println("访问外部类的静态成员变量:" + hobby); // => null}}
}

成员内部类的创建方式

二、静态内部类

静态内部类的创建方式

三、局部内部类

/*** 局部内部类:定义在外部类方法中* 1、局部内部类中只能定义非静态属性和方法* 2、局部内部类中可以访问外部类的成员,私有的可以,静态的也可以* 3、局部内部类只能在方法内创建对象* 4、局部内部类只能访问 局部常量* 在jdk1.7版本中,如果局部变量在局部内部类中使用必须要显式的加上final* 在jdk1.8版本中,final是默认加上的* 因为局部变量在方法结束后,就会被销毁,而局部内部类的对象却要等到内存回收机制进行* 销毁所以如果是常量的话,那么常量就会被存放在常量池中,*/public void method() {int n = 10;int m = 10;m=20;final int[] nums = {1};final InnerClass innerClass = new InnerClass();class LocalInnerClass {public void test() {//局部变量被访问时默认添加了 final 关键字System.out.println("访问外部类的方法的局部变量:" + n);/* Variable 'n' is accessed from within inner class,needs to be final or effectively final报错,n 可以被内部类访问,需要是常量值或有效的常量值因为 m 在外部已经被修改了,它不再是有效的常量值 */System.out.println("访问外部类的方法的局部变量:" + m);// n=20;  常量不能被修改/*不报错,因为 final 修饰的基本数据类型的数值不能被改变,但是被 final 修饰的引用变量它的引用对象不能改变,但是其中的属性可以改变*/nums[0] = 20;innerClass.name = "张三";//nums=new int[10]; 报错 常量值不能更改//innerClass=new InnerClass();  报错System.out.println("访问外部类的成员变量:" + name);System.out.println("访问外部类的私有成员变量:" + age);System.out.println("访问外部类的静态成员变量:" + hobby);}}//只能在被创建的方法中创建该类LocalInnerClass localInnerClass = new LocalInnerClass();localInnerClass.test();}

四、匿名内部类

/*** 匿名内部类:本身就是一个对象* 1、匿名内部类本身就是一个对象* 2、一般在匿名内部类中不会定义属性和方法,因为没有意义* 3、匿名内部类的父类一般都是抽象类或者是接口* 4、访问变量机制和局部内部类一致* 匿名内部类的应用场景* 如果一个方法的参数是接口,且这个接口只需要实现一次,那么就可以使用匿名内部类* 这个接口的实现每一次都不相同,就可以使用匿名内部类*/public void test() {int n = 10; // 默认添加了 final//例如创建一个线程Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// n=20;  报错System.out.println("访问外部类的成员变量:" + name);System.out.println("访问外部类的私有成员变量:" + age);System.out.println("访问外部类的静态成员变量:" + hobby);}});}

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

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

相关文章

vue3表格导入导出.xlsx

在这次使用时恰好整出来了,希望大家也能学习到,特此分享出来 使用前确保安装以下模块,最好全局配置element-plus ### 展示一下 ### ###导出选项 ### ###导入de数据 ### 安装的模块 npm install js-table2excel // 安装js-table2excel n…

自动化测试工具选择指南

随着软件开发周期的不断缩短和需求的增加,自动化测试变得愈发重要。然而,选择适合项目的自动化测试工具并非易事。以下是一些指导原则,帮助你在众多自动化测试工具中做出明智的选择。 1. 项目需求分析 在选择自动化测试工具之前,首…

海康威视对讲广播系统 RCE漏洞复现(CVE-2023-6895)

0x01 产品简介 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 0x02 漏洞概述 Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版本存在操作系统命令注入漏洞,该漏洞源于文件/php/ping.php的参数jsonda…

阿里云k8s集群搭建

文章目录 一、安装前准备1.环境2.k8s集群规划 二、k8s 安装1. centos基础设置2. docker 安装3. k8s安装3.1 添加阿里云 yum 源3.2 安装 kubeadm、kubelet、kubectl3.3 部署 Kubernetes Master3.4 加入 Kubernetes Node3.5 部署 CNI 网络插件3.6 测试 kubernetes 集群 一、安装前…

Python | Flask测试:发送post请求的接口测试

HTTP/1.1 协议规定的 HTTP 请求方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 几种。POST通常用来向服务端提交数据,主要用于提交表单、上传文件。 HTTP 协议是以ASCII码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为…

浅析:智能化视频安全监管系统的设计与实现步骤

关于智能化视频监管方案,小编已经和大家分享了很多,今天就和大家来探讨一下关于智能化视频安全监管系统的设计与实现步骤。 首先需要分析需求。要与使用者和业务部门合作,明确系统的功能和需求,例如,确定监控区域、安…

MyBatis——MyBatis的原始Dao开发(了解)

MyBatis的原始Dao开发-了解 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方式和Mapper接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。在之前的文章已经给大家介绍了基于代理方式的dao开发&#x…

在scrapy 使用selenium模拟登录获取cookie

前言 最近有一点点爬虫需求,想总结一下scrapy框架的一些基本使用方法,加深印象,自己一直习惯使用一些脚本文件运行爬虫,面对数据量非常大,稳定性要求比较高的,效率需求比较高的情况下还是用scrapy较为合适…

Azure Machine Learning - 提示工程高级技术

本指南将指导你提示设计和提示工程方面的一些高级技术。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师&#xff0c…

Python MySQL数据库连接实现增删改查

一、应用场景 python项目连接MySQL数据库时,需要第三方库的支持。这篇文章使用的是PyMySQL库,适用于python3.x。 二、安装 pip install PyMySQL三、使用方法 1.导入模块 import pymysql2.连接数据库 db pymysql.connect(hostlocalhost,usercode_s…

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后,我们可以将寄存器信息保存到设备树,即便是更换了一个设备,我们也无需修改驱动文件,只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式,这两种方式的主要是设备树中 re…

什么是触控芯片?触控芯片有哪些?

一、什么是触控芯片? 触控芯片是一种用于感知人机交互行为的电子元器件,通过感应人体肌肉、电容电场和压力等多种信号,实现触摸屏幕、手势操作、手写输入等功能。二、触控芯片的工作原理 触控芯片的工作原理基于电容原理,当人体肌…

一文读懂PMP项目管理

PMP项目管理是什么 PMP(Project Management Professional)指项目管理专业人员资格认证,由美国项目管理协会(Project Management Institute,简称PMI)发起,目前已在全球206个国家和地区进行认证&…

小黑南京归来,参加部里的公务员培训,有点儿社死认识了好多小伙伴的leetcode之旅13. 罗马数字转整数

小黑代码 class Solution:def romanToInt(self, s: str) -> int:chars [M, CM, D, CD, C, XC, L, XL, X, IX, V, IV,I]nums [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]map_ dict((k, v) for k,v in zip(chars, nums))# 字符串长度n len(s)# 结果变量res …

Java集合转int数组

集合通过toArray()方法进行转换为数组&#xff0c;可以转换成为指定类型的数组&#xff0c; 【但是】这些类型都必须是object类型的子类&#xff0c;基本类型不可以。 可以通过stream流处理&#xff1a; Set<Integer> set new HashSet<>(); int[] result interSet…

Swagger2解放双手的API开发文档生成

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《MyBatis-Plus》。&#x1f3af;&#x1f3af; &am…

NFS原理详解

一、NFS介绍 1&#xff09;什么是NFS 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。 NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。 在本地的NFS客户端的机器看来&#xff0c;NFS服务器端共享的目录就好像自己的磁…

Tomcat为什么要重写类加载器?

文章目录 一、双亲委派机制二、分析1、Tomcat需要隔离性2、Tomcat需要热替换3、打破双亲委派机制 三、Tomcat类加载器1、拓展类加载器2、工作原理 四、总结 一、双亲委派机制 首先了解下双亲委派机制&#xff0c;大致过程如下&#xff1a; 简单来说&#xff0c;就是加载class…

ansible(不能交互)

1、定义 基于python开发的一个配置管理和应用部署工具&#xff0c;在自动化运维中异军突起&#xff0c;类似于xshell一键输入的工具&#xff0c;不需要每次都切换主机进行操作&#xff0c;只要有一台ansible的固定主机&#xff0c;就可以实现所有节点的操作。不需要agent客户端…

位操作符详解(C语言)

前言 C语言中的位操作符是用来对数据的二进制表示进行位级操作的运算符。这些操作符包括位与&#xff08;&&#xff09;、位或&#xff08;|&#xff09;、位异或&#xff08;^&#xff09;、位取反&#xff08;~&#xff09;&#xff0c;这些位操作符可以用来进行各种位级…