- String:人的ID编号
- 
String:人的姓名
 HashMap<Integer,String>
 
- Integer:年龄
- 
String:姓名 HashMap<String,Student> 
- String:学号
- Student:学号对应一个学生:有姓名和年龄
 HashMap<Student,String>       键:是一种自定义类型
 Student:学生:年龄和姓名
 String:朝代
- 
如果对象的成员变量值一样,认为同一个人.
 *HashMap底层哈希表
 哈希表:依赖于两个方法  hashCode() ,equals()方法
 (2)LinkedHashMap<K,V>
 LinkedHashMap<K,V>:是Map接口基于哈希表和链接列表实现的
 哈希表保证键的唯一性
链接列表保证元素有序性(存储和取出一致)
 (3)
 TreeMap基于红黑树结构的Map接口的实现
 (4)线程安全的类: 
- StringBuffer :字符串缓冲区    
- Vector       :List集合
- Hashtable    :Map集合的
 (5)Collection
 Collectio   和Collections的区别:
- Collection:顶层次单列集合的根接口,它是一个集合,是一个接口
- Collections:是针对集合操作的工具类,有一些功能:随机置换,集合里面的二分查找,将集合的元素进行反转
- 
*集合的二分查找 
- public static <T> int binarySearch(List<T> list, T key)
- static  T max(Collection coll):获取集合中的最大值
- public static void reverse(List<?> list):将集合中的元素顺序反转
- public static void shuffle(List<?> list):将集合中的元素打乱
- public static void sort(List<T> list)
 (二)Exception
 (1) 当程序出现一些问题的,可以是严重问题,可以是一种异常,将这些通常为Throwable
 Throwable 类是 Java 语言中所有错误或异常的超类
- Throwable
- error
- exception
- 
举例:
 张三去山上旅行
 1)张三骑车去旅行,山路崩塌了,不能前行了----->不可抗力因素
 2)张三骑车去旅行,骑着发现轮胎没气了------->需要检查的问题
 3)骑着,山路有石子,他就非得往石子上骑,导致车胎没气了---->自己原因造成的,no zuo no die
 不抗力因素----->error: 属于严重问题   内存溢出了 (加载页面中大量图片的时候,程序会挂掉---使用第三方的框架去处理:ImageLoader) 
- 异常:
- 编译时期异常:只要出现的不是运行时期异常,统称为编译时期  日期的文本格式---解析   java.util.Date类型:ParseException:解析异常
- 编译时期异常:开发者必须处理!
- 运行时期异常:RuntimeException
- 
编译通过了,但是开发者代码不严谨(NullPointerExceptino等等...)
 (2)异常的处理分为两种:
 1)try...catch...finally (标准格式) :捕获异常
 2)throws ...        抛出异常
 变形格式...
 try...catch...
 try...catch...catch...
 catch....
 try{
 一些代码
 try里面的代码越少越好
 代码包含了可能会出现问题的代码
 }catch(异常类 异常类对象){
 try出现异常了,描述的异常刚好就是catch的异常类,就会执行catch里面代码
 //处理异常
 }
 (3)如何处理多个异常
 两个或两个以上的异常的时候怎么办?
 try{
 可能出现问题的代码
 }catch(异常类 对象名){
 处理异常的代码
 }
 try{
 可能出现问题的代码
 int[] arr = {1,2,3} ;
 Sop(arr[3]);
 int a = 10 ;
 int b =0 ;
 Sop(a/b) ;
 }catch(异常类名1 对象名1){
 //异常处理
 }catch(异常类名2 对象名2(){
 //异常处理
 }
 dk7以后出现另一种方式处理多个异常
 try{
         可能出现问题的代码;
 }catch(异常类名1 | 异常类名2 |... 对象名){ 处理异常
 }
 (4)编译时期异常和运行时期异常的区别?
 编译时期:开发者必须进行显示处理,不处理,编译不能通过,
 运行时期异常:无需进行显示处理,可以像编译时期一样进行处理
 处理异常的第二种方式:使用throws 抛出异常 (跟在方法的后面)
 xxx   返回值  方法名() throws  异常类名{
 }
 标准格式 try{ ... }catch(异常类 对象){ // 异常处理 } 执行try里面的代码
 ,如果出现了问题,它会通过代码的问题创建一个异常对象,然后通过异常对象和catch里面的异常类是否一致
 如果一致的情况,就会出现catch里面的代码,执行Throwable里面的方法
 
- public String getMessage() :消息字符串
- public String toString(): 异常的简短描述 ":
- 
":由冒号和空格组成 
- public void printStackTrace():返回值void 直接调用, 包含了消息字符串,还有": "
- 信息描述,具体出现异常的代码定位以及定位的源码上
 (5)throw:表示也是抛出异常,抛出的一个异常对象 (throw new 异常类名() :匿名对象的方式)
 try...catch...finally
- finally语句体是一定会执行的,除非是Jvm退出了 
 (6)自定义异常类,两种方式
- 1)自定义一个类,这个继承自Exception
- 2)继承RuntimeException 
 异常中的注意事项:
 子类继承父类的时候的注意事项
