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

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

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

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

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

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

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

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

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

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

 

 

转载于:https://www.cnblogs.com/lesliefang/archive/2013/04/18/3029622.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值