A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangG_Java 初级黑马   /  2018-12-12 21:45  /  736 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       进入就业班已经一周,这一周的个人体会就是:就业班节奏比基础班节奏更快,每天都好繁忙,每天都感觉时间不够用,但是忙却很充实。每天都能学到新的东西,感觉每一天都很有意义。



       这一周以来,学习的主要内容有: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集合中的元素,keyvalue的数据类型可以相同,也可以不同
     3.Map集合中的元素,key是不允许重复的,value是可以重复的
     4.Map集合中的元素,keyvalue是一一对应
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不重复,返回值Vnull
                存储键值对的时候,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状态

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马