进入就业班已经一周,这一周的个人体会就是:就业班节奏比基础班节奏更快,每天都好繁忙,每天都感觉时间不够用,但是忙却很充实。每天都能学到新的东西,感觉每一天都很有意义。
这一周以来,学习的主要内容有:Object类、API的用法;Collection、泛型;集合List、Set、Collections;集合Map、HashMap;异常、线程;多线程之同步等。
以下是本周学习的主要内容:
Object类 Object类,在java.lang包下是所有类的直接和间接的父类 其中包括了我们常用的toString方法和equals方法 覆盖重写Object类中的两个方法 Public String toString(Object obj); 返回该类型的字符串 Public String equals(Object obj); 指示其他某个对象是否与此对象“相等”。 Date:时间类 java.util.Date:表示时间的类 Date 表示特定的时间,精确到毫秒 毫秒:精确到千分之一秒 1000毫秒 =1秒 Date构造方法 public Date(){} 创建对象Date d = new Date(); System.out.println(d); public Date(long date){} 创建都行 Date d = new Date (3742767540068L); System.out.println(d);//打印指定毫秒值所对应的时间日期 Date 成员方法 public long getTime(); 获取当前时间的毫秒值 DateFormat类 Java.textDateFormat 是对日期/时间按照指定格式,格式化。(抽象类,无法直接创建对象) 解析:按照指定的格式,从Date对象转换成String对象 其中的成员方法 String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串 Date parse(String source) 把符合模式的字符串,解析为Date日期 SimpledateFormat类 java.text.SimpleDateFormat包下父类是DateFormat 构造方法 public SimpleDateFormat(String pattern) 用给定的模式和默认的语言环境日期格式符号构造 SimpleDateFormat 参数:String pattern 传递指定的模式 常用的格式规则 标识字母(区分大小写) 含义 y 年 M 月 d 日 H 时 m 分 s 秒 写对应的模式,会把模式替换对应的日期和时间 “yyyy-MM-dd HH:mm:ss” Calendar类 (抽象类) java.util.Calendar类是一个日历类 Calendar类的常用成员方法:
public int get(int field):返回给定日历字段的值。 参数int field:传递Calendar中对应的日历字段 public void set(int field, int value):将给定的日历字段设置为给定值。 参数:int value:是要更改的日历值
public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。 参数:int amount:增加和减少的值(正数是增加负数是减少
public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
System类 java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有
public static long currentTimeMillis():返回以毫秒为单位的当前时间。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。 [size=13.3333px]Collection[size=13.3333px]集合 Collection集合是一个接口,所有单列集合都实现了Collection接口 java.util.Collection接口
所有单列集合的最顶层的接口,里边定义了所有单列集合共性的方法
任意的单列集合都可以使用Collection接口中的方法
共性的方法:
public boolean add(E e): 把给定的对象添加到当前集合中 。
public void clear() :清空集合中所有的元素。
public boolean remove(E e): 把给定的对象在当前集合中删除。
public boolean contains(E e): 判断当前集合中是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组中。 Iterator迭代器 java.util.Iterator接口:迭代器(对集合进行遍历)
有两个常用的方法
boolean hasNext() 如果仍有元素可以迭代,则返回 true。
判断集合中还有没有下一个元素,有就返回true,没有就返回false
E next() 返回迭代的下一个元素。
取出集合中的下一个元素 增强for (for each) 专门用来遍历数组和集合的,他的内部原理其实就是一个Iterator迭代器 Collection<E>extends Iterable<E>:所有的单列集合都可以使用增强for
public interface Iterable<T>实现这个接口允许对象成为 "foreach" 语句的目标。
泛型: 创建集合对象,不使用泛型
好处:
集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据
弊端:
不安全,会引发异常 创建集合对象,使用泛型
好处:
1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)
弊端:
泛型是什么类型,只能存储什么类型的数据 数据结构 栈 先进后出 数据结构 队列 先进先出 数据结构 数组 查询快,增删慢 数组的长度不可改变 数据结构 链表 查询慢,增删快 数据结构 红黑树 查询速度快 树形结构,二叉树,平衡二叉树,红黑数 List接口 java.util.List接口 extends Collection接口
List接口的特点:
1.有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
2.有索引,包含了一些带索引的方法
3.允许存储重复的元素
List接口中带索引的方法(特有)
- public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
- public E get(int index):返回集合中指定位置的元素。
- public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
- public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
ArrayList集合 特点,ArrayList集合底层是一个数组,数组的特点就是查询快增删慢 不是同步的,也就是说是多线程的整体效率会高 LinkedList集合 java.util.LinkedList集合 implements List接口
LinkedList集合的特点:
1.底层是一个链表结构:查询慢,增删快
2.里边包含了大量操作首尾元素的方法
注意:使用LinkedList集合特有的方法,不能使用多态
- public void addFirst(E e):将指定元素插入此列表的开头。
- public void addLast(E e):将指定元素添加到此列表的结尾。
- public void push(E e):此方法等效于addFirst()。
- public E getFirst():返回此列表的第一个元素。
- public E getLast():返回此列表的最后一个元素。
- public E removeFirst():移除并返回此列表的第一个元素。
- public E removeLast():移除并返回此列表的最后一个元素。
- public E pop():从此列表所表示的堆栈处弹出一个元素。此方法相当于 removeFirst
- public boolean isEmpty():如果列表不包含元素,则返回true。 Vector集合 最早版本的一个集合,底层是数组结构,是单线程的速度慢被ArrayList所取代 是同步的,单线程,整体效率低。 HashSet集合 java.util.Set接口 extends Collection接口
Set接口的特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
java.util.HashSet集合 implements Set接口
HashSet特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
3.是一个无序的集合,存储元素和取出元素的顺序有可能不一致
4.底层是一个哈希表结构(查询的速度非常的快) LinkedHashSet集合 java.util.LinkedHashSet集合 extends HashSet集合
LinkedHashSet集合特点:
底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序 Collections 集合工具类 java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:
- public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。
- public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。 - java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:
public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。
Map集合(接口) java.util.Map<k,v>集合
Map集合的特点:
1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)
2.Map集合中的元素,key和value的数据类型可以相同,也可以不同
3.Map集合中的元素,key是不允许重复的,value是可以重复的
4.Map集合中的元素,key和value是一一对应
java.util.HashMap<k,v>集合 implements Map<k,v>接口
HashMap集合的特点:
1.HashMap集合底层是哈希表:查询的速度特别的快
JDK1.8之前:数组+单向链表
JDK1.8之后:数组+单向链表|红黑树(链表的长度超过8):提高查询的速度
2.HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致
java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合
LinkedHashMap的特点:
1.LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
2.LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的 Map中常用的方法 public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
返回值:V
存储键值对的时候,key不重复,返回值V是null
存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值 public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
返回值:V
key存在,v返回被删除的值
key不存在,v返回null public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
返回值V:
key存在,返回对应的value值
key不存在,返回null boolean containsKey(Object key) 判断集合中是否包含指定的键。
包含返回true,不包含返回false Map集合的第一种遍历方式:通过键找值的方式
Map集合中的方法:
Set<K> keySet() 返回此映射中包含的键的 Set 视图。
Map集合遍历的第二种方式:使用Entry对象遍历
Map集合中的方法:
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图。
LinkedHashMap集合 java.util.LinkedHashMap<K,V> entends HashMap<K,V>
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
底层原理:
哈希表+链表(记录元素的顺序) 异常: java.lang.Throwable:类是 Java 语言中所有错误或异常的超类。
Exception:编译期异常,进行编译(写代码)java程序出现的问题
RuntimeException:运行期异常,java程序运行过程中出现的问题
异常的处理: Java异常处理的五个关键字:try , catch , finally , throw , throws 抛出异常 throw throw关键字
作用:
可以使用throw关键字在指定的方法中抛出指定的异常
Obects类中的静态方法 public static <T> T requireNonNull(T obj):查看指定引用对象不是null。 声明异常throws throws关键字:异常处理的一种方式,交给别人处理
作用:
当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象
可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给JVM处理-->中断处理
Throwable类中定义了3个异常处理的方法
String getMessage() 返回此 throwable 的简短描述。
String toString() 返回此 throwable 的详细消息字符串。
void printStackTrace() JVM打印异常对象,默认此方法,打印的异常信息是最全面的 子父类的异常:
- 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常。
- 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
注意:
父类异常时什么样,子类异常就什么样 自定义异常类:
java提供的异常类,不够我们使用,需要自己定义一些异常类 并发和并行 并发:一个人同时做两件事情 并行:两个人同时做自己的事情 进程: 应用想要执行就要去计算机内存中运行,进入内存中的程序就是进程 线程: 线程是进程中的一个执行单元,负责当前进程中程序的执行 线程的调度: 分时调度:所有线程轮流使用CPU的使用权,平均平均分配每一个线程占用CPU的时间 抢占式调度:优先让优先级高的线程使用CPU 如果线程的优先级相同,那么会随机选择一个线程(线程的随机性)java使用的是抢占式调度 常用获取线程名称的方法 获取线程的名称:
1.使用Thread类中的方法getName()
String getName() 返回该线程的名称。
2.可以先获取到当前正在执行的线程,使用线程中的方法getName()获取线程的名称
static Thread currentThread() 返回对当前正在执行的线程对象的引用。 多线程睡眠方法 public static void sleep(long millis):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
毫秒数结束之后,线程继续执行 Runnale接口 创建多线程程序的第二种方式:实现Runnable接口
java.lang.Runnable
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
java.lang.Thread类的构造方法
Thread(Runnable target) 分配新的 Thread 对象。
Thread(Runnable target, String name) 分配新的 Thread 对象。
匿名内部类方式实现线程的创建
匿名:没有名字
内部类:写在其他类内部的类
匿名内部类作用:简化代码
把子类继承父类,重写父类的方法,创建子类对象合一步完成
把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成
匿名内部类的最终产物:子类/实现类对象,而这个类没有名字
线程安全问题: 当我们有多个线程去访问一个数据的时候,因为会抢夺资源会造成数据的安全问题。 同步代码块 解决线程安全问题的一种方案:使用同步代码块
解决线程安全问题的二种方案:使用同步方法 解决线程安全问题的三种方案:使用Lock锁 进入到TimeWaiting(计时等待)有两种方式
1.使用sleep(long m)方法,在毫秒值结束之后,线程睡醒进入到Runnable/Blocked状态
2.使用wait(long m)方法,wait方法如果在毫秒值结束之后,还没有被notify唤醒,就会自动醒来,线程睡醒进入到Runnable/Blocked状态
|