上午9点~中午12点
学习Java,Java疯狂讲义319~354
1,ArrayList和Vector实现类,两者显著区别:ArrayList是线程不安全的,当多个线程访问一个ArraysList集合时,如果有一个线程修改了ArraysList集合,则程序必须手动保证集合的同步性,但Vector集合则是线程安全的,所以Vector的性能要比ArraysList的性能要低。
2,Queue集合
void add(Object e) 将指定元素加入此队列的队尾
Object element() 获取队列头部的元素,但是不删除该元素
Object peek() 获取队列头部的元素,但是不删除该元素。如果队列为空则返回null
Object poll() 获取队列头部的元素,并删除该元素。如果队列为空则返回null
Object remove() 获取队列头部的元素,并删除该元素
3,PriortyQueue实现类,保存队列的顺序并不是按照加入队列的顺序,而是按对列元素的大小进行重新排序,PriortyQueue不允许插入null元素。
4,Deque接口与ArrayDeque实现类,Deque接口是Queue接口的子接口,代表一个双端队列。可作栈可作队列
5,LinkedList实现类,双端队列,
6,:
7,Map、HashMap、Hashtable、LinkedHashMap、SortedMap、TreeMap、WeakHashMap
8,同步控制,解决多线程并发访问集合时的线程安全问题
import java.util.*;
import java.util.stream.Collector;
public class SynchronizedTest {
public static void main(String[] args) {
Collection c = Collections.synchronizedCollection(new ArrayList<>());
List l = Collections.synchronizedList(new ArrayList());
Set s = Collections.synchronizedSet(new HashSet<>());
Map m = Collections.synchronizedMap(new HashMap<>());
}
}
下午2点40~5点30
学习Java,Java 疯狂讲义355~380
1,泛型:就是允许在定义类、接口、方法时使用类型形参,这个类型形参将在声明变量、创建对象、调用方法时动态的指定。
2,在静态方法静态初始化块或者静态变量的声明和初始化中不允许使用泛型形参,instanceof运算符后不能使用泛型类。
3,List<?>表明这个List集合可以是任何泛型的父类、List<? extends Shape>,它表示泛型形参必须是Shape子类的List,协变:只进不出。
List<? super Foo>,表示泛型形参必须是Foo父类的List,逆变:只出不进。
4,泛型方法
5,擦除
6,泛型与数组
7,try…catch捕捉异常,所有的异常处理逻辑放在catch块中处理
8,异常类的继承体系:
自定义异常类:
public class ActionException extends Exception {
public ActionException(){}
public ActionException(String str){
super(str);
}
}
public class ActionExceptionTest {
private Double initPrice = 30.0;
public void bid(String bidPrice)throws ActionException{
Double d = 0.0;
try{
d = Double.parseDouble(bidPrice);
}
catch (Exception e){
e.printStackTrace();
throw new ActionException("竞拍价格必须是数值," + "不能包含其它字符!");
}
if(initPrice > d){
throw new ActionException("竞拍价格比起拍价低," + "不许竞拍");
}
initPrice = d;
}
public static void main(String[] args) {
ActionExceptionTest ar = new ActionExceptionTest();
try{
ar.bid("df");
}
catch (ActionException ae){
System.out.println(ae.getMessage());
}
}
}
9,多异常捕获,多种异常类型用(|)隔开,捕获多种类型的异常时,异常变量有隐式的final修饰,因此不能对其重新赋值
晚上7点~9点20
学习Java,Java疯狂讲义,381~393
1,捕获父类异常的catch必须位于捕获子类的后面
2,尽量避免在finally块里使用return和throw等导致方法终止的语句
3,Checked异常和Runtime异常体系
4,使用throws声明抛出异常,则无需使用try…catch块来捕获异常了
5,大部分推荐使用Runtime异常,
6,使用Throw抛出异常
7,异常跟踪栈,异常对象的printStackTrace()方法用于打印异常的跟踪栈信息。
晚上9点20~10点
每日总结