浅谈.net中的静态类和java中的内部静态类

昨日看《Effective Java》第二条:遇到多个构造器参数时要考虑用构造器。其中,演示通过Builder模式,构建复杂的对象。因为之前对java不是很了解的原因。很疑惑:static class居然可以构建实例?之前,在.net中的静态类一直都是不能实例化的。

查了下资料,果然在java中只有内部静态类才能被实例化,通常称之为嵌套类。而顶级类,也就是没有被嵌套在另一个类的内部的类,不能被标记为static。这个和.net中有所不同,其实,我个人觉得两种语言都有各自的关注点。

从功能上来说,java的外部类不能被标记为static,在开发中并没有丝毫的不便。一般来讲无论是成员还是变量,被标记为static则为类所有,与类的实例无关。所以我觉得很少有需求,需要构建一个静态类。在.net中静态类,意味着其包含的所有成员都是静态的。所以出于这样的限制,.net中静态类通常用来作为工具类。但是,在java中,一个非静态类,里面包含的方法都为static,不能实现同样的功能吗?我觉得,在java中,并没有什么缺失所在。

但是,是不是.net这么做就白费功夫了吗?其实,.net也有它的考虑,但是不是功能上的。.net中一个类被标识为static,意味着这个类中所有的成员都必须为static的,这个在编译时会做静态检查,通过编译时的强制性,来约束程序员遵守规则。并且如果一个类被标识为static,那么在程序集被加载的时候该静态类就会被加载,直到程序集被卸载。并且据说CLR对其作了优化,我想可能JVM也是吧,暂时不太了解。

不过,java中的内部静态类可以构建实例,在我看来,理解起来挺别扭的。不过,如果把java中的内部类都当做其成员来理解,就容易多了。可以把内部静态类看成是外部类的一个static 类型,不属于外部类的实例。具体,关于内部静态类和外部类的关系等讲解,网上也不少,在此就只是比较一下两种语言的不同点而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值