06-9-27:
回调接口:在Java中,接口可以用来实现回调。就是当一个对象传递一个引用到一个或者多个他的方法到另外一个对象。回调发生在当这个被调的对象后来调用其中一个方法。在c或者c++中,这个主要是函数指针,而java就用接口代替了。更加抽象的说,就是这个概念扩展了java中的事件.(在网上找了半天的资料,才晓得原来这个模型就是事件驱动的模型,当在事件源中add一个listener的时候,就类似textSource的构造函数,表示注册一个方法,因为我们实现了规定的接口,每当事件发生的时候,系统总会自动的调用我们实现的方法。)
接口变量:接口也可以包含常量,即static final变量,
包和编译单元:
形象上讲:包就把完成相似功能的类和接口文件放在一起管理。并且是以文件夹的形式区分。即一个包就是一个文件夹。
编译单元:Java的源代码是被组织到编译单元中。一个简单的编译单元包含了一个类的定义和命名。大多数情况下,编译单元是一个.java的文件,但是理论上,在集成开发环境中,它是任意的一个实体。(每个类有他们自己的文件,且不能在一个文件中,声明多于一个的类。类名必须等于文件名,不然编译不会通过)
package语句必须位于每个编译单元的第一句中,且仅仅只有一句,应用到整个文件中。(声明了一个包,那么包就会以文件夹的形式,被新建,且支持.的方式,层次化包)
包名:包名是以dot的形式层次化分开的。包名组件为编译器和运行时系统构建了一个唯一的路径来定位文件。这里没有子包的概念,包之间是平行的。
06-9-28:
类的可见性:默认情况下,一个类仅仅能够被同一个包中的其他类访问。为了能够在其他地方看见类,必须把该类声明为public
导入类:类可以在一个包中使用简单的名字。然而,为了定位在其他包中得类,我们不得不更加得具体,输入fully qualified name,但是import用来,减少我们的输入。在pachage语句后面写入若干import。我们可以引用所有的public类。由于每个包是独立的,两个包种的类名重叠可能发生。编译器会阻止你创建导入两个相同名称的类。这种情况下,只能使用fully qualified name。import许多类不会造成性能的损失。Java不会携带额外的东西到编译好了的类文件中。换句话中,Java类文件不包含导入的信息。他们仅仅在引用的时候使用他们。
未命名的包:没有定义包的编译单元,会在一个大的,无组织的,未命名的包中.在没有命名的包中,我们可以随意的使用简单的名称来引用他们。他们编译和运行时时候的路径为当前路径,所以,无包的类用来体验和测试。
静态导入:这个是Java5.0的新特性。import static可以不用指定类名,而直接使用静态成员。但是最好使用全部的静态成员名,增强代码的可读性。
方法和变量的可见性:
基本访问修饰符:默认情况下,变量和方法可以被类的成员和包中的其他类访问。借鉴了C++,同样包中的类之间是friendly的。这是可见性的默认层次。
内部类:
以前我们看到的类都是顶层次的,在文件和包中声明的。但是Java中的类可以在任何层次范围,在任何花括号内。这些内部类属于另外一个类或者方法,可见性都是同样的。这些匿名的内部类都是更加的强大,使得好像能够动态的创建新的对象。在Java中,匿名内部类代替了其他语言的closures。
至此,重拾Java系列,就暂告一个段落了,因为基本的概念,我无须每个都搞那么清楚,到时候要用到了,我再来看看书,不过我越来越感觉到微软的编程语言很不丰富,要想把Java的方方面面搞清楚,还是必须要花上一定的时间,Java的内容很多,围绕Java展开的技术也很多;相反,微软可以选择的语言很多,但是每种语言的展开就很少了。
接下来我会深入Java技术,学习web服务、EJB和UML建模,继续我的Java道路。