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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

DAY01

Object类
java.lang.Object类: 根类, 所有类的父类
// 成员方法
        String toString() :返回该对象的字符串表示  Person
        boolean equals(Object obj) :指示其他某个对象是否与此对象"相等"
Objects类
java.util.Objects类: JDK7 添加. 操作对象的工具类, 提供了空指针安全的方法
日期时间相关的类
毫秒值从 0时区 1970-01-01 00:00:00 开始, 至今经过的毫秒值
long time = System.currentTimeMillis();
Date类
java.util.Date:日期, 表示特定的瞬间, 精确到"毫秒"
// 构造方法
Date(): 创建Date对象, 表示当前系统时间
Date(long date): 创建Date对象, 使用指定的毫秒值作为时间
// 常用成员方法
long getTime(): 获取Date对象中保存的时间毫秒值
void setTime(long time): 修改Date对象的时间
DateFormat类和SimpleDateFormat类
java.text.DateFormat抽象类: 用于格式化和解析时间. 提供了方便的方法
// 常用成员方法 (抽象类不能创建对象, 但可以有非抽象的方法供子类使用)
String format(Date date): 格式化, 从Date对象转换为String对象
Date parse(String source): 解析, 从String对象转换为Date对象
java.text.SimpleDateFormat类:继承了抽象类,实现了抽象方法
// 构造方法
SimpleDateFormat(String pattern): 用给定的模式和默认语言环境的日期格式符号创建对象
// 常用模式: 可在SimpleDateFormat类中查看
y: 年                M: 月        d: 日        H: 时 (24小时制)        m: 分        s: 秒
E: 星期        D: 年中的天        K: 小时(12小时制)        S: 毫秒
// 使用指定的模式创建对象
SimpleDateFormat format = new SimpleDateFormat("yyyy‐MM‐dd HH:mm:ss");
Calendar类
java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性
// 静态方法
static Calendar getInstance(): 根据当前系统设置获取合适的Calendar对象, 表示当前系统时间
// 静态成员变量
static int YEAR                                 :年份
static int MONTH                          :月份. 注意月份数值是 0-11
static int DAY_OF_MONTH            :日期
static int HOUR                           :小时(12小时制)
static int HOUR_OF_DAY           :小时(24小时制)
static int MINITE                         :分钟
static int SECOND                          :秒
// 非静态成员方法
int get(int field): 获取指定日历字段的值
void set(int field, int value): 修改指定日历字段为指定的值
void set(int year, int month, int date): 快速设置年月日
void add(int field, int amount): 调整指定日历字段的值. 正数增加, 负数减少
Date getTime(): Calendar转Date
void setTime(Date d): Date转Calendar

日期转换总结:
long和Date对象互转
        利用Date
                Date(long millis): long转Date
                long getTime(): Date转long
String和Date对象互转
        利用SimpleDateFormat
                Date parse(String s): String转Date
                String format(Date): Date转String
Calendar对象和Date对象互转
        利用Calendar
                Date getTime(): Calendar转Date
                void setTime(Date d): Date转Calendar

System类
java.lang.System类: 系统相关功能
// 静态方法
static long currentTimeMillis(): 返回当前系统时间的毫秒值
static void arrayCopy(Object src, int srcPos, Object dest, int destPos, int length): 复制源数组中指定长度个元素到一个新数组中

StringBuilder类
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串. 底层使用数组保存
// 构造方法
StringBuilder(): 构造一个空的StringBuilder容器
StringBuilder(String str): String转StringBuilder
// 常用方法
StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象
String和StringBuilder互转: 利用StringBuilder
        StringBuilder(String str): String转StringBuilder
        String toString(): StringBuilder转String

包装类
包装类: 基本数据类型对应的引用数据类型
基本类型
对应的包装类(位于java.lang包中)
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

装箱: 从基本类型转换为对应的包装类对象
        装箱原理:
        //Integer i1 = new Integer(1);
        //Integer i2 = new Integer("1");
        Integer i3 = Integer.valueOf(1); //使用包装类中的静态方法valueOf()
拆箱: 从包装类对象转换为对应的基本类型
        拆箱原理:
        int num = i.intValue();
基本类型与字符串之间转换
基本类型转为String:
        1. 拼接空字符串:
                String s = "" + 34
        2. 每个包装类中的静态方法 static String toString(参数):
                String s = Integer.toString(10);
        3. String类中的静态方法 static String valueOf(参数):
                String s = String.valueOf(10);
String转基本类型: 利用每种包装类中的静态方法
static byte parseByte(String s): 将字符串参数转换为对应的byte基本类型
static short parseShort(String s): 将字符串参数转换为对应的short基本类型
  static int parseInt(String s): 将字符串参数转换为对应的int基本类型
  static long parseLong(String s): 将字符串参数转换为对应的long基本类型
  static float parseFloat(String s): 将字符串参数转换为对应的float基本类型
  static double parseDouble(String s): 将字符串参数转换为对应的double基本类型
  static boolean parseBoolean(String s): 将字符串参数转换为对应的boolean基本类型
    注意: 没有转char的!!


