`
leayer
  • 浏览: 60460 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

内部类及静态内部类分析

阅读更多
内部类和静态内部类

一.静态和非静态的区别
1.static一般用于修饰成员变量和方法,当然也可以修饰类,不过这个类得是内部类才行.
2.用static修饰的变量或方法,不需要实例化类能够直接用类名访问,属于类的所有对象且只有一份.
3.在静态成员(方法)中不可以引用非静态成员.

二.内部类
1.在一个类中定义的其它类,被称为内部类.
2.内部类可以被修饰为private与其它类隔绝,那这个内部类只有它的外部类才能访问.
3.内部类可以被修饰为static.

三.内部类访问外部类成员
1.内部类可以访问外部类的任意级别成员,包括private.
2.非静态内部类不可以定义静态成员,静态内部类可以定义静态或非静态成员.
3.非静态内部类中可以访问外部类的所有成员,静态类部内只能访问外部类的静态成员.

四.外部类访问内部类成员
1.外部类只能访问内部类的public成员.
2.在外部类的静态方法中或外部类之外的其它类中实例化内部类,必须先实例化外部类才行.


通过new 外部类().new 非静态内部类()的方式实例化非静态内部类;
通过new 外部类.静态内部类()的方式实例化非静态内部类;


以下通过代码演示下内部类的用法
/**
 * 外部类
 */
public class OuterClass {

    private String attr;
    private static String staticAttr;

    /**
     * 非静态方法可以引用非静态成员和静态成员
     */
    void outerTest() {
        attr = null;
        staticAttr = null;

        outerStaticTestMethod();

        InnerClass innerClass = new InnerClass();
        // OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
        innerClass.a = null;
        innerClass.innerTestMethod();

        StaticInnerClass staticInnerClass = new StaticInnerClass();
        // OuterClass.StaticInnerClass staticInnerClass = new OuterClass.StaticInnerClass();
        staticInnerClass.x = null;
        staticInnerClass.staticInnerTestMethod();

        StaticInnerClass.y = null;
        StaticInnerClass.staticInnerStaticTestMethod();
    }

    /**
     * 静态方法只能引用静态成员
     */
    static void outerStaticTestMethod() {
        // attr = null;
        staticAttr = null;
        // outerTest();
        OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
        innerClass.a = null;
        innerClass.innerTestMethod();

        StaticInnerClass staticInnerClass = new StaticInnerClass();
        staticInnerClass.x = null;
        staticInnerClass.staticInnerTestMethod();

        StaticInnerClass.y = null;
        StaticInnerClass.staticInnerStaticTestMethod();
    }

    /**
     * 非静态内部类可以访问外部类的所有属性及方法<br/>
     * 非静态内部类不可以定义静态成员
     */
    class InnerClass {
        private String a;
        private String b;

        InnerClass() {
            System.out.println("InnerClass init");
        }

        public void innerTestMethod() {
            a = attr;
            b = staticAttr;
        }
    }

    /**
     * 静态内部类只能访问外部类的静态属性及方法<br/>
     * 静态内部类可以定义静态成员
     */
    static class StaticInnerClass {
        private String x;
        private static String y;

        public StaticInnerClass() {
            System.out.println("StaticInnerClass init");
        }

        public void staticInnerTestMethod() {
            y = staticAttr;
        }

        public static void staticInnerStaticTestMethod() {
            y = staticAttr;
        }

    }
}
分享到:
评论

相关推荐

    Java内部类应用之静态内部类应用示例

    主要介绍了Java内部类应用之静态内部类应用,结合实例形式分析了Java静态内部类的原理、功能、用法及相关操作注意事项,需要的朋友可以参考下

    华为内部FPGA静态时序分析

    华为静态时序分析,硬件工程师必学之学习规范.pdf

    详细分析内部类的发生内存泄漏的原因

    如果您已了解静态类和内部类,则应该熟悉使用Java代码中的嵌套类的基础知识。在这个相关的技巧中,我将带您了解嵌套类的陷阱之一,这是内部类在JVM中导致内存泄漏和内存不足错误的潜力。 之所以会发生这种类型的内存...

    C#静态static的用法实例分析

    其次,它防止在类的内部声明任何实例字段或方法。 静态类的主要特性: 1:仅包含静态成员。 2:无法实例化。 3:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化。 4:不能包含实例构造函数。 5...

    针对Python的代码静态分析工具PySonar.zip

    PySonar2 是王垠开发的,针对 Python 的代码静态分析工具,现在这项技术被著名的代码搜索引擎 Sourcegraph 使用,这是 PySonar 的第二个版本,第一个版本的使用者是 Google 内部,作为 Python 上百万行高质量语义...

    华为静态时序分析与逻辑设计.rar

    这个资源是华为内部进行培训时用的,对fpga开发中的时序分析很有帮助,对初学者而言更是大有用处

    C#静态方法与非静态方法实例分析

    本文实例分析了C#静态方法与非静态方法,并对其用法进行了较为全面的分析。分享给大家供大家参考。具体分析如下: 通常来说,C#的类中可以包含两种方法:静态方法和非静态方法。 使用了static 修饰符的方法为静态...

    HEV型静态混合器优化设计分析

    为提高混合器的优化设计水平和工程应用的速度,采用计算流体力学商业软件Fluent,对HEV型静态混合器内置翼片顺排、错排两种结构方式下内部的浓度场、速度场、湍流场等参数进行模拟计算,分析比较两种翼片排列方式的...

    静态开关的UPS电源主电路图

    本文是对静态开关的UPS电源主电路图的简单分析。

    一种用于急倾斜煤层顶煤致裂的静态破碎剂效应试验

    文中通过理论分析并结合物理相似模拟试验,运用声发射(AE,Acoustic emission)与裂隙光学摄像(Crack Optical Acquirement,COA)等方法,对模型试件开展弱化致裂实验,揭示石灰水静态碎裂过程中试件内部裂隙的发生及扩展...

    UML实验二用例分析

    分析是为了满足需求模型中所描述的功能,探讨系统内部应该有什么样的业务核心机制的过程。将以用户视角描述的需求模型转化为以开发团队视角描述的分析模型。 (2)分析模型包含两个层次的两类模型。两个层次是指...

    大重型静压支承静态性能及油膜流体仿真

    然后,综合应用三维造型软件Pro/ENGINEER和CFD软件FLUENT,模拟分析圆环形静压支承和回型槽油腔的流速分布及压力分布,揭示了两种油腔结构内部油液流动规律,并计算各自的静态性能,实验验证表明,该设计方案正确性与合理...

    项目中用到的jdbc连接 单例模式

    在该方法中,Singleton有一个private类型静态内部类, * 内部类在外部类加载的时候并不会加载,只有在调用getInstance方法的时候加载SingletonHolder类。 * 分析: * 类载入到jvm的时候,会进行初始化,但是只会...

    FFT处理器寄生参数提取和静态时序分析

    本文在简要介绍寄生参数提取工具Star-RCXT和静态时序分析工具PrimeTime的基础上,对已通过物理验证工具Calibre DRC和LVS的FFT处理器版图用Star-RCXT工具进行了基于CCI的寄生参数提取,得到内部互连网络的详细寄生电容...

    Java内部类原理与用法实例总结

    主要介绍了Java内部类原理与用法,结合实例形式总结分析了非静态内部类、静态内部类、局部类等相关概念、原理、用法及相关操作注意事项,需要的朋友可以参考下

    单例模式的多种实现.docx

    单例模式的七种实现方法以及分析,可以作文大作业提交 ...3.6使用静态内部类实现单例模式 12 3.7使用枚举类实现单例模式 13 4.单例模式怎么用才合理? 14 4.1测试 14 4.2无边界 15 5.设计模式学习总结: 15

    gochk:用于Go文件的静态依赖关系分析工具

    用于Go文件的静态依赖关系分析工具 什么是Gochk? Gochk静态分析.go文件是否违反 ,并打印其结果。 该规则表明,源代码依赖性只能指向内部。 内圈中的任何事物对外圈中的事物一无所知。 Gochk解决了什么问题? 当...

    C++静态代码分析PreFast

     Prefast是微软研究院提出的静态代码分析工具。主要目的是通过分析代码的数据和控制信息来检测程序中的缺陷。需要强调的是,Prefast检测的缺项不仅仅是安全缺陷,但是安全缺陷类型是其检测的为重要的部分。Prefast...

    ANSYS-Workbench12.0培训教程之静力学.pdf

    本课件中,将练习线性静力结构分析,包括几何和单元;组件和接触类型;分析设置;环境,如载荷和约束;求解模型;结果和后处理。

    FPGA静态时序分析 IO口时序

    在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛。因此,FPGA时序约束中IO口时序约束也是一个重点。只有约束正确才能在高速情况下保证FPGA和外部...

Global site tag (gtag.js) - Google Analytics