• 关于 java 静态类 和 C# 静态类


    1. java 中一个普通类是不可以定义为 static 的, 只有内部类可以为静态类。
        而 C# 中是可以直接定义一个静态类的。

    2. java 中的静态内部类中可以定义静态成员也可以定义非静态成员,静态成员可以用类名直接访问,
       而非静态成员只有 new 一个静态内部类的实例才可以访问到。

       java 静态内部类中只能访问外部类的静态成员,因为如果可以访问外部类的非静态成员,这时候外部类
       可能还没有实例化,这时就会出错。

       很多人疑惑为什么 java 静态类内部类中可以有非静态成员,还有为什么可以 new 一个静态类。(特别是 c# 程序员)
       java 中应该说没有所谓的静态类, 静态内部类其实就是一个普通的类, 所以既可以有静态成员也可以有非静态成员,当然也可以 new 一个实例。
       但是如果直接引用静态内部类的静态成员而不实例化,这时静态内部类中的非静态成员还没有分配内存而被忽略了,这就没什么意义了。 所以静态
       内部类中最好只定义静态成员。

       个人认为 java 应该强制静态内部类中只能定义静态成员而不能定义非静态成员, 就像 c# 一样增加 static 类的设计。

       c# 中的静态类中只能定义静态成员,且不能 new 一个静态类的实例 。普通类中的静态成员只能用类名进行引用,不能用类的实例进行引用。

       (本人水平太菜,有错误还请大 N 指出。)

    3.  java 中非静态内部类必须用外部类的对象来实例化,且非静态内部类中不能有静态成员,但可以有常量。
       这主要是因为非静态内部类中可能会引用外部类的成员, 所以必须保证外部类先实例化,才能正确的实例化非静态内部类。
       非静态内部类可以看成外部类的一个实例成员。

       非静态内部类对象隐含地保存了一个指向外部类对象的引用,每一个非静态内部类的实例都链接到一个外部类的实例上。
       而静态内部类不会链接到外部类的实例上。

  • 相关阅读:
    1061 Dating (20 分)
    1042 Shuffling Machine (20 分)简单模拟
    1132 Cut Integer (20 分)
    1100 Mars Numbers (20 分)
    1077 Kuchiguse (20 分)求字符串最长相同后缀
    1065 A+B and C (64bit) (20 分)大数 溢出
    1107 Social Clusters (30 分)并查集
    1079 Total Sales of Supply Chain (25 分)
    1078 Hashing (25 分)
    1063 Set Similarity (25 分)
  • 原文地址:https://www.cnblogs.com/lesliefang/p/3029622.html
Copyright © 2020-2023  润新知