博客
关于我
内部类
阅读量:526 次
发布时间:2019-03-08

本文共 3021 字,大约阅读时间需要 10 分钟。

实例内部类与静态内部类

实例内部类

获取实例内部类对象

要获取实例内部类的对象,通常需要以下步骤:

外部类类名.内部类类名 变量 = 外部类对象的引用.new 内部类()

例如:

OuterClass.InnerClass innerClass = outerClass.new InnerClass();
外部类类名.内部类类名 变量 = 外部类对象的引用.new 内部类()

实例内部类的性质

  • 不能定义非静态属性或方法

    实例内部类的非静态数据成员必须在编译期间就能确定。只能定义 static final 的属性或 static 方法。

  • 内存开销

    实例内部类包含外部类的 this 引用,因此至少占用两个 this,存在内存开销。

  • 代码示例

    public class OuterClass {
    public int data1 = 1;
    private int data2 = 2;
    int data3 = 3;
    public static int size = 10;
    public OuterClass() {
    System.out.println("OuterClass()");
    }
    class InnerClass {
    public int data4 = 4;
    public static final int size = 10;
    public int data1 = 11;
    public InnerClass() {
    System.out.println("InnerClass()");
    }
    public void test() {
    System.out.println("data1=" + data1); // 11
    System.out.println("OuterClass的data1=" + OuterClass.this.data1); // 1
    System.out.println("InnerClass的test()方法");
    }
    }
    }
    public class TestDemo {
    public static void main(String[] args) {
    OuterClass outerClass = new OuterClass();
    OuterClass.InnerClass innerClass = outerClass.new InnerClass();
    System.out.println(innerClass.data4); // 4
    innerClass.test();
    }
    }

    静态内部类

    获取静态内部类对象

    静态内部类的对象获取方式类似于实例内部类:

    静态内部类对象 = new 静态内部类();

    例如:

    OuterClass2.InnerClass2 innerClass2 = new OuterClass2.InnerClass2();

    静态内部类的性质

  • 不能访问外部类的非静态成员

    如果需要访问外部类的非静态成员,需要传入外部类对象引用。

  • 没有外部类的 this 引用

    静态内部类不具备外部类的 this 引用。

  • 代码示例

    public class OuterClass2 {
    public int data1 = 1;
    private int data2 = 2;
    int data3 = 3;
    public static int data5 = 10;
    public OuterClass2() {
    System.out.println("OuterClass2()");
    }
    static class InnerClass2 {
    public int data1 = 4;
    public static final int data5 = 5;
    OuterClass2 outerClass;
    InnerClass2() {
    System.out.println("static的InnerClass2()");
    }
    InnerClass2(OuterClass2 outerClass2) {
    this.outerClass = outerClass2;
    System.out.println("static的InnerClass2()");
    }
    public void test() {
    System.out.println("data1=" + this.outerClass.data1); // 1
    System.out.println("data1=" + data1); // 4
    System.out.println("data5=" + data5); // 5
    System.out.println("data5=" + OuterClass2.data5); // 10
    System.out.println("InnerClass2的test()方法");
    System.out.println("InnerClass2的test()方法");
    }
    }
    }
    public class TestDemo1 {
    public static void main(String[] args) {
    OuterClass2.InnerClass2 innerClass2 = new OuterClass2.InnerClass2();
    System.out.println(innerClass2.data1); // 4
    OuterClass2 outerClass2 = new OuterClass2();
    OuterClass2.InnerClass2 innerClass21 = new OuterClass2.InnerClass2(outerClass2);
    innerClass21.test();
    }
    }

    总结

    实例内部类和静态内部类都是外部类的常见内部类类型。实例内部类包含外部类的 this 引用,而静态内部类不含。理解这两种内部类的性质对于优化内存占用和正确使用内部类有重要意义。

    转载地址:http://xbrnz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现strassen matrix multiplication施特拉森矩阵乘法算法(附完整源码)
    查看>>
    Objective-C实现StringSearch字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现strncmp函数功能(附完整源码)
    查看>>
    Objective-C实现strncpy函数功能(附完整源码)
    查看>>
    Objective-C实现strongly Connected Components 强连通分量算法(附完整源码)
    查看>>
    Objective-C实现strongly connected components强连通分量算法(附完整源码)
    查看>>
    Objective-C实现strschr函数功能(附完整源码)
    查看>>
    Objective-C实现strsep函数功能(附完整源码)
    查看>>
    Objective-C实现subset generation子集生成算法(附完整源码)
    查看>>
    Objective-C实现substring函数功能(附完整源码)
    查看>>
    Objective-C实现SudokuSolver数独解决方案算法(附完整源码)
    查看>>
    Objective-C实现Sudoku数独游戏算法(附完整源码)
    查看>>
    Objective-C实现sum of arithmetic series算术级数之和算法(附完整源码)
    查看>>
    Objective-C实现sum of geometric progression几何级数之和算法(附完整源码)
    查看>>
    Objective-C实现sum of subset子集总和算法(附完整源码)
    查看>>
    Objective-C实现SumOfSubset子集总和为一个定值的算法(附完整源码)
    查看>>
    Objective-C实现support vector machines支持向量机算法(附完整源码)
    查看>>
    Objective-C实现SVM支持向量机算法(附完整源码)
    查看>>
    Objective-C实现SVM支持向量机(附完整源码)
    查看>>
    Objective-C实现sylvester西尔维斯特方程算法(附完整源码)
    查看>>