静态内部类和非静态内部类的区别

【Android面试八股文】Java中静态内部类是什么?和非静态内部类的区别是什么? 在定义内部类时,如果内部类被static声明,则该内部类是静态内部类。// 外部类// 内部类// 静态内部类。 阅读详情

案例:

复制代码
package com.devin;

public class MyMain{
    private static String name = "woobo";
    private String num = "X001";
 
    // 静态内部类可以用public,protected,private修饰
    static class Person {
        // 静态内部类中可以定义静态或者非静态的成员
        private String address = "China";

        private static String x = "as";
        public String mail = "kongbowoo@yahoo.com.cn";// 内部类公有成员

        public void display() {
            // System.out.println(num);//不能直接访问外部类的非静态成员

            // 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
            System.out.println(name);// 只能直接访问外部类的静态成员

            // 静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
            System.out.println("Inner " + address);// 访问本内部类成员。
        }
    }

    public void printInfo() {
        Person person = new Person();

        // 外部类访问内部类的非静态成员:实例化内部类即可
        person.display();

        // System.out.println(mail);//不可访问
        // System.out.println(address);//不可访问
        System.out.println(person.address);// 可以访问内部类的私有成员

        System.out.println(Person.x);// 外部类访问内部类的静态成员:内部类.静态成员
        System.out.println(person.mail);// 可以访问内部类的公有成员
    }

    public static void main(String[] args) {
        MyMain staticTest = new MyMain();
        staticTest.printInfo();
    }
}
复制代码

1. 嵌套类的对象,并不需要其外围类的对象。 即它可以不依赖于外部类实例被实例化。

2. 不能从嵌套类的对象中访问非静态的外围类对象。 这是由Java语法中"静态方法不能直接访问非静态成员"所限定

3. 外部类访问内部类的的成员有些特别, 不能直接访问, 但可以通过内部类实例来访问, 这是因为静态嵌套内的所有成员和方法默认为静态的了.同时注意, 内部静态类Person只在类StaticTest 范围内可见, 若在其它类中引用或初始化, 均是错误的.
4 . 静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 
5. 静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;

6 . 非静态内部类的非静态成员可以访问外部类的非静态变量。

    生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)

总之一句话:内部静态类没持有其外部类的对象的引用。

转自:http://www.cnblogs.com/devinzhang/archive/2012/02/09/2344105.html

某联达OA任意用户登录漏洞复现 由于`/WebService/Lk6SyncService/DirectToOthers/GetSSOStamp.asm`j接口未作限制,导致可以通过该接口调用`admin`的`cookie`值,通过对`LoginCredence`和`LoginTimestamp`的参数修改,进而实现任意登录进去系统. 阅读详情

相关推荐

主流算力卡性能对比分析

超大规模AI训练/HPC:优先选择NVIDIA H100或AMD MI300X,需关注显存带宽和多卡互联能力。企业级AI训练:NVIDIA A100性价比更高,生态成熟。国内自主可控需求:华为昇腾910B是首选,支持液冷和低功耗设计。本地AI推理/游戏:NVIDIA RTX 4090或RTX 5090性价比突出,但需注意显存容量限制。边缘计算/低功耗场景:华为昇腾310或清微智能TX536(能效比6.3TOPS/W@INT8)更合适。

m0_69867914的博客 7798

静态内部类与非静态内部类的区别及应用场景解析

静态内部类:适用于与外部类弱耦合、可以独立存在的场景。常见的应用场景包括单例模式的实现、工具类、全局状态管理等,能够减少内存占用,提升效率。非静态内部类:适用于与外部类强耦合的场景,尤其是在需要频繁访问外部类实例变量的情况下。例如,在银行系统或订单系统中,需要依赖外部类的实例数据来进行业务操作时,非静态内部类是理想的选择。通过结合实际业务场景使用静态内部类和非静态内部类,能够有效提高代码的可读性、内存效率,并增强程序的结构化和可维护性。

weixin_54574094的博客 2253

