课程纪念
1. API: 应用程序编程接口, jdk提供一些类,方便编程人员去使用。 而不用关注底层是怎么实现的。
2. package: 包
功能区分
java.lang.XXX -- 常用的类,不需要导入
java.util. --- 工具类
java.io. --- 文件、io相关
java.net. -- 网络相关
java.math. -- 数学相关
java.sql.. -- db
java.text.. -- 文本,日期..
3. 文档注释: 类前, 方法前, 变量前
文档注释:
/**
文档注释的内容
*/
4. String
a. final修饰的类,不能被继承,所有String类没有子类。
b. 字符串不可变:
c. 字符串常量池: 设置字符串常量池是基于开发中字符串大量的重用,而更改相对较少。
因此,设计了一个类似于数组的字符串常量池。
常量池的使用规则:
只针对字面量
如果常量池中有对应的字符串,则直接将引用指向该字符串。
如果没有需要先创建,存入常量池,然后将引用指向该字符串。
常量使用弊端: 对于频繁修改字符串,非常消耗内存
-- 频繁修改字符串,gc一直要做垃圾回收
jdk提供了一个类StringBuilder,专门用于处理频繁修改字符串的操作。
d. 字符串相关方法介绍
indexOf lastIndexOf substring tirm charAt startsWith endsWith
toUpperCase toLowerCase valueOf equals length toString...
5. StringBuilder
- StringBuffer 线程安全,效率低
封装可变的字符串。 StringBuilder用于频繁操作字符串
append - 追加字符串
insert - 插入字符串
replace - 修改字符串
delete - 删除字符串
reverse - 反转
需要操作的字符串--》StringBuilder, 操作---》还给字符串
6. 正则表达式 : 制定规则
正则表达式是一串特定的字符,组成的有规律的字符串。
正则表达式只关注格式是否正确,内容正确与否无法决定。
a. 关注有哪些内容
abc -- 表示内容为abc
[abc] -- 表示a或b或c都可以
[^abc] -- 表示不能出现a 或 b 或 c
[a-z] -- 表示a到z所有字符均可以
ab|cd -- 表示可以是ab 或者cd
(abc) -- 表示一组
. -- 表示所有字符,不包含\n,\r之类
\ -- 表示转义字符 \.
\d -- 数字 等价于[0-9]
\D -- 表示非数字 [^0-9]
\w -- 数字,字母, 下划线 [0-9a-zA-Z_]
\W -- [^0-9a-zA-Z_]
b. 关注能出现次数
{n} -- 固定次数n次 -- [a-z]{3} "12a" "12abd"
{n,m} -- 最少n次, 最多m次 [a-z]{1,3} "12a" "12abd"
{n,} -- 最少n次,最多不限
* 等价于 {0,} -- 任意次数
+ 等价于{1,} -- 最少出现一次
? 等价于{0,1} -- 最多一次
c. ^ 匹配行首
$ 匹配行尾 ^[a-z]{3}$ -》 "12abc" 匹配不成功
\d{15}(\d{2}[0-9xX])? -- 15/18位身份证号码
"510723 19900101 1288" -- 对
510723 19900101 1288 20" -- 对
^\d{15}(\d{2}[0-9xX])?$
"510723 19900101 1288" -- 对
"510723 19900101 1288 20" -- 错
d. 正则表达式相关的方法: Regex-正则
boolean matches(regex) - 匹配是否符合正则表达式规则
String[] split(String regex) -- 根据正则表达式分割字符串为数组
String replaceAll(String regex, String newStr)-- 根据正则表达式替换内容
---------------------
xiaoming@qq.com -- @有且只有一个
@abc.com -- @符号前面必须有内容
aaa@ -- @符号后面必须有内容
aaa@qq -- 必须有一个(.xx)
aa@qq.com.cn -- 有多个(.xx)
aa@qq.com.cn -- 正则表达式匹配邮箱 \w{3,5}@[a-zA-Z0-9]{2,3}(\.[a-zA-Z]{2,3})+
7. Object :
a. toString方法的重写: 返回一个你指定规则的字符串,以方便查看该类的内容
b. equals方法: Object提供的equals方法只是判断其对象的引用是否相等。
为了实现判断内容是否相等,所以要求每个类重写equals方法。
c. equals方法重写技巧:
1) 是否是自己
2) 比较对象是否为null
3) 比较对象和当前对象是否是同一种类型。如果是则自定义比较规则
如何判断两个字符串是否相等?
== 表示地址:对象的引用是否相等
equals -- 希望实现内容相等则表示相等,String类重写了equals方法。
Point p1 = new Point(3,4);
Point p2 = new Point(3,4);
重写Point类的equals方法,实现p1.equals(p2) 结果为true
8. 基本数据类型都有一个对应的包装类:
int - Integer
char - Character
long - Long
double - Double
boolean - Boolean
byte - Byte
short - Short
float - Float
自动拆箱, 自动装箱
Integer i = 100; //自动装箱
int a = i; //自动拆箱
Integer i1 = Integer.valueOf(100); // 装箱
int a1 = i1.intValue();// 拆箱
9. Date :
Date d = new Date() //系统日期
getTime() - 获取时间毫秒数
setTime(long millis) - 设置时间毫秒数
10. 时间格式化: SimpleDateFormat
Thu Jul 19 14:40:09 GMT+08:00 2018 --> 2018-7-19 14:40:09
时间格式指定规则:
y - 年 yyyy表示四位的年
M - 月 MM表示两位的月
d - 天 dd表示两位的天
H - 24小时 HH表示两位的小时
h - 12小时
m - 分钟 mm表示两位的分钟
s - 秒
a - am/pm
E - 星期
"yyyy-MM-dd HH:mm:ss E"
SimpleDateFormat:
a. 将String转为Date类型 -- parse
b. 将Date类型转为String类型 -- format
11. Calendar: 日历 -- 操作时间分量: 年,月,日,时,分,秒,周几...
月: 0~11 对应1-12月
周几: 1- 星期天 , 2 - 星期1 , 3- 星期2 ,4- 周三 , 5- 周四, 6 - 周五, 7- 周六
java.util.Calendar -- 抽象类
Calendar cal = Calendar.getInstance() // 工厂模式
12. 集合:
a. 在实际开发中,需要将使用的对象存储于一个特定的结构当中。
jdk提供了一个这种数据结构的接口:Collection, 称为集合
集合: 容器--用于装各种类型的对象
Collection是一个接口,它有两个子接口:List , Set
List: 可重复集
Set : 不可重复集
元素是否重复,根据equals的比较结果来定。
b. 集合相关的方法
boolean add(Object o) - 添加元素到集合中
boolean contains(Object o) - 判断集合中是否有某个元素
int size() -- 集合中元素的个数
boolean isEmpty() -- 是否为空。
void clear() -- 清空结合
boolean remove(Object o) -- 删除指定的元素
boolean addAll(Collection c) -- 添加一个集合
boolean removeAll(Collection c) -- 删除一个集合
Iterator iterator() -- 获取到一个迭代器的实例
c. Iterator : 迭代器类,专门用于遍历集合
问 取 删(删除不是遍历必须的)
hasNext next remove
Collection c = new ArrayList();
c.add("A"), c.add("B")...
Iterator it = c.iterator();// 得到迭代器了
while(it.hasNext() ){
Object o = it.next();
}
** 迭代器试用期间,不能修改原本的集合。
d. jdk5.0之后,提供了一个增强型for循环,for...each
语法规则:
for(Obejct o: 集合或数组){
直接操作o, o就是集合或数组中每一个元素
}
** 不能替代传统的for循环,仅仅就是用于集合或数组的遍历
** 新的for循环在使用时候,编译的时候,还是会转为Iterator,
所以新循环遍历集合的时候 ,不能对集合做修改。
e. 泛型: 参数化类型:在类, 方法,接口的使用中所操作的数据类型由传入的参数而定。
- 定义类的时候,可以使用泛型这种方式限定类,
在具体使用时候在根据实际情况,指定当前需要的类型。
- jdk5.0之后提供的,为了方便使用集合。所有泛型主要用于集合之中。
所有的集合都支持泛型 , 同时Iterator也支持泛型。
12.集合的排序
Collections.sort(集合) :集合工具类提供的排序方法
-- 实现的是自然数排序
-- 要求被排序的元素是实现了Comparable接口的,jdk提供的类基本都实现了Comparable
如果是自定义类,需要排序,则需要实现Comparable接口
-- 当某个类实现了Comparable接口,定义的比较规则,不符合程序的要求,则可以通过
自定义一个比较器类[实现Compartor接口],实现自定义排序规则
13. List:
ArrayList : 方便查找
LinkedList: 方便增加,删除
List中有哪些方法?
集合转为数组,数组转为集合
作业:
定义一个Emp类,包含员工名字,年龄,性别,(double)工资
1>. 给每一个属性定义get/set方法
2>. 重写toString方法
3>. 让员工类可以排序,排序规则是工资由高到低
4>. 重写equls方法,各个属性值相等,则表示相等
5>. 写一个main方法,完成对上述四个步骤的测试。
a.HashSet -- 测试重复的元素
b.ArrayList
14. 队列:-- 数据结构
Queue
FIFO : 先进先出, 比如: 排队够餐, 排队买票,火车进隧道
LiknedList : 实现了List ,Queue 接口
15. 栈: -- 数据结构, 一般用于需要记录操作步骤的场景
Deque : 双端队列实现栈
FILo : 先进后出, 比如: 子弹匣
window文件访问方式 - 操作可追溯
浏览器