1.Object类:所有类的父类;若一个类没有指定父类,那么默认继承Object类
成员方法:
toString():返回该对象的字符串表示,对象的类型+@+内存地址值
注意:
a.通常情况下我们需要获得对象的属性等,所以一般需要对其进行覆盖重写,我们可以通过Alt+Insert来快速覆盖重写
b.直接打印对象的时候,打印出的就是toString()方法的返回值,所以toString()方法用来重写我们想看到的关于该类的信息
equals(Object obj):指示其他某个对象是否与此对象相等
基本数据类型:比较值
引用数据类型:比较的是两个对象的地址值
注意:
a.通常情况下我们需要比较两个变量的属性值是否相等,所以一般也需要对其进行覆盖重写
b.在子类作为方法的参数传入时有多态的情况发生,因此需要在覆盖重写的时候将子类向下转型为本身的类型(别忘了向下转换都需要先instanceof检查的)。
2.日期时间类:时间原点:1970-1-1 00:00:00
毫秒值:计算当前日期到时间原点之间一共经历了多少毫秒 long类型的数据
Date类:表示特定的时间,精确到毫秒
作用:可以对日期和时间进行计算
Date():则返回当前时间
Date(毫秒值L):则返回毫秒值所相应的时间
getTime(日期对象):将当前日期转化为毫秒值
DateFormat类:抽象类,可以在Date对象和String对象之间按照指定的格式互相转化
注:因为该类是抽象类,所以我们使用其子类SimpleDateFormat来多态创建对象使用。
格式:DateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String format(Date date):按照指定模式,将Date日期格式化为符合模式的字符串
例子:String str = df.format(date);
Date parse(String source):把符合模式的字符串,解析为Date日期
例子: 模式注意要相同
String str = “2018-01-01 00:00:00”;
Date date = df.parse(str);
| 标识字母 | 含义 |
|---|---|
| y | 年 |
| M | 月 |
| d | 日 |
| H | 时 |
| m | 分 |
| s | 秒 |
对应的模式例子:”yyyy-MM-dd HH:mm:ss”
Calendar类:抽象类,通过静态方法getInstance()获取Calendar子类对象
- public int get(int field):返回给定日历字段的值。- public void set(int field, int value):将给定的日历字段设置为给定值。- public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。- public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
| 字段值 | 含义 |
|---|---|
| YEAR | 年 |
| MONTH | 月(从0开始,可以+1使用) |
| DAY_OF_MONTH | 月中的天(几号) |
| HOUR | 时(12小时制) |
| HOUR_OF_DAY | 时(24小时制) |
| MINUTE | 分 |
| SECOND | 秒 |
| DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
特点:每个字段都有相对应的常量数字
3.System类:获取与系统相关的信息或系统级操作
currentTimeMillis方法:返回以毫秒为单位的当前时间,可以计算程序运行所需要的时间
格式:System.currentTimeMillis()返回值是long
arraycopy方法:将数组中特定的数据拷贝到另一个数组中
| 参数序号 | 参数名称 | 参数类型 | 参数含义 |
|---|---|---|---|
| 1 | src | Object | 源数组 |
| 2 | srcPos | int | 源数组索引起始位置 |
| 3 | dest | Object | 目标数组 |
| 4 | destPos | int | 目标数组索引起始位置 |
| 5 | length | int | 复制元素个数 |
4.StringBulider类:字符串缓冲区,可以看作是长度可变的字符串
底层:byte类型的数组,但是没有被final修饰,可以改变长度
构造方法:
- public StringBuilder():构造一个空的StringBuilder容器。- public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。
常用方法:String append(任意数据的字符串形式):用以添加字符串
可以链式编程 str.append(xx).append(xx).append(xx).append(xx)
toString():将StringBulider类转换成String类(逆向转换可以通过构造函数的方法)
5.包装类:将基本数据类型包装起来,成为类来使用
基本类和包装类之间可以自动装箱拆箱
String类型转换:
其他类型转换为字符串可以通过String类的valueOf()函数实现,但一般通过直接加” “空字符串得到
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的包装类型
6.Iterator类:用于获取集合中的元素
成员方法:
E next():返回迭代的下一个元素,并将指针后移一位
boolean hasNext():如果仍有元素可以迭代,则返回 true
注意:迭代器初始指向-1位置
使用步骤:
a.通过集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接收
b.先用hasNext()判断是否存在,然后用next()获得集合中的元素
例子:
Collection
Iterator
注意:迭代器接口Iterator
7.Collection接口:单列集合最顶层的接口
成员方法:
| boolean add(E e) | 把给定的对象添加到当前集合中 。 |
|---|---|
| void clear() | 清空集合中所有的元素。 |
| boolean remove(E e) | 把给定的对象在当前集合中删除。 |
| boolean contains(E e) | 判断当前集合中是否包含给定的对象。 |
| boolean isEmpty() | 判断当前集合是否为空。 |
| int size() | 返回集合中元素的个数。 |
| Object[] toArray() | 把集合中的元素,存储到数组中。 |
8.Collections接口:与上面的Collection类区分,是对于集合的一些操作
| public static |
往集合中添加一些元素。(这里用到了可变参数) |
|---|---|
| public static void shuffle(List<?> list) | 打乱顺序:打乱集合顺序。 |
| public static |
将集合中元素按照默认规则排序。 |
| public static |
:将集合中元素按照指定规则排序。 |
sort()方法:
不带比较参数:自定义数据类型,需要在自定义类中重写Comparable接口中的compareTo()方法。
带比较参数:需要自己写一个实现类,并继承Comparator接口,重写其中的compare方法。
9.List接口:继承Collection接口,是单列集合的重要分支
特点:有序,带索引,有重复元素
特有方法:void add(int index, E element):将指定元素添加到集合中的指定位置
实现类:
ArrayList和LinkedList集合,ArrayList底层是组数,LinkedList底层是链表
LinkedList类:
| public void addFirst(E e) | 将指定元素插入此列表的开头。 |
|---|---|
| public void addLast(E e) | 将指定元素添加到此列表的结尾。 |
| public E getFirst() | 返回此列表的第一个元素。 |
| public E getLast() | 返回此列表的最后一个元素。 |
| public E removeFirst() | 移除并返回此列表的第一个元素。 |
| public E removeLast() | 移除并返回此列表的最后一个元素。 |
| public E pop() | 移除并返回此列表的第一个元素。 |
| public void push(E e) | 将指定元素插入此列表的开头。 |
| public boolean isEmpty() | 如果列表不包含元素,则返回true |
注意:push和pop都是从开头操作
10.Set接口:
特点:无序,以某种规则存入,元素不重复,但是查找方便
HashSet类:根据对象的哈希值来确定元素在集合中的存储位置
底层数据结构:哈希表:哈希表是由数组+链表+红黑树实现
哈希值:十进制的整数,由系统给出,可以通过hashCode()方法获得
add()方法:在添加时会先检查数据的哈希code,若相同则比较值,相同则不添加
注意:存储自定义集合元素:必须重写equals方法和hashCode方法,保证存储的唯一性
LinkedHashSet:底层是哈希表加链表,即比HashSet多一条链表,记录元素顺序
11.可变参数:参数列表数据类型已确定,参数的个数不确定的时候使用
格式:修饰符 返回值类型 方法名(参数类型… 形参名){ }
注意:这个形参可以当作数组名来使用,不过传递的时候可以不用传递数组
12.Map集合:双列集合,有两个泛型
特点:key值不允许重复,key和value是一一对应的
HashMap
LinkedHashMap
常用方法:
| V put(K key, V value) | 把指定的键与指定的值添加到Map集合中 |
|---|---|
| V remove(Object key) | 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。 |
| V get(Object key) | 根据指定的键,在Map集合中获取对应的值。 |
| boolean containsKey(Object key) | 判断集合中是否包含指定的键。 |
| Set |
获取Map集合中所有的键,存储到Set集合中。 |
| Set |
获取到Map集合中所有的键值对对象的集合(Set集合)。 |
put方法:当键值已经存在的时候,将新的value值替换原本的value值,并返回原本的value值;当键值不存在的时候,存储键值和value值,并返回null
遍历HashMap:
keySet():返回一个包含key值的Set集合,可以通过增强for循环或者Iterator迭代器遍历
例子:Set
entrySet():在Map中有一个entry方法,此方法保存Map中的键值对,通过entrySet方法返回包含此键值对的Set集合,然后通过两种方法对集合遍历即可输出
例子:Set
注意:存储自定义类为key时需要重写该类型中的equals和hashCode方法
13.of方法:在List Set Map接口中都有,可以一次性添加多个元素
格式:变量名.of(数据,数据,数据,数据)
注意:
a.该方法返回值是一个不可改变的集合,不能使用add和put方法
b.在往set和map中存的时候,不能有重复的元素
14.异常类
·异常类的参数可以添加异常提示语句
Throwable体系:
Error:严重错误Error,无法通过处理的错误,只能事先避免
Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行
异常的处理
总结:异常分为编译期异常和运行期异常,分别继承两个不同的类Exception和RuntimeException
其中Exception需要再代码中添加throws操作或者try……catch操作,而RuntimeException只需要抛出异常即可,由系统自己处理。
15.抛出异常thorw:
格式:throw new 异常类名(参数); (异常类必须是Exception或者Exception的子类对象)
方式:
如果是运行期异常(RuntimeException),那么我们需要通过thorw抛出异常的方式告知使用者产生的问题。我们不需要处理异常,交给JVM处理(打印异常对象,中断程序)
如果是编译异常,那么我们必须处理这个异常,要么throws,要么try……catch
Objects非空判断方法:
public static <T> T requireNonNull(T obj) {if (obj == null)throw new NullPointerException();return obj;}
可以通过此方法简化对空指针异常的处理 Objects.requireNonNull()
16.声明异常throws:用于进行异常类的声明,若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。
格式:修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
注意:
a.如果调用了一个声明抛出异常的方法,那么此方法也必须处理声明的异常。要么继续throws声明抛出,最终交给JVM处理;要么try……catch自己处理异常。
b.如果抛出异常的对象又子父类关系,那么直接声明父类异常即可
17.try……catch捕获异常:
try{编写可能会出现异常的代码}catch(异常类型 e){处理异常的代码//记录日志/打印异常信息/继续抛出异常}
运行:如果出现异常,那么执行catch中的代码,否则执行try中的代码
finally代码块:特定的代码无论异常是否发生,都需要执行
格式:finally用在catch后面,无论程序怎样,finally中的语句都会执行。
用处:finally一般用于资源释放。无论程序是否异常,最后都要释放资源的。
18.Throwable类:
String getMessage() 获取异常的描述信息,原因
String toString() 获取异常的类型和异常描述信息
void printStackTrace() 打印异常的跟踪栈信息并输出到控制台(默认)
19.多个异常处理:
分别处理:就是一个一个try catch
一次捕获,多次处理:
try{编写可能会出现异常的代码}catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获.处理异常的代码//记录日志/打印异常信息/继续抛出异常}catch(异常类型B e){ 当try中出现B类型异常,就用该catch来捕获.处理异常的代码//记录日志/打印异常信息/继续抛出异常}
注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
一次捕获一次处理:直接catch(Exception e),覆盖所有子类的异常,比较方便。
注意事项:
a.不要再finally中写return语句,因为永远返回finally中的结果
b.父类方法抛出多个异常的,子类方法只能抛出少于等于父类的异常,或者不抛出异常
c.父类方法没有抛出异常,那么子类方法也不能抛出异常,只能捕获处理,不能声明抛出
bc.简单来说,父类声明什么异常,子类就声明什么异常
20.自定义异常
自定义一个编译期异常: 自定义类 并继承于java.lang.Exception。
自定义一个运行时期的异常类:自定义类 并继承于java.lang.RuntimeException。
格式同定义一个类类似,方法可以直接继承采用父类中的方法。