DAY02



Collection

集合概述
长度可变容器, 可以存储多个对象

集合和数组的区别:
1. 数组长度不可变; 集合长度可变
        2. 数组可以存基本类型或引用类型, 只能存同一种类型; 集合只能存储引用类型元素, 可以是多种类型元素

单列集合框架
Collection接口: 单列集合顶层
        |_ List接口: 元素存取有序, 可重复, 有索引
  |           |_ArrayList
  |           |_LinkedList
  |           |_Vector
  |
        |_ Set接口: 不可重复, 无索引
            |_TreeSet
          |_HashSet
                    |_LinkedHashSet
Collection接口:
java.util.Collection<E>:单列集合顶层
// 成员方法(子类都会实现)
        boolean add(E e): 把给定的对象添加到当前集合中
        void clear(): 清空集合中所有的元素
        boolean remove(E e): 把给定的对象在当前集合中删除
        boolean contains(E e): 判断当前集合中是否包含给定的对象
        boolean isEmpty(): 判断当前集合是否为空(没有元素)
        int size(): 返回集合中元素的个数
        Object[] toArray(): 把集合中的元素,存储到数组中
        
        Iterator<E> iterator(): 获取集合的迭代器对象 (后面讲到)
        Iterator接口: 迭代器
迭代器
类似于遍历, 判断是否有下一个元素, 有则取出下一个, 直到没有
java.util.Iterator<E>接口: 迭代器
        // 成员方法
        boolean hasNext(): 判断是否有下一个元素
        E next(): 获取下一个元素        
        void remove(): 删除next指向的元素

使用迭代器遍历集合的3步:
        1. 使用集合对象的 iterator() 获取迭代器对象, 用 Iterator 接口接收.(多态)
        2. 使用 Iterator 接口中的 hasNext() 方法, 判断是否有下一个元素
        3. 使用 Iterator 接口中的 next() 方法, 获取下一个元素
迭代器的并发修改异常
在使用迭代器迭代的过程中, 如果执行了改变集合长度的操作 (如 add(), remove(), clear()), 则会抛出 ConcurrentModificationException 并发修改异常.
如何避免:
1. 迭代过程中不要修改集合长度
2. 在迭代的过程中添加, 删除元素, 要使用迭代器自带的方法, 而不能使用集合的方法
        Iterator中的 remove() 方法
        ListIterator中的 add(), remove() 方法

增强for循环
也称foreach循环, JDK 5出现, 用于遍历集合, 底层采用迭代器
增强for对于数组和集合的操作:
        对数组只是写法上的优化, 底层还是普通for循环
        对集合是通过迭代器实现的

泛型
Generic Type. JDK 5 增加. 是一种未知的数据类型
        定义集合时, 某些方法不知道使用什么类型时, 就可以使用泛型
          创建集合对象时, 需要确定泛型具体的类型

不使用泛型的问题:
        集合实际存储的是 Object 类型, 存入的元素无论是什么类型, 都会被提升为 Object, 取出来的也是 Object, 要想调用元素特有方法, 就要向下转型, 有可能发生类型转换异常 ClassCastException

泛型的好处:
        1. 避免了类型转换的麻烦
        2. 将运行时的类型转换异常, 转移到了编译时期 (有利于程序员提前发现问题)

定义和使用含泛型的类
// 带有泛型的类定义格式
    修饰符 class 类名<代表泛型的名字> {}
类中的泛型, "在创建对象时", 确定泛型的具体类型

定义含有泛型的方法与使用
修饰符 <代表泛型的名字> 返回值类型 方法名(参数){}
方法中定义泛型后, 返回值类型和参数类型都可以使用泛型
"在调用方法时"确定泛型的具体类型

定义与使用含有泛型的接口
修饰符 interface 接口名<代表泛型的变量> {}
实现类实现了泛型接口后可以有2种选择:
        1. "定义实现类时", 确定泛型的具体类型
   2. 定义实现类时仍然沿用泛型, 直到"创建该实现类对象时"才确定泛型的具体类型

泛型通配符
不知道使用什么类型来接收时, 此时可以使用 <?> 来表示未知通配符
注意: 只能接收数据, 不能调用方法存储元素
使用方式:
                不能创建对象使用
                只能作为方法参数使用. (减少方法重载)

泛型的上限:
        格式: 类型名称<? extends 类名> 对象名称
        作用: 只能接收泛型为该类型及其子类的对象 (Number及其子类的泛型)

泛型的下限:
        格式: 类型名称<? super 类名> 对象名称
        作用: 只能接收泛型为该类型及其父类型的对象 (Number及其父类的泛型)



0 个回复

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