Vue3+uniapp开发必备:5分钟搞定unplugin-auto-import自动导入配置(附常见报错解决)

本文详细介绍了在Vue3+uniapp项目中配置unplugin-auto-import插件实现自动导入的方法。通过该配置,开发者无需手动导入ref、onLoad等常用API,可显著提升编码效率和团队协作规范性。文章提供了从安装、TypeScript集成到高级用法的完整指南,并附带了常见报错的解决方案。

weixin_29008805的博客 961

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

静态内部类 1. 静态内部类只能访问外部类的静态成员 (包括静态变量、静态方法) 2. 创建静态内部类对象时,无需创建外部类对象。 3. 静态内部类可以有静态成员、也可以有非静态成员 4. 外部类访问静态内部类的非静态成员,需要通过静态内部类对象访问;外部类访问静态内部类的静态成员,可以通过静态内部类名访问 5. 若静态内部类的访问控制符被设置为private, 只能被外部类访问...

yangyixiao的专栏 759

无需UMAT:基于Abaqus内置模型实现形状记忆聚合物结构的热-力耦合仿真

本文详细介绍了如何利用Abaqus内置模型实现形状记忆聚合物(SMP)的热-力耦合仿真,无需编写复杂的UMAT子程序。通过广义Maxwell模型和Neo-Hookean模型的组合应用,结合完整的热-力耦合分析流程,帮助工程师高效模拟SMP的形状记忆行为。文章还提供了工程应用案例和常见问题解决方案,为相关领域的研究和设计提供实用指导。

weixin_34005090的博客 116

【网络安全的神秘世界】解决dvwa靶场报错:Illegal mix of collations for operation ‘UNION‘

我的 information_schema 使用的是 utf8_general_ci。请根据您的实际情况调整字符集。这通常意味着在执行 UNION 操作时,不同字符集的数据发生了混合,导致冲突。修改字符集设置后,重启 MySQL 服务以应用更改,再次测试一下发现成功。查看 information_schema 的字符集。修改 DVWA 数据库字符集。

菜鸟小羊的博客 2044

静态内部类与非静态内部类有什么区别

静态内部类和非静态内部类都是一种嵌套在其他类中的内部类。

越努力越幸运。 815

PyCharm配置SSH远程解释器第3步时弹框报错:com.google.gson.stream.MalformedJsonException: Expected value at l...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1928

内部静态类和非内部静态类的区别

如果你理解了上面从内存角度的问题,那么接下来这些案例,你都可以从这个角度想通了。原因:静态成员需要在类加载时就存在,并且不依赖于任何实例,但是非静态内部类需要在外部类加载后才可以,所以不行。如果你问我为什么不解释静态内部为甚可以定义静态成员,你白看了兄弟!。// 编译错误:非静态内部类不能定义静态成员// static void staticMethod() {} // 编译错误// 允许定义静态成员// 输出:10// 输出:This is a static method.

qq_63255075的博客 1098

2020计算机专业保研夏令营面经:中科院计算所网数机试题目

计算所网络数据科学与技术重点实验室的第一阶段是机试。机试不限程序语言,要求提交源代码。

乔卿的博客 2957

数字滤波器应用介绍

线性滤波器FIR ,会引起恒定延迟,通过补零的方式补偿非线性滤波器IIR,会引起频率相关的延迟,通过零相位延迟filtfilt补偿从信号中去除不需要的频谱时,通过滤波和补偿实现。如果需要去除的频率与采样率相差甚远,比如4kHz 与100Hz, 可通过 低通滤波->补偿->降采样–> 滤波 补偿 -->上采样还原的方法。*降采样前一定要先低通滤波为了防止混叠。

weixin_39107270的博客 274

非静态内部类和静态内部类的区别?

假设外部类为Outer// 外部类非静态变量// 外部类静态变量// 非静态内部类(成员内部类)// 可直接访问外部类的非静态和静态成员System.out.println("访问外部类非静态变量:" + nonStaticVar);System.out.println("访问外部类静态变量:" + staticVar);// 静态内部类(嵌套类)// 只能访问外部类的静态成员System.out.println("访问外部类静态变量:" + staticVar);