- 1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类
- 2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch
 (三)File类
 (1)File类:表示文件或者目录的路径的抽象表现形式.  IO流就是对文件进行操作的
- public File(String pathname):表示pathname的抽象路径表现的形式 (开发中使用这种方式)
- public File(String parent,String child)
 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
 public File(File parent, String child):根据一个file对象和一个文件路径来构造File实例
 (2)跟创建相关的功能:
- public boolean createNewFile():创建文件,当文件不存在的时候,创建此抽象路径下的文件
- public boolean mkdir():创建一个文件夹,如果文件夹存在,不创建
- public boolean mkdirs():创建文件夹,如果父目录不存在,会创建此目录
 (3)删除功能
- 
public boolean delete() :删除文件或者文件夹(目录不能是空的)     :逐一删除文件或者目录的 如果创建一个文件/目录,没有写盘符的时候,会创建在哪里呢?
 会创建在当前项目路径下
 (4)绝对路径:c:\xxx\xxx.txt
 相对路径:a.txt
 回想:html页面(以后jsp页面)
 后台地址 :URI 统一资源定位符
 <form action="http://localhost:8080/Web工程名称/后台(XXX.servlet)"  metod="提交方式">
        用户名:<input type="text" name="username"/>
        密码:<input type ="password" name="pwd"/>
            <input type ="hidden" name="hid"/>
        <img src="图片的路径"/>
</form>
 页面的重定向/转发
 response.sendRedirect("/工程名称/xxx.jsp") ;
 File 的重命名功能: 
- public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
 如果路径名一致的情况,那么只是重命名
 如果两次路径名称不一致,那么不只是重命名,并且剪切
 (5)File类的判断功能
- public boolean isDirectory():判断是否是文件夹
- public boolean isFile() :判断是否是文件
- public boolean canRead(): 是否可读
- public boolean canWriter():是否可写
- public boolean exists() :是否存在
- public boolean isHidden():是否是隐藏文件
 (6)File类的获取功能:
- public String getAbsolutePath():获取抽象文件的绝对路径
- public String getPath():获取相对路径的字符串
- public String getName()返回由此抽象路径名表示的文件或目录的名称
- public long length()返回由此抽象路径名表示的文件的长度。 
- public long lastModified():文件最后一次被修改的时间(时间毫秒值)
 (7)File的高级功能
- public String[] list() :获取当前某个路径下的所有的文件夹以及文件名称的字符串数组
- public File[] listFiles() :获取当前某个路径下所有的文件夹以及文件的File数组
 (四)IO流
 (1)IO:在设备和设备之间的一种数据传输!
 IO流的分类:
 按流的方向分:
- 输入流: 读取文件   (e:\a.txt):从硬盘上文件读取出来后输出这个文件的内容
- 输出流: 写文件:将e:\a.txt 内容读出来--->写到f盘下
 按数据的类型划分:
 字节流
- 字节输入流:InputStream       :读取字节
- 字节输出流:OutputStream  :写字节
 字符流
- 字符输入流:Reader            :读字符
- 字符输出流:Writer            :写字符
 (2)FileOutputStream
 关于字节输出流写数据的方法
- public void write(int b):一次写一个字节
- public void write(byte[] b) :一次写一个字节数组
- public void write(byte[] b, int off,int len):一次写一部分字节数组
 问题:如何末尾追加数据呢
- public FileOutputStream(File file, boolean append):指定为true,末尾追加数据
 (3)FileInputStream
 构造方法:   public FileInputStream(String name)读数据方式:
- public abstract int read():一次读取一个字节
- 
public int read(byte[] b):一次读取一个字节数组 (读取实际的字节数)
 (五)递归
 递归:只的是方法调用方法本身的一种现象
 Math类:max()    方法      Math.max(10,Math.max(15,20)); 方法嵌套
 举例
 方法递归:
 public void show(int n){
    if(n<0){
        System.exit(0) ;//jvm退出了
    }
    System.out.println(n) ;
    show(n--) ;
}
 方法递归的三个必要条件: 
- 1)方法递归必须有出条件
- 2)必须满足一些规律
- 3)一定要写方法
- 
*注意:构造方法不存在方法递归的
 举例
 从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
 从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
 从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
 从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
 条件结束:山塌了,或者和尚挂了