龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java 库的建立方法及其实例(2)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
Java 库的建立方法及其实例(2) 设计原则一:封装 一个好的库必须是一个紧凑的关系紧密的整体,而不是一个分散的关系松散的对象的集合。 package是Java提供的一种类库的封装机制。

  Java 库的建立方法及其实例(2)
  
   设计原则一:封装
  
   一个好的库必须是一个紧凑的关系紧密的整体,而不是一个分散的关系松散的对象的集合。
  
   package是Java提供的一种类库的封装机制。一个package是一个Java类文件的集合,存放在同一个目 录中。package有专有的名字空间。
  
   专有的名字空间的一个好处是,你不用担心名称的冲突。因为,假如你的类的名称和别人的类的名 称冲突,但是他们不在同一个package中,利用这一点可以避免名字的冲突。
  
   每一个package都有一个字符串来代表,比如java.lang, 或者javax.swing.plaf.basic.实际上每一个类的 全名都是由package的名字加上类的名字来代表的,这样就避免了名字的冲突,比 如,java.lang.Object或者javax.swing.plaf.basic.BasicMenuBarUI.
  
   注重,有一个非凡的package叫做default package。假如你不声明你的类属于任何一个package,那么 它就被假定属于default package.
  
   每一个package的名字都对应一个目录。比如,java.lang.Object 存放在java/lang/Object.java中,每一 个.对应一个/. default package存放的目录是当前目录。
  
   声明一个package.
  
   // Server.java
  
  
  
   package mylib;
  
  
  
   public class Server implements Runnable
  
   {
  
   // ...
  
   假如有import语句,必须放在package语句的后面。
  
  
  
   当然你也可以引入别的package. 例如:
  
   import mylib.Server;
  
  
  
   // ...
  
  
  
   Server server = new Server( portNum );
  
   Java答应你决定package中的哪些类对外部是可见的。public类可以被包外的代码使用,而private类 则不行。
  
   比如,让Server类能被外部的代码使用:
  
   // Server.java
  
  
  
   package mylib;
  
  
  
   import java.io.*;
  
   import java.net.*;
  
  
  
   public class Server implements Runnable
  
   {
  
   假如你不想让类被外部的代码使用,可以用缺省的属性,去掉public. 例如:
  
  
  
   // Reporter.java
  
  
  
   package mylib;
  
  
  
   class Reporter implements Runnable
  
   {
  
  
  
   设计原则二:继续
  
   在我们的例子中,Server是主要的类。假如你看这个类的代码,就能看到,它本身其实什么也不 做。主循环用来监听连接。当连接建立以后,它把处理连接的任务交给一个叫做handleConnection() 的函数。
  
   // subclass must supply an implementation
  
   abstract public void handleConnection( Socket s );
  
   因为没有实现这一函数,所以这个类被声明为abstract,使用者必须实现这个函数。
  
  
  
   // This is called by the Server class when a connection
  
   // comes in. "in" and "out" come from the incoming socket
  
   // connection
  
   public void handleConnection( Socket socket ) {
  
   try {
  
   InputStream in = socket.getInputStream();
  
   OutputStream out = socket.getOutputStream();
  
  
  
   // just copy the input to the output
  
   while (true)
  
   out.write( in.read() );
  
  
精彩图集

赞助商链接