From Gossip@caterpillar

语言技术:Java Gossip(二)

I'm Tiger...hoo... 在学习Java的过程中,您会接触到很多框架(Framework), 而第一步就是从J2SE的框架开始学习,框架让您不用重新打造您需要的功能元件,它也是经验的集成,即使您要重新打造,参考框架的实作方式,就可以让您获 得不少宝贵的经验。

事实上以下的每个主题区都有专书介绍,这边所介绍的内容,都只是某个主题的入门,若有进阶的应用需求,查阅相关书籍是必要的。






物件容器(Container)
    物件容器可以帮您持有对象,在Java中分作两大类:Collection 与 Map。前者可持有各自独立的物件,后者持有成对的key-value物件。
  • Collection 类
Collection 类包括了 List 类与 Set 类,List 以放置物件至容器中的顺序来排列物件,Set 类不接受重覆的物件,并有自己的一套排序规则。
  • Map 类
在将物件存入 Map类时,需要配合一把key,您要取回物 件时就是根据这把key,Map中的key是唯一的,Map拥有自己的排序机制。

输入输出(I/O)
    为了要将程式运行结果储存下来,以供下一次开启时使用,档案输入输出是一个应用程式所必备的,藉由档案的输入输 出,也可以一同了解Java的I/O处理。
  • 档案处理
File类别是档 案的抽象表示,也是处理档案输入输出时所 必备的。
电脑中的资料都是 以 0 与 1 的方式来储存,如果您要在两个装置之间进行资料的存取,当然也是以 0 与 1 位元的方式来进行,Java将资料目的地与来源之间的流动抽象化为一个串流(Stream),而当中流动的则是位元资料。
Reader、 Writer等是处理字元串流 (Character Stream)的相关类别,简单的说,就是对串流资料以一个字元(16bit)的长度为单位来处理(0~65535、0x0000-0xffff),并进 行适当的字元转换处理。

执行绪(Thread)
    一个执行绪是进程(Process)中的一个执行流程,一个进程中可以同时包括多个执行绪,CPU会分配时间片段来处理这些子流程,这使得一个程式可以像 是同时间处理多个事务。
  • 执行绪入门
想要实作执行绪功 能,只要实作Runnable介面,单就 表面上来看,执行绪并不困难。
您只要实作 Runnable介面,就可以实作执行绪功能, 入门是简单的,但资料一被共用,事情就变得复杂。
来看看 JDK 5.0 为多执行绪新增的几个好用类别。

反射(Reflection)
    反射机制允许执行时期动态检视与操作类别,一般应用程式开发较不常用到,但是在一些框架或检视工具程式中,就经常使用到反射机制。
  • 检视类别
即使您拿到一个类 别并对它一无所知,但其实它本身就包括了 许多资讯,从 Class 开始,您可以获得这个类的许多讯息。
  • 生成与操作
使用反射机制,您 可以于执行时期动态载入类别并生成物件, 操作物件上的方法甚至改变类别成员的值。

metadata
    metadata 简单的说就是资料的资料(Data about data),J2SE 5.0 中对 metadata 的支援是 Annotation,目的在对程式码作出说明以利分析工具使用。
  • Annotation
Annotation 对程式运行没有影响,它的目的在对编译器或分析工具说明程式的某些资讯,您可以在package、class、method、field等上加上 Annotation。
在定义 Annotation 型态的时候,为 Annotation 型态加上 Annotation 并不奇怪,这为处理 Annotation 型态的工具提供资讯。

资料库(JDBC)
    JDBC是用于执行SQL的Java API,它将资料库存取的API与SQL陈述分开,实现资料库无关的API介面,藉由JDBC统一的介面,开发人员只要专注于SQL陈述,而可以不必理会 底层的资料库驱动程式与相关介面。

网路
    这边介绍一下简单的网路程式设计,并使用 Socket 与 ServerSocket 设计一些简单的实例。
  • 入门
首先从认识 java.net 套件下的几个类别认识起。
  • 程式实例
以 Socket 及 ServerSocket 所实作的一些简单网路程式范例。

舍遗补缺
    前面都是有系统的介绍某个主题,然而整个 Java SE 要详细说明是不可能的,这边就随时补充一些可能使用到的类别。
  • 属性设定、讯息绑定
您可以将一些属性 设定独立于一个.properties档 中,由程式读取,若要修改属性则直接修改.properties档案即可。也可以将讯息另外定义在一个文字档案中,而不是写死在程式中,日后想要更改讯息 时,只要更改文字档案内容,而不用重新编译程式。
表面上看来,要取 得系统的时间只要使用 Date 类别就可以了,但查阅 Date 后,发现很多方法都被标示为 Deprecated?
如果您只是要作一 些简单的文件记录,可以考虑内建在JDK 中的Logging API,好处是它从JDK 1.4之后就成为J2SE的一员。
如果您想要排定任 务在某些时间点运行,那么您可以使用标准 API中的Timer与TimerTask。

视窗程式