Thinking in Java 学习笔记 四

内部类,简单而言就是一种代码隐藏机制:将类置于其他类的内部。具体的指明这个对象的类型:OuterClassName.InnerClassName。内部类对象在创建时就与外围环境建立联系,可以无条件访问外围对象所有成员 。内部类对外围类成员的访问权是怎么做到的?当外围类创建内部类对象的时候,内部类对象必定会秘密捕获一个指向外围类的对象的引用。内部类是非static的,这个实现细节由编译器来完成。.this对外围对象引用,.new创建内部对象。Interface的方法默认设为public。


对于声明为static的内部类,在引用的时候,创建内部类对象无需先创建外围对象,而内部对象也不能引用外围非static的成员。


对内部类最大的疑问就是为什么需要内部类,这项特性有什么是其他特性解决不了的适应区域么?内部类最吸引人的一点:可以独立地继承一个接口的实现,无论外围类是否已经实现,对内部类都没有影响。(作为对一个多重继承机制的补充,这项特性可以确保对一个接口的纯粹实现,而不必担心因多重继承导致的混乱)


Java最惹人争议的问题就是没有类似指针的机制,这样导致无法使用callback回调。
内部类对象中的闭包以及回调实现并不理解,希望留待以后验证。


对于一种语言,如Java应该如同对待一款软件系统一般来看待它:当你使用winxp的时候,你觉得很好很强大,win7你发现更好,有了更多的特性。但是对java你所使用的东西确一直停留在3、5年前的经典书籍的语法特性,Java SE5发了,6发了,7也要发了,这些个新的特性你会去用么?


程序的复杂性,主要是程序不能预知会产生多少对象及其生命周期。对于对象的持有(因为不能只是通过创建对每一个对象的命名来持有),java提供了一套使用容器(类似STL),名为Collection,包含了基本类型List、Set、Queue、Map(Google Collection可以尝试使用,有更大的惊喜)Set对每个值都只是保存一个对象,Map允许将某些对象与其他对象关联起来的关联数组,Java容器类都可以自动地调节自己的尺寸(这点与ArrayList类似,这个是最基本最可靠的容器了)
对于ArrayList而言,保存的都是Object类(java中多态的伪实现也是如此),所以你可以随便将各个类型的对象add进去,如论编译还是运行都没有问题。所以在取出时(get)你得到的也只是Object的引用,必须将其转为需要的类型(强制转型,不然使用时语法错误)。如果你将取得的A类对象强制转为B类对性,那就要悲剧。为了防止这种现象,可以使用预定义的泛型,ArrayList<A>这样的好处在于在编译期就能防止错误类型放入 。


这就是一个编译时错误与运行时错误,当然我们期望在编译时就解决错误,而绝非是运行时。向上转型也是允许的。
Java容器的作用为保存对象。分为两类:
1) collection,服从一或多条规则的许留:List顺序保存;Set不能有重复;Queue按照队列来处理。
2) Map。一组成对的“键值对”对象,语序你使用键(key)来查找值(value)
尽管并非如此,你大部分编程实践都在与这些接口打交道。这些都有扩展,如ArrayList至于List,HashMap、TreeMap之于Map等等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值