当前位置: 首页 > news >正文

Java---- 静态内部类与非静态内部类的区别

在面试中回答的很不全,所以再此做一个总结。

1 static 静态修饰符

在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的。
static修饰表示静态的,在类加载时JVM会把它放到方法区,被本类以及本类中所有实例所公用。在编译后所分配的内存会在一直存在,直到程序退出内存才会释放这个空间。如果一个被所有实例公用的方法被申明为static,那么就可以节省空间了,不用每个实例初始化的时候都被分配到内存。

2.内部类

定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性。

3.静态类(只有内部类才能被声明为静态类,即静态内部类)

1.只能在内部类中定义静态类
2.静态内部类与外层类绑定,即使没有创建外层类的对象,它一样存在。
3.静态类的方法可以是静态的方法也可以是非静态的方法,静态的方法可以在外层通过静态类调用,而非静态的方法必须要创建类的对象之后才能调用。
5.只能引用外部类的static成员变量(也就是类变量)。
6.如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态的。

以上稍微介绍了一下静态类,接下来将用代码来分析静态内部类与非静态内部类的区别。

public class OutClassTest {int out1=1;static int out2=1;void out(){System.out.println("非静态");}static void outstatic(){System.out.println("静态");}public class InnerClass{void InnerClass(){System.out.println("InnerClass!");System.out.println(out1);System.out.println(out2);out();outstatic();//静态内部类只能够访问外部类的静态成员}// static void inner(){}  static int i=1; 非静态内部类不能有静态成员(方法、属性)}public static class InnerstaticClass{void InnerstaticClass(){System.out.println("InnerstaticClass");//  System.out.println(out1);out(); 静态内部类只能够访问外部类的静态成员System.out.println(out2);outstatic();}static void innerstatic(){}  static int i=1;//静态内部类能有静态成员(方法、属性)}public static void main(String args[]){OutClassTest a=new OutClassTest();OutClassTest.InnerstaticClass b=new OutClassTest.InnerstaticClass();//创建静态内部类OutClassTest.InnerClass c=a.new InnerClass();//创建非静态内部类}
}1234567891011121314151617181920212223242526272829303132333435

总结

1.是否能拥有静态成员
静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。
2.访问外部类的成员
静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。
3.静态内部类和非静态内部类在创建时有区别

//假设类A有静态内部类B和非静态内部类C,创建B和C的区别为: 
A a=new A(); 
A.B b=new A.B(); 
A.C c=a.new C();1234

相关文章:

Java---- 静态内部类与非静态内部类的区别

在面试中回答的很不全,所以再此做一个总结。 1 static 静态修饰符 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的。 static修饰表示静态的,在类加载时JVM会把它放到方法区,被本类以及本类中所有实例所公用。在编译后所分…...

STM32 基础知识(探索者开发板)--135讲 ADC转换

ADC定义: ADC即模拟数字转换器,英文详称 Analog-to-digital converter,可以将外部的模拟信号转换 ADC数模转换中一些常用函数: 1. HAL_ADC_Init 函数 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc); 初始化ADC 形参&…...

Java经典框架之SpringBoot

SpringBoot Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. SpringBoot基础 2. Spring…...

LeetCode75| 二叉搜索树

目录 700 二叉搜索树中的搜索 迭代 递归 450 删除二叉搜索树中的节点 700 二叉搜索树中的搜索 注意二叉搜索树的性质即可 迭代 class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {while(root ! NULL){if(root->val < val)root root->r…...

博物馆3d虚拟场景复原制作有助于传承和弘扬中华民族优秀传统文化

古建筑3D虚拟复原是一种利用现代科技手段对古代建筑进行数字化保护和展示的方法。它通过高精度的三维扫描技术&#xff0c;将古建筑的形态、结构、材料等信息转化为数字化数据&#xff0c;再通过计算机图形学技术将这些数据重建为虚拟的三维模型。这种技术在古建筑保护、研究、…...

二维码地址门牌系统:便捷报修服务引领社区新篇章

文章目录 前言一、二维码门牌系统介绍二、便捷报修服务三、多功能应用四、技术发展与应用前景 前言 科技的快速发展引领了社区生活的新变革&#xff0c;其中二维码门牌系统技术在社区管理方面带来了极大的便利和智能化服务。本文将深入了解这项创新技术及其优势。 一、二维码门…...

c++基础(对c的扩展)

文章目录 命令空间引用基本本质引用作为参数引用的使用场景 内联函数引出基本概念 函数补充默认参数函数重载c中函数重载定义条件函数重载的原理 命令空间 定义 namespace是单独的作用域 两者不会相互干涉 namespace 名字 { //变量 函数 等等 }eg namespace nameA {int num;v…...

RS485数据采集模块,如何一次采集多个modbus设备数据?

在工业数据采集中&#xff0c;RS485是一种常见的数据通信协议&#xff0c;而Modbus则是其上的常用设备协议。那么&#xff0c;如何用一个模块高效采集多个Modbus设备的数据呢&#xff1f;这就是我们今天要探讨的话题&#xff01; 什么是RS485数据采集模块&#xff1f; 首先&a…...

面试 Vue 框架八股文十问十答第一期

面试 Vue 框架八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;MVVM 的理解 MVVM (Mod…...

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

一、前言 性能测试之于软件系统&#xff0c;是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线&#xff0c;系统能力设计工作与性能测试工作&#xff0c;既有先后之顺序&#xff0c;亦有相互之影响。以上&#xff0c;在性能测试的场景决策&#xff0c;架构…...

建立分位制,用标准去量化优化效果 - 启动优化为例

Android开发的四年多时间中&#xff0c;逐渐将自己的工作重心从业务移动到小型项目的架构设计&#xff0c;在此过程中代码的书写有了更高的标准和要求&#xff0c;性能优化从此伴随着工作脚步&#xff0c; 为什么要进行性能优化呢&#xff1f; 页面访问时长从1s增加到3s&#…...

Modbus 通信协议 二

Modbus 常用缩写 通用Modbus帧结构 -应用数据单元&#xff08;ADU&#xff09; Modbus数据模型 Modbus ADU 和 PDU 的长度 Modbus PDU结构 串行链路上的 Modbus 帧结构 Modbus 地址规则 ASCLL 模式 和 RTU 模式的比较 RTU 模式 RTU 模式位序列 帧格式 帧的标识与鉴别 CRC 循环冗…...

关于系统设计的一些思考

0.前言 当我们站在系统设计的起点&#xff0c;面对一个新的需求&#xff0c;我们该如何开始呢&#xff1f;这是许多处于系统分析与设计领域的新手常常思考的问题。有些人可能会误以为&#xff0c;只要掌握了诸如面向对象、统一建模语言、设计模式、微服务、Serverless、Servic…...

Java 第19章 IO流 课堂练习+本章作业

文章目录 Buffered流拷贝二进制文件创建文件写入文本读取文本文件存读Properties文件 Buffered流拷贝二进制文件 package com.hspedu.chapter19.outputStream;import java.io.*;public class BufferedCopy02 {public static void main(String[] args) {String srcFilePath &q…...

一键制作电子样册,提升企业品牌形象

​电子样册作为一种新型的宣传方式&#xff0c;具有许多优势。首先&#xff0c;它打破了传统纸质宣传册的局限性&#xff0c;可以随时随地展示企业的产品和服务。其次&#xff0c;电子样册可以通过多媒体形式展示企业的品牌形象&#xff0c;包括图片、视频、文字等多种形式&…...

Linux 的引导与服务控制

一 开机启动过程 bios加电自检-->mbr-->grub-->加载内核文件-->启动进程 1 bios家电自检 检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 2 mbr 因为grup太大,第一个扇区存不下所有的grub程序&#xff0c;所以分为2部分指…...

多输入多输出 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入多输出预测

多输入多输出 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入…...

高端电流检测方案

随着过去传统的“开环”系统被智能和高效率“闭环”设计所取代&#xff0c;准确的电流检测在多种应用中变得越来越重要。常见的电流检测方法&#xff0c;需要将检流电阻串联进被测电流通路&#xff0c;再用放大电路放大检流电阻上的压降。这个放大电路常被称之为电流检测放大器…...

IP地址、子网掩码与网络地址

一、IP地址 在 TCP/IP 体系中&#xff0c;IP 地址是一个最基本的概念。IP地址的作用&#xff1a;实现和网上的其他设备进行通信 IP地址的表示方法 互联网上的每台主机&#xff08;或路由器&#xff09;的每个接口都分配一个全世界唯一的IP地址。该IP地址由ICANN分配。 IP地址…...

python 深度学习 记录遇到的报错问题10

本篇继python 深度学习 解决遇到的报错问题9_module d2l.torch has no attribute train_ch3-CSDN博客 一、CUDA error: no kernel image is available for execution on the device CUDA kernel errors might be asynchronously reported at some other API call,so the stackt…...

小爱音箱改造AUX输入/输出全攻略:一个“几乎成功”的故事

前言很多朋友都想给小爱音箱增加AUX输入和输出功能&#xff0c;实现外接电视、电脑等音源&#xff0c;同时将音箱的声音输出到更大的外置音响系统。网上有很多改造教程&#xff0c;但普遍存在一个严重问题&#xff1a;只实现了单声道输入&#xff0c;浪费了硬件本身的立体声能力…...

FreeRTOS定时器防抖实战:用STM32 HAL库+按键中断,告别按键连击烦恼

FreeRTOS定时器防抖实战&#xff1a;用STM32 HAL库按键中断&#xff0c;告别按键连击烦恼 在嵌入式开发中&#xff0c;按键处理看似简单却暗藏玄机。我曾在一个智能家居项目中遇到这样的尴尬场景&#xff1a;用户按下墙壁开关时&#xff0c;本该只触发一次的动作&#xff0c;由…...

YOLOv9官方镜像深度体验:开箱即用,效果超出预期

YOLOv9官方镜像深度体验&#xff1a;开箱即用&#xff0c;效果超出预期 1. 镜像初体验&#xff1a;零配置启动的惊喜 第一次接触YOLOv9官方镜像时&#xff0c;我带着怀疑的态度——毕竟在深度学习领域&#xff0c;"开箱即用"的承诺往往伴随着各种隐藏的环境配置问题…...

Rufus终极指南:轻松制作Windows 11启动盘,一键绕过TPM限制

Rufus终极指南&#xff1a;轻松制作Windows 11启动盘&#xff0c;一键绕过TPM限制 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 还在为Windows 11的TPM 2.0硬件要求而烦恼吗&#xff1f;你的旧…...

终极指南:如何用Muzic的MusicBERT实现符号音乐深度理解(从入门到实践)

终极指南&#xff1a;如何用Muzic的MusicBERT实现符号音乐深度理解&#xff08;从入门到实践&#xff09; 【免费下载链接】muzic 这是一个微软研究院开发的音乐生成AI项目。适合对音乐、音频处理以及AI应用感兴趣的开发者、学生和研究者。特点是使用深度学习技术生成音乐&…...

如何一键获取国家中小学智慧教育平台所有电子课本?这个智能下载工具给你答案

如何一键获取国家中小学智慧教育平台所有电子课本&#xff1f;这个智能下载工具给你答案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为繁琐的教材下载流程…...

突破GEE内置限制:将本地Python机器学习模型部署至云端

1. 为什么需要将本地模型部署到GEE平台 Google Earth Engine&#xff08;GEE&#xff09;作为全球领先的地理空间分析平台&#xff0c;虽然内置了丰富的遥感数据处理算法&#xff0c;但在机器学习模型方面仍然存在明显短板。我去年在做内蒙古草原退化监测项目时就深有体会——G…...

【实战指南】Green Hills MULTI-IDE 从零安装到嵌入式开发环境搭建

1. Green Hills MULTI-IDE 初探&#xff1a;为什么选择它&#xff1f; 如果你正在寻找一款强大的嵌入式开发工具&#xff0c;Green Hills MULTI-IDE 绝对值得考虑。作为一个在嵌入式领域摸爬滚打多年的老手&#xff0c;我用过Keil、IAR等各种IDE&#xff0c;但MULTI-IDE给我的体…...

开源入门踩坑全实录:从PR被拒到核心贡献者的全周期避坑指南

根据中国开源软件推进联盟2025年发布的《中国开源开发者生态报告》&#xff0c;国内开源开发者规模已突破1200万&#xff0c;但入门1年内就停止贡献的开发者占比高达78.6%。换句话说&#xff0c;每5个尝试入门开源的新手&#xff0c;就有4个会在一年内彻底放弃。 作为从0起步&a…...

深入理解Fritzing电路仿真:5个专业级电子设计验证技巧

深入理解Fritzing电路仿真&#xff1a;5个专业级电子设计验证技巧 【免费下载链接】fritzing-app Fritzing desktop application 项目地址: https://gitcode.com/gh_mirrors/fr/fritzing-app Fritzing是一款开源的电子设计自动化&#xff08;EDA&#xff09;软件&#x…...