黑马程序员技术交流社区

标题: 阶段笔记整理 [打印本页]

作者: 夕阳海风    时间: 2018-4-14 18:38
标题: 阶段笔记整理
一、获取class字节码对象的方法
        1.通过Object类的getClass()方法获取
        2.通过类名调用属性class来获取
        3. 通过Class类的静态方法forName()来获取(注意:方法中应传入类的全名“字符        串”)
二、String toString()方法:
        默认返回对象的字符串表示,如果想要表示出对象的属性,需在对象的类中重写toString        ()方法【此方法为根类Object中的方法】【例:一个学生对象s,syso(s),默认输出        对象地址,如果类中        重写了toString方法,则输出姓名,年龄等信息】
三、equals(Object obj)方法
        用于比较两个对象是否相等,Object类中默认使用“==”来比较两        个对象的地址值;        如果想要比较对象属性是否相同,需要在类中重        写此方法。。用“==”直接比较两个        对象时,比较的是地址值,如        果比较两个对象的class,会发现同一个类的对象共用        一个class文        件
四、System
        1、static void arraycopy(Object src, int srcPos, Object         dest, int destPos, int length)
        2、static long currentTimeMillis()
        3、static void exit(0)结束当前运行的虚拟机
五、Date类
        构造方法:Date();
                 Date(long date)毫秒,距离1970.1.1的毫秒数
        方法:setTime()        getTime()
六、DateFormat和SimpleDateFormat
        前者是抽象类,后者是前者的子类,用子类创建对象,规定日期格        式,以用于将日期在Date与String之间进行转换;转换时使用的format(Date date)与parse(String string)方法均来自父类DateFormat
y : 年
M : 月
m : 分
D : 年中的天
d : 月中的天
H : 小时(24小时制)
K : 小时(12小时制)
S : 毫秒
s : 秒
E : 星期
七、Calendar类
Static Calendar getInstance()静态方法创建日历对象
        静态方法创建日历对象Calendar c = Calendar.getInstance();  //返回当前时间

八、Collection接口中常用的功能
Collection 接口
是单列集合体系的顶层
如何创建Collection对象?
本身是接口, 实际使用的是子类对象. 使用多态,  Collection c = new ArrayList<>();
常用方法

boolean add(E e) : 向集合中添加元素, 添加成功返回true, 添加失败返回false. 永远能够添加
成功

boolean remove(Object o) : 删除元素中的指定元素, 删除成功返回true, 删除失败返回false
void clear() : 清空集合中的元素
判断
boolean contains(Object o) : 判断集合中是否包含指定元素, 包含返回true, 否则false
boolean isEmpty() : 判断集合是否为空集合, 即没有元素. 没有元素返回true, 否则false
获取个数
int size() : 获取集合中元素的个数
转换
Object[] toArray() : 将集合转换为Object[]

九、迭代器的概述和测试
Iterator 接口:
迭代器
作用:
提供遍历集合的安全方式
获取迭代器:
使用集合对象调用 Interator<E> iterator() 方法
成员方法
boolean hasNext() : 是否有下一个元素
E next() : 返回下一个元素
void remove() : 从迭代器指向的 collection 中移除迭代器返回的最后一个元素

十、并发修改异常:
ConcurrentModificationException
并发:
并行发生, 即同时发生
修改:
指的是会改变集合长度的操作
增加元素
删除元素
清空元素
list的 set(int index, Object o) 方法可以修改集合中某个索引处的元素值, 但并不会改变集
合的长度, 所以不会发生并发修改异常
发生原因:
迭代器依赖于集合, 相当于集合的一个副本, 当迭代器在操作时, 如果发现迭代器的副本和集合不一
样, 则抛出并发修改异常
如何避免:
}
方式1: 不使用迭代器
方式2: 在使用迭代器遍历时, 使用迭代器的方法修改
添加元素:
List接口中的 ListIterator listIterator() 获取用于List的迭代器, 然后调用
ListIterator的add()方法
删除元素: remove()
List接口
列表, 是Collection的子接口
特点:
元素存取有序, 元素可以重复, 有索引
foreach的概述(也叫增强for循环)
foreach:
增强for循环
作用:
遍历数组和集合
格式 for (数据类型 变量名 : 对象) {}

十一、类
Collection:自身方法
List接口(元素存取有序, 元素可重复, 有索引)
ArrayList类(底层是数组, 查询快, 增删慢)
LinkedList类(底层是链表, 查询慢, 增删快)
Set接口(元素存取无序, 元素不可重复, 无索引)
Map接口(双列集合体系的顶层, 以键值对方式存储, 键不可重复, 值可以重复)
Map.Entry(Map内部接口, 表示键值对对象)
HashMap类
Iterator接口(迭代器)
ListIterator接口(List体系专用迭代器
Collections工具类

十二、异常的处理方式
java.lang.Throwable(最顶层)
|_ Error (不应该试图捕获的严重问题, 不能处理的异常)
|_ Exception (可以处理的异常) # 编译时异常: 编译时期就会发生的异常
|_ RuntimeException # 运行时异常: 编译时正常, 运行时才会发生的异常
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at com.itheima.practice_08.MapTest.main(MapTest.java:31)
解释:
* Exception in thread "main": 在名为"main"的线程发生异常
* java.util.ConcurrentModificationException: 异常的具体类型, 这里是并发修改异常
* at xxx.xxx.xxx: 异常发生的位置, 因为层层方法调用, 所以会出现多个类的方法, 这些方法组成了异常链
* 只要不是我们的包名, 一般不用看. 是我们的包名, 才看
* at com.itheima.practice_08.MapTest.main(MapTest.java:31): 说明这个异常, 发生在我们的
com.itheima.practice_08下的MapTest类的main方法中, 具体是MapTest.java文件中的第31行
* 一般MapTest.java:31这一部分是可以鼠标点击的, 点击后就直接跳转到报错的这一行
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.itheima.practice_01.ExceptionTest.main(ExceptionTest.java:9)
解释:
* / by zero: 是异常的说明信息, 有的异常有说明信息, 有的没有
* 其他和上例一样
JVM默认处理方式
如果开发者没有处理异常, 则JVM会把异常的类型, 原因, 位置显示在命令行上, 并终止程序. 发生异常
之后的代码都不会再执行
手动处理异常的2种方式
1. 捕获异常并处理:  try...catch...
提前对可能发生的异常进行处理, 纠正错误并避免程序终止.
2. 直接抛出异常: 在方法声明上添加 throws 异常类型
不捕获异常, 当发生异常时向方法外界抛出, 直到最顶层的方法, 最终终止程序
一般在无法处理异常, 或希望外界处理异常时使用
异常的处理方式:1、JVM  2、try...catch语句   3、在方法声明时抛出异常
多异常处理时,如果有多个catch语句,应当把Exception异常放在最后一个;

十三、递归
递归思想: 将大问题拆为小问题, 将小问题继续拆为小问题, 所有的小问题解决了, 大问题也就解决了
在Java代码中的实现方式: 方法自己调用自己 (所以必须要定义方法)
作用: 简化代码书写
注意事项:
必须要定义方法的结束方式(出口). 无法结束的方法会导致内存溢出
递归次数要注意. 递归次数太多会导致内存溢出




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2