- 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)一定要写方法
-
*注意:构造方法不存在方法递归的
举例
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给老和尚讲了一个故事是:
条件结束:山塌了,或者和尚挂了