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. 项目需求分析 在选择自动化测试工具之前,首…

0x25 广度优先搜索

0x25 广度优先搜索 在0x21节中,我们介绍了图的广度优先遍历,在0x22节中,我们又定义了深度优先搜索过程产生的“搜索树”结构。如果我们把问题状态空间类比成一张图,那么广度优先搜索就是相当于对这张图的广度优先遍历。类似地&am…

海康威视对讲广播系统 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 集群 一、安装前…

配置应用到k8s

配置应用到k8s,前置条件是安装了Docker,Minikube,kubectl 应用已经通过Docker生成本地镜像文件 1,创建godemo-deployment.yaml apiVersion: apps/v1kind: Deploymentmetadata:name: godemo-deploymentspec:replicas: 3 #启动三个…

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

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

认识数仓拉链表

数据仓库之拉链表 在数据仓库领域,拉链表是一种非常重要的数据结构,它能够对数据进行有效的组织和处理。本文将详细介绍拉链表的概念、应用、优缺点以及实现方法,帮助读者更好地理解和掌握数据仓库中的拉链表技术。 场景问题 在数据仓库的…

解决Edge浏览器问题的实用教程

学习目标: 掌握解决Edge浏览器常见问题的方法。提升对浏览器故障排除的能力。 学习内容: 常见Edge浏览器问题的识别和解决方法。例如页面加载慢、无法访问特定网站、崩溃或无响应等。更新Edge浏览器和操作系统,以确保拥有最新的安全补丁和功…

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

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

使用Vue customRef创建防抖 ref

customRef 用于创建一个自定义的ref&#xff0c;显式声明对其依赖追踪和更新触发的控制方式。 function customRef<T>(factory: CustomRefFactory<T>) : Ref<T>// customRef接受一个工厂函数作为参数&#xff0c;这个工厂函数接受track、trugger两个函数 //…

Tomcat介绍及使用:构建强大的Java Web应用服务器

引言&#xff1a; 在现代软件开发中&#xff0c;Web应用已经成为了不可或缺的一部分。而为了构建高效、稳定的Web应用服务器&#xff0c;选择合适的工具和技术至关重要。Tomcat作为一款开源的Java Web应用服务器&#xff0c;凭借其丰富的功能和灵活的配置&#xff0c;成为了开发…

C #define宏展开#与##

#include<stdio.h> //宏展开后解释成字符串&#xff1a;# #define fprint(expr) printf(#expr "%.1f\n",expr) #define strprint(expr) printf("%s\n",#expr) //宏展开后拼接变量&#xff1a;## #define strconcatprint(expr1,expr2) printf("%…

[C错题本]

1.int,short,long都是signed的 但是char可能是signed 也可能是unsigned的——《C Primer》 2.在16位的PC中 char类型占1个字节 int占2个字节 long int占4个字节 float占四个字节 double占八个字节 3.自增运算符和自减运算符即使是在判断条件中使用也会实际生效 int i 1; int…

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

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

群聊中如何开启位置实时共享

如果需要在群聊中也加入该功能可在 RCConfig.plist 文件中添加如下内容&#xff1a; &#xff08;**注意&#xff1a;**群聊最多支持5人同时位置共享。&#xff09; 实时位置共享功能技术文档链接&#xff1a;融云开发者文档 2 <key>RealTimeLocationShare</key> &…

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

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

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

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

手动实现 Vue 3的简易双向数据绑定(模仿源码)

Vue 3 带来了许多令人兴奋的新特性和改进&#xff0c;其中之一就是其双向数据绑定的实现方式。与 Vue 2 使用 Object.defineProperty 不同&#xff0c;Vue 3 利用了 JavaScript 的 Proxy 特性来创建响应式数据。在这篇博客中&#xff0c;我们将探讨 Vue 3 中双向数据绑定的基础…

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

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