1.Date类空参数构造方法,Date()获取的是当前的日期和时间
带参数的构造方法:Date(long date),传递的是毫秒值,把毫秒值转化为日期时间
成员方法:long getTime() 把当前日期转化成毫秒
2.构造方法:SimpleDateFormat(String pattern)
String pattern:传递指定的模式
y:年;M:月;d:日;
H:时;m:分;s:秒
①String format(Date date);
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
Date date = new Date();
String text = sdf.format(date); (Format方法用来根据上面的构造方法来输出具体的格式)
②Date parse(String source);(需要处理异常)
把字符串转化成对应的Date类型的时间
3.日历类:
通过getInstance方法来获取日历类对象
Calendar c = Calendar.getInstance();//多态
Calendar类的成员方法:
静态成员变量的获取作为参数使用:Calendar.YEAR
4.System类
5.String类:
字符串是常量,它们的值在创建后不能被改变,底层是一个被final修饰的数组,不能改变是一个常量
StringBuilder类:
是一个字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串),底层没有被final修饰,可以改变长度,初始长度16
构造方法:
①StringBuilder()
②StringBuilder(String str)
成员方法:
①append()
②toString()
6.包装类(类似int与Integer)
JDK1.5之后出现自动装箱和自动拆箱
7.基本类型和字符串类型之间的相互转化:
注意是包装类的静态方法,使用:Integer.parseInt(“100”)
8.集合的框架
9.Collection集合常用的方法
10.可以使用Iterator接口来遍历集合
①先获取一个迭代器的实现类对象
②使用while或者for循环
11.增强for循环
比如定义一个数组:
int[] arr = {1,2,3,4,5};
for(int i : arr) {
System.out.println(i);
}
定义一个集合:
12.使用泛型的话
①定义含有泛型的类的时候不指定数据类型,而改为创建对象的时候再指定数据类型
②定义含有泛型的方法,在调用方法时候再指定泛型
③泛型通配符<?>
在不确定泛型的时候可以在定义方法时候使用参数类似于(ArrayList<?> list)
13.List有两个重要的接口实现类ArrayList和LinkedList(都是多线程,所以快)还有一个Vector(单线程)
①ArrayList中有add,get,set,remove…方法,可以使用多态创建,底层是数组
List <?> list = new ArrayList<> ();//多态
②LinkedList中有很多自己独有的方法,故不能使用多态创建,底层是链表
14.可变参数的使用:
当知道参数的类型,但是不知道有多少参数的时候,可以使用可变参数,类似于(数据类型…变量名),如(int…arr),其实是一个数组接收传进来的参数。比如求和方法,只写一个方法,定义2-无穷个参数的和的时候就可以使用可变参数。
public static int add(int…arr){
int sum = 0;
for(int i:arr){
sum += i;
}
return sum;
}
15.Collections是一个集合工具类,有addAll(list,…),和shuffle(list),sort(list)静态方法很重要
①addAll(list,…)
②shuffle(list)
③sort(list)
进阶
16.Map集合是双列集合,Collection集合是单列集合
Map集合的特点:
HashMap和LinkedHashMap的特点:
17.Map接口中的常用方法:
①put(key,value),对比Set中放的时候用的是add(),因为Set中只要加一个单元素,而Map加的是一个键值对
②remove(key)
③get(key)
④containsKey(key)
18.Map集合遍历的两种方式:
①通过Map集合的一个keySet()方法,把map的键返回到一个set集合中,然后按照set集合的遍历方法,得到key,并通过get(key)得到value
②使用Entry对象遍历,通过Map集合中的方法entrySet()返回包含键值对关系的Set视图,然后遍历这个视图,得到每个Entry对象,把键和值分别取出来
19.Map集合中为了保证key唯一,必须重写hashCode方法和equals方法
20.Map集合有个子实现类Hashtable,不允许存储null值,null键。但是Hashtable有个子类Properties依然在用。
21.JDK9中List,Set,Map中新增了可以一次性(添加完以后不能再次添加新元素)添加多个元素的静态方法of()
22.异常的处理
Java异常处理的五个关键字:try,catch,finally,throw,throws
①throw
可以用Objects.requireNonNull(obj)简化判断是否为null
②throws
③try…catch
catch中可以使用Throwable类的三个方法来对这个异常信息进行显示(如e.getMessage()),直接写e等同于e.toString();
如果执行try以后出现异常执行catch以后还有代码想执行,可以放在finally中
因为finally语句一定会执行,所以如果finally里面有return语句,一定会执行,所以要避免在finally里面写return语句
异常注意事项: 子父类异常
自定义异常类:
构造方法可以直接调用父类带异常信息的构造方法,让父类来处理
23.创建多线程程序的两种方式:
①创建Thread类的子类,重写run方法,然后建立这个子类对象,调用start方法
获取线程名称的方式:
设置线程的名称
第二种设置名字方式
main方法,start方法调用的run方法里就是输出这个线程的名字
Thread类的常用静态方法sleep()
直接Thread.sleep(1000),需要处理异常
②实现Runnable接口来创建多线程
24.Thread和Runnable的区别(使用Runnable的好处)
25.匿名内部类实现线程的创建
①Thread
②Runnable
简化
26.解决线程安全问题的三种方式:
①使用同步代码块(synchronized(锁对象))
②使用同步方法
还有一种静态的同步方法,和普通的同步方法的区别是锁不同
③Lock锁
27.线程的等待和唤醒
28.线程池
29.Lambda表达式的标准格式