1  时间日期
  时间类的本质: Date = long + 操作
              Calendar = long + 操作
  时间的标准: (1970)GMT long   (0)UTC long
 
  1) java 中基本的时间表示 GMT long
  2) Java提供了Date类型表示时间和日期
    Date 是long类型的包装
  3) Calendar 是历法的的抽象.
    历法: 公历, 农历, 太阳历, ...
    GregorianCalendar 是历法的实现, 采用公历
    (太阳历) 算法实现的.
    Calender cal = Calender.getInstance();
  4) Date 和 Calendar 的默认值就是当前时间
 
  5) 时间的类型转换
       new Date(long)
         date.setTime(long)  cal.setTime(Date);
         ---------->      --------->
   long <---------- Date <---------  Calendar
        date.getTime()     cal.getTime()    
     
  6) 时间的计算
    Calendar 提供丰富的时间计算方法  add() set() 等
    如: 计算商品的促销日期special Date:
    输入: 商品生产日期, 和保质期月份
    返回: 商品的促销日期, 是过期前两周周的周五
   
  7) 日期的输入与输出,
   日期输出: 的本质是 Date 转换为格式化的String
   日期输入: 的本质是 将格式化的String转换为Date
    java.text.SimpleDateFormat fmt =
      new SimpleDateFormat("yyyy-MM-dd");
              
    构建SimpleDateFormat 一般提供日期的格式
     "yyyy-MM-dd" 具体参看 javadoc
    如: "yyyy-MM-dd HH:mm:ss"
       "yyyyMMdd"
       "dd/MM/yyyy"
       "MM/dd/yyyy"
   
    fmt.parse(String)可以实现将(合法)字符串解
     析为日期类型, 经常用于处理日期输入.
    
    fmt.format(Date) 可以把日期格式化为字符串
     用于输出处理.
  
2 异常(Exception)
 1) 行为(方法, 过程)的意外结果
 2) 一个方法如果抛出了异常,这个方法就必须声明异常的抛出.
   异常的声明:在方法上声明方法的意外结果,如:
     User reg( String pwd, String email)
       throws UserExistException;
     User login(String email, String pwd)
       throws NameOrPwdException;
    
 3) 异常类一般继承于Exception
 4) 调用抛出异常的方法,必须处理异常
   4.1 使用try catch finally 捕获
   4.2 直接再抛出异常
   处理方式,依赖于具体业务逻辑,很灵活。
 5) 如果代码有异常发生,异常以后的代码将不再执行。
  
 6) try catch finally
  try 是尝试运程代码块,如果有异常会被随后的catch捕获
  异常发生以后代码不执行
  catch代码块是异常处理代码。需要提供合理的处理,异常的处理
  是与具体业务逻辑有关。可以写多个catch处理一系列异常,但是
  要注意:异常的大小关系,大类型的放到后面处理。
  有的时候 catch(Exception) 粗粒度处理异常,代码简洁
  语义含糊. 根据业务逻辑适当选用。
  finally 代码块,不管是否出现异常,总会执行的代码块。
  经常用来处理现场的清理,比如:可靠的数据库连接关闭。
 
 7 异常有一个基本原则:能够底层处理的尽量处理,但是
   如果不能处理,必须抛出到调用者(方法)。不应该简单的
   抛弃。
 8 异常捕获再抛出, 是一种把底层异常进行封装,转换为另外
   一种异常类型。
 9 *建议在捕获到异常时候使用e.printStackTrace(),打印到
 控制台,输出内容是:出现异常时候的方法调用堆栈.
 一般情况下,凡是捕获异常代码都输出:e.printStackTrace()
 10 异常的分类
  Throwable
    |--Error 是系统不可恢复的错误,由JVM发生
    |   |--OutOfMemoryError 堆内存溢出
    |   |--StackOverflowError 栈内存溢出
    |--Exception 程序可以检查处理的异常,常见的异常继承根
        |--java.text.ParseException format解析对象时候发生
        |  如:Date d = dateformat.parse("2010-5-5");
        |--RuntimeException 非检查异常,Javac忽略对
             |      这类异常的语法检查,如:异常抛出,异常处理等。
             |--IllegalArgumentException 
             |--NullPointerException  *
             |--ArrayIndexOutOfBoundsException *
             |--ClassCastException *
             |--NumberFormatException * Integer.parseInt(S)
 11 软件中会大量使用自定义异常,一般从Exception继承。
  异常类命名要有实际意义, 一般都手工继承父类的构造器。

3 Java java.io.File 文件系统管理  (pwd ls mkdir rm )
 1) File类的用途: 用于表示文件(目录);只用于表示文件(目录)
  的信息(名称,大小等)不能对文件的内容进行访问
  File 代表文件系统中对文件/目录的管理操作(增删改查, CRUD)
 2) java.io.File基本API
        显示当前文件夹的路径
  任务: A 检查当前文件夹中是否包含目录 demo
       B 如果没有demo, 就创建文件夹demo
       C 在demo 中 创建文件 test.txt
       D 显示demo 文件夹的内容.
       E 显示test.txt 的绝对路径名
       F 显示test.txt 的文件长度和创建时间
             
 File(String)
 long length()
 long lastModified()
 String getName()
 String getPath()
 boolean exists()
 boolean dir.isFile()
 boolean dir.isDirectory()
 boolean mkdir()
 boolean mkdirs()
 boolean delete();
 boolean createNewFile() throw IOException
 File[] listFile()

 3) 回调模式和FileFilter  (ls|grep patten)
 File[] listFile(FileFilter)
   A 任务: 列出 src/corejava/day07 中的.java文件

4 RandomAccessFile 操作文件内容, 访问文件任意位置

 1)Java 文件模型, 文件是byte by byte 是数据集合
 data   :  41 42 00 00 00 ff d6 d0  ...
 index  :   0  1  2  3  4  5  6  7  8
 pointer:                           ^
 
 2) 打开文件, 有两种模式 "rw", "r"
  RandomAccessFile raf = new RandomAccessFile(file, "rw");
  打开文件时候默认文件指针在开头 pointer=0
  写入方法: raf.write(int) 将整数的"低八位"写入到文件中, 指针
  自动移动到下一个位置, 准备再次写入
 
  * 文件名的扩展名要明确指定, 没有默认扩展名现象!
 
  任务: A 在demo文件夹中创建raf.dat
       B 打开这个文件
       C 写入 'A' 和 'B'
       D 写入整数 255 占用4个byte
       E 写入GBK 编码的 '中', d6d0