m0_74455373的博客 450

西南科技大学数字电子技术实验七(4行串行累加器设计及FPGA实现)FPGA部分

/在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入0,并在k=0时运算。三、程序清单(每条语句必须包括注释或在开发窗口注释后截图)四、综合、管脚分配、生成输出文件、下载(所有步骤截图)五、仿真程序清单、波形(波形截图必做,截图!.k(k),//开关。

Welcome To My6n Blog 4332

静态内部类和非静态内部类区别汇总

一、非静态内部类: 1、变量和方法不能声明为静态的。(类的编译顺序:外部类--静态方法或属性--内部类,如果内部类声明为静态的,造成编译顺序冲突。个人理解) 2、实例化的时候需要依附在外部类上面。比如:B是A的非静态内部类,实例化B,则:A.B b = new A().new B(); 3、内部类可以引用外部类的静态或者非静态属性或者方法。 二、静态内部类: 1、属性和方法可以声

ChainingBlocks 2337

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

静态内部类和非静态内部类区别和应用

内部类

shenbinbin1990的博客 245

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java中静态内部类和非静态内部类有什么区别?

类似文章: Java中静态内部类和非静态内部类有什么区别? Java静态内部类 public class InnerClassJava { private int a; public class Inner { public void hello() { System.out.println(InnerClassJava.this....

songzi1228的博客 691

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

为什么要使用内部类?非静态内部类和静态内部类的区别是什么?

1. 为什么要使用内部类? 1.1 内部类继承某些类,然后外部类再通过内部类调用相应的功能,间接地使用多个父类的功能,可以弥补单继承的不足。 这边假设一个场景,一个类需要继承网络连接类(自己定义的NetClass类)和线程类(Thread类),网络连接类拥有一个网络连接的方法;同时线程类是为了可以方便地异步执行任务。那么通过内部类的方式,外部类就可以间接地使用这两个类,弥补了单继承的不足,代码和运行结果如下。 1.2私有权限的内部类仅仅可以被当前外部类访问,内部类的具体实现被隐藏。但是内部..

走过路过不要错过 695

Java 大厂面试高频题:Java 非静态内部类和静态内部类有什么区别?

在一个类的内部定义另一个类,这个类就叫内部类。Outer是外部类;Inner是内部类。内部类通常用于表示一个只服务于外部类的辅助结构。把它放在外部类内部,可以让代码关系更加紧密,也可以隐藏不需要暴露给其他类的实现细节。非静态内部类静态内部类没有使用static修饰的成员内部类,叫非静态内部类。这里的Inner就是非静态内部类。必须依赖一个具体的外部类对象才能创建。// 编译错误因为非静态内部类属于某一个具体的外部类对象,而不是只属于外部类本身。

程序员夏洛的博客 618

静态内部类和非静态内部类的区别?

静态内部类与非静态内部类的区别? 代码随便看看就行,重要的是下面总结的表格。 静态内部类 非静态内部类 实例化方式 new className.className() object.new className() 可访问域 只能访问静态资源 静态资源和非静态资源 static 变量/方法 能有静态变量/方法 不能有静态变量/方法 public class TheInnerClass { private int boke; private static int

duihsa156165的博客 236

静态内部类和非静态内部类有什么区别?

静态内部类不需要有指向外部类的引用;非静态内部类需要持有对外部类的引用 静态内部类可以有静态方法、属性;非静态内部类则不能有静态方法、属性 静态内部类只能访问外部类的静态成员,不能访问外部类的非静态成员;非静态内部类能够访问外部类的静态和非静态成员 静态内部类不依赖于外部类的实例,直接实例化内部类对象;非静态内部类通过外部类的对象实例生成内部类对象

m0_74009543的博客 144
上一篇: android异步 比较
下一篇: 单线程模型中Message、Handler、Message Queue、Looper之间的关系
HabbyGe
博客等级 码龄16年 46粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值