如何分析一个稍微大点的源码呢?

静态分析

除了看代码,就是 uml图,UML虽然在书本类与类之间的关系很复杂,可能要一本书,但是最核心的其实很简单;

(1)继承 extends

(2)实现接口 implements

以上两个没啥说的,很easy.

(3)关联和依赖,这两者我一块说,不区分。简单来说,就是当前类直接使用哪些类。我们看项目中的主类依赖关系,从主类别开始逐层深入不断分析。

代码和和图一结合,很简单吧

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.simpleHTTPServer; import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger; /**
*
* @author romain
*/
public class SimpleHTTPServer { //默认端口
public static final int DEFAULT_PORT = 8000;
//默认目录
public static final File DEFAULT_FILE = new File(".");
//自定义端口
private final int port;
//自定义目录
private final File rootDir;
//最大线程数
private int maxThreads = 10;
//连接超时时间
private int clientTimeoutInMillis = 1000;
//依赖的一个类,多线程的为用户服务
private ServerMultiThreadedWorkers server;
private boolean started = false; public SimpleHTTPServer() {
this(DEFAULT_PORT, DEFAULT_FILE);
} public SimpleHTTPServer(int port, File rootDir) {
this.port = port;
this.rootDir = rootDir;
} public void start() {
if (!started) {
System.out.println("Serving HTTP on 0.0.0.0 port 8000 ...");
//z请求处理类,此处又直接依赖RequestHandlerFactory类,和RequestHandlerStaticSiteFactory
RequestHandlerFactory requestHandlerFactory = new RequestHandlerStaticSiteFactory(rootDir);
server = new ServerMultiThreadedWorkers(port, clientTimeoutInMillis, maxThreads, requestHandlerFactory);
server.start();
started = true;
} else {
throw new RuntimeException("Server already started (HTTP port=" + port + ", rootDir=" + rootDir.getAbsolutePath() + ")"); }
} public void stop() {
if (started) {
server.terminate();
try {
//直接使用了Thread类
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(SimpleHTTPServer.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
System.out.println("Server not started (HTTP port=" + port + ", rootDir=" + rootDir.getAbsolutePath() + ")");
}
} /**
* @param maxThreads the maxThreads to set
*/
public void setMaxThreads(int maxThreads) {
this.maxThreads = maxThreads;
} /**
* @param clientTimeoutInMillis the clientTimeoutInMillis to set
*/
public void setClientTimeoutInMillis(int clientTimeoutInMillis) {
this.clientTimeoutInMillis = clientTimeoutInMillis;
} /**
*
* @param args. First arg is the port number.
*/
public static void main(String[] args) {
int port = DEFAULT_PORT;
if (args.length > 0) {
port = Integer.parseInt(args[0]);
}
SimpleHTTPServer server = new SimpleHTTPServer(port, DEFAULT_FILE);
server.start(); //Use Ctrl + C to stop.
}
}
 

SimpleHttpServer的学习之UML的更多相关文章

  1. 设计模式学习起点 UML类图笔记

    UML类图笔记 大学开设的软件设计课程一般都会学习UML类图,大部分关于设计模式的描述都是使用的UML类图,可以说类图的表示是学习设计模式的起点.UML定义类之间的关系主要有六种:泛化关系.实现关系. ...

  2. 学习建模 - UML

    最轻量级的工具下载地址 http://staruml.io/download 下载解压依赖:libgcrypt11 https://pan.baidu.com/s/1i3wb6M5 学习地址 http ...

  3. SimpleHttpServer的学习之总体架构

    http://www.cnblogs.com/hansongjiang/p/4213491.html 从代码中我们看到SimpleHttpServer这个类直接依赖4个类,但是最重要的类,当属其属性, ...

  4. SimpleHttpServer的学习(1)

    闲来没事,分析一下一个简单的HttpServer github地址: https://github.com/Filirom1/SimpleHTTPServer 实现的功能很简单就是一个FTP服务器 默 ...

  5. UML学习-1 UML 简介

    UML 是什么 Unified Modeling Language(UML)又称统一建模语言或标准建模语言,是始于 1997 年一个 OMG 标准,它是一个支持模型化和软件系统开发的图形化语言,为软件 ...

  6. 学习 lind UML 资源 十月 第二弹

    step one 来分析一下  UML 资源 管理

  7. UML学习备忘

    两大类UML图: 行为图(behavior diagrams)和结构图(structure diagrams)     行为图将引导系统分析员分析且理清"系统该做些什么"?系统分析 ...

  8. UML学习之初步总结

    UML(Unified Modeling Language)即统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了一系列最 ...

  9. 解析UML箭头、线条代表的意义(转)

    在学习UML过程中,你经常会遇到UML类图关系,这里就向大家介绍一下UML箭头.线条代表的意义,相信通过本文的介绍你对UML中箭头.线条的意义有更明确的认识. AD: 本节向大家学习一下UML箭头.线 ...

随机推荐

  1. 【概率】poj 2096:Collecting Bugs

    Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...

  2. [转载]ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL

    引言-- 在初级篇中,我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由.也介绍了它本身的局限性-依赖于路由信息中的键值对: 如果键值对中没有的值,我们无法将 ...

  3. ACM题集以及各种总结大全!

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  4. 《head first java 》读书笔记

    Updated 2014/03/26 P300-P402 Updated 2014/03/25 P213-300 Updated 2014/03/20 P0-P213 对象本身已知的事物被称为: 实例 ...

  5. 找出程序cpu使用率高的原因

    确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |g ...

  6. vc2008程序发布指南

    vc2008程序发布指南 2008-05-03 17:46 vc2008开发的程序的发布方式可以有5种方式: 1. 采用静态链接到crt和MFC. 只要你拥有组成程序的所有源代码,你就可以采用这种方式 ...

  7. 【HTTP】Fiddler(一) - Fiddler简介和使用

    1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: a.Firebug虽然可以抓包 ...

  8. HDU4628+状态压缩DP

    /* 状态压缩DP dp[ i ]:达到i状态的最小step. 题意:每次可以去掉一个回文串,求最少几步能取完. */ #include<stdio.h> #include<stri ...

  9. ???????????? no permissions

    1.一手鞋地址 google http://developer.android.com/tools/device.html 我处理的方法如下: 我的问题: android的版卡 在Ubuntu12.0 ...

  10. P44、面试题4:替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成“%20”.例如输入“We are happy.”,则输出“We%20are%20happy.”. 如果用java string类中提供的replace ...