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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-4-20 09:28 编辑

是时候展示真正的技术了


# 学习笔记

## API(Object,System,日期,包装类,正则表达式)
### Object的toString()方法
- Object类
        - Object是所有类的根类
        - 所有类**直接或间接**继承Object类
- 成员方法
        - String toString():返回对象的字符串形式               
- 重写toString()方法
        - 作用:重写自定义输出格式,查看对象随属性        
        - 快捷键        Alt + Shift + s > Generatr toStroing()...
----------
        
### 获取字节码对象
-  **方法一:**
        - Object类的getClass()方法        
                1. 示例: Class c = new Student.getClass();               
- **方法二:**
        - 类名.class属性
                1. 示例: Class c = Student.class;               
                2. 扩展: 实际上 .class 是一种特殊形式, 称为 类字面常量 , class是关键字不能作为属性名, 且Object类 中并没有定义这个属性
- **方法三(最常用)**
        - Class类的静态方法Format(String className)
                1. 示例:Class c = Class.Format("itheima.Student");         
                2. 注意: 因为该方法使用字符串来寻找类, 有可能并没有该字符串对应的类, 所以会抛出 ClassNotFoundException 类无法找到的异常
- **注意**
        - 同一个类的字节码对象只有一个,地址值是相同的,无论创建多少对象
        - Class和class的区别
                1. Class是一个类,表示字节码文件的类        
                2. class是一个关键字,用于定义类        
        -         获取类全名快捷键
                1.         光标放在类名上,右击鼠标,点击Copy qualified Name
----------

### Object的equals方法
-         Object类
        -         boolean equals(Object obj):比较两个对象的是否"相等"
-         String类和Object类的equals方法的区别
        -         String类的equals方法:比较两个字符串是否相同,重写了Object的equals方法
        -         Object类的equals方法:基本数据类型比较值,引用数据类型比较对象的地址值
-         快捷键生成equals方法
        -          Alt + Shift + s > Generate hashCode() and equals()...


----------

### System类概述
- java.lang包下的类,不用导包就能使用
- System类:包含一些有用的类字段和方法,不能被实例化
        - 类字段:静态成员
                - **err:**标准错误输出流(输出结果为红色字体):System.err
                - **in:**标准输入流:System.in
                - **out:**标准输出流:System.out
        - 常用静态方法
                - static void arrayCopy(Object src, int srcPos, Object dest, int destPos, int destPos);
                        - Object src:源数组(被复制的额数组)
                        - Object dest:目标数组 (接收数据的数组)
                        - int srcPos:源数组索引(从此索引开始复制)
                        - int destPos:目标索引(从此索引开始赋值接收数据)
                        - int destPos:复制长度(要复制的长度)
                - static long currentTimeMillis():返回当前系统的毫秒值,从1997-01-01 00:00:00开始计算
                - static void exit(int status):终止虚拟机运行.0表示正常退出,非0表示异常退出
        

----------
### Date类的概述和构造
- 注意:不要导错包,Date有两个类一个java.sql.Date,一个java.util.Date,这里我们用java.util.Date包
- Date类
        - 构造方法
                - Date Dat():无参构造->>创建对象,表示当前系统时间
                - Date Date(long date):有参构造->>创建对象,使用指定时间(毫秒值)
        - 成员方法
                - String tolocalString():已过时,用于转化本地时间格式化字符串
----------
###Date类常用方法
- void setTime(long time):设置Date对象时间
- long getTime():获取Date对象中保存的时间毫秒值

----------
###SimpleDateFormat类概述

----------


- SimpleDateFormat用于格式化时间和解析时间
- 构造方法
        - SimpleDateFormat SimpleDateFormat(String patter):创建对象同时指定时间格式
- 成员方法
        - 格式化:Date对象 转成 字符转
                - String format(Date date):格式化Date对象返回字符串
        - 解析: 字符串 转成 Date对象
                - Date parse(String str):将字符串转化成Date对象
                        - 主要该方法需要抛出 ParseException 异常,因为字符串可能不匹配指定格式
- 常用日期模式:详见API
- 注意:每个SimpleDateFormat对象都有对应的格式,无论format()还是parse()方法都用这个模式


----------
### Calebdar概述和测试
- Calendar 类: 日历类, 也是处理时间和日期的类, 用于替代Date类
        - 创建对象
                - 静态方法: static Calendar getInstance()
                        - 示例: Calendar c = Calendar.getInstance();
        - 静态字段: 表示时间的某个部分(详见API)
        - 成员方法:
                - int get(int field) : 返回给定日历字段的值
                - void set(int field, int value) : 将给定的日历字段设置为给定值
                - void add(int field, int amount) : 为给定的日历字段添加或减去指定的时间量, 如时间字段是 天, 增加n天, 时间字段是秒, 增加n秒. 减少用负数

----------
### 包装类的概述和基本使用


----------
- 什么是包装类
        - 包装类是封装了基本数据类型的类, 提供了更多复杂的方法和变量
        - 同时将基本类型的使用转换为了类的面向对象方式
- 基本数据类型与其包装类的对应关系
        - byte: Byte
        - short: Short
        - char: **Character**
        - int: **Integer**
        - long: Long
        - float: Float
        - double: Double
        - boolean: Boolean
- Integer
        - 构造方法
                - Integer(int value) : int转Intege
                - Integer(String value) : String转Integer
        - 成员方法
                - int intValue() : Integer转int
                - String toString() : Integer转String
                - static int parseInt(String value) : String转Integer
        - 整数基本类型和包装类转换
                - int转Integer
                        - 利用Integer的构造方法: Integer Integer(int value)
                - Integer转int
                        - 利用Integer的成员方法: int intValue()
        - 字符串和整数转换
                - String转int/Intege
                        - 方式1: Integer Integer(String s)
                        - 方式2: static int parseInt(String s)
                        - 方式3: static Integer valueOf(String s)
                - int/Integer转String
                        - 方式1: "" + int值
                        - 方式2: String toString()
                        - 方式3: static String toString(int i)

----------
### 包装类的自动装箱和自动拆
- 自动装箱
        - 示例: Integer i = 10;
        - 原理: 相当于执行 Integer i = new Integer(10); 或 Integer i = Integer.valueOf(10);
- 自动拆箱
        - 概念: 包装类可以自动转换为基本数据类型
        - 示例: Integer i = 10; int a = i;
        - 原理: 相当于执行 int a = i.intValue();

----------
###正则表达式(参考API)

----------

        
## 集合(Collection,迭代器,增强For,泛型,List子集)

### 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
        - 发生原因: 迭代器依赖于集合, 相当于集合的一个副本, 当迭代器在操作时, 如果发现迭代器的副本和集合不一 样, 则抛出并发修改异常
        - 如何避免:
                - 方式1: 不使用迭代器
                - 方式2: 在使用迭代器遍历时, 使用迭代器的方法修改
                        -  添加元素: List接口中的 ListIterator listIterator() 获取用于List的迭代器, 然后调用 ListIterator的add()方法
                        -  删除元素: remove()
-  List接口
        -   列表, 是Collection的子接口
        -   特点: 元素存取有序, 元素可以重复, 有索引

----------
###泛型
- 泛型的出现:由于集合可以存储任意类型的对象, 所以可以按照Object类型存入, 如果我们向集合中存储不同类型 的对象后再遍历出来元素, 都是Object类型, 若要使用该类型的方法, 必须进行类型转换, 有可能发生 类型转换错误
- 好处:(1)避免类型转换问(2)减少警(3)简化代码书写
- 作用:(1)用于明确数据类型 (2)将运行时才发生的类型转换问题, 提前到了编译时期

----------
### foreach的概述(也叫增强for循环)
-  作用:遍历数组和集合
-  格式:
        -  for (元素类型 变量名: 数组或集合对象) {     }
- 注意:增强for循环中不能修改集合(改变集合长度), 会发生 并发修改异常
        - 原因: 因为增强for循环内部使用的是迭代器进行迭代
- 优点: 简单快捷的拿到每一个元素
- 缺点: (1)循环过程中不能修改集合 (2)不能像普通for循环那样使用索引

----------
### 常见数据结构
- 数组
        - 数组的特点:
                - 长度一旦确定则不可改变
                - 元素有整数索引
                - 只能存储同一类型的元素
                - 既可以存储基本数据类型, 也可存储引用数据类型
        - 总结:增删慢 查询快
- 链表
        - 链接列表, 好比通过链子链接起来的一些结点
                -  由 本结点地址值 , 值 , 下一个结点的地址值 这三部分组成
        - 增删快 查询慢
- 栈和队列
        - 栈
                - 先进后出(FILO, First In Last Out). 或后进先出(LIFO, Last In First Out)
        - 队列
                - 先进先出(FIFO, First In First Out).


----------
### List的特点和特有功能

----------
- 继承自 Collection 接口. 在 java.util 包下
- 特点:(1)元素有序(存入和取出的顺序一样) (2)有整数的索引 (3)元素可以重复
- 特有功能 (都是按索引进行操作的)
        - void add(int index, E element) : 添加元素
        - E remove(int index) : 删除元素
        - E set(int index, E element) : 修改元素
        - E get(int index) : 获取元素

----------
###List的子类概述, LinkedList特有功能
- List的子类
        - ArrayList : 底层数组结构. 查询快, 增删慢
        - LinkedList : 底层链表结构. 查询慢, 增删快
                - 特有方法 (用于处理开头和结尾的元素)
                        -  void addFirst(E e) : 将元素添加到开头
                        -  void addLast(E e) : 将元素添加到末尾
                        -  E getFirst() : 获取开头的元素
                        -  E getLast() : 获取结尾的元素 4
                        -  E removeFirst() : 删除第一个元素, 并返回删除的元素
                        -  E removeLast() : 删除后一个元素, 并返回删除的元素






## 集合(HashSet, HashMap, Map集合嵌套)
###Set体系的特点
- Set接口: 继承自Collection接口
        - 特点
                - 元素无序(存入和取出的顺序不一致)
                - 元素不能重复(元素唯一)
                - 没有索引
        - 注意:
                - 无序: 指的是存入的顺序和取出的顺序不一样, 而不是说每次取出来是随机顺序, 存入后每次取出来的顺序 都一样, 但和存入的顺序不一样
                - 直接打印和获取元素都属于取出, 所以不要把打印当成是HashSet内部存储的样子

----------
###HashSet存储自定义对象并遍历
- HashSet类: 是Set接口的实现类
        - 成员方法: boolean add(E e) : 添加成功true, 添加失败(重复了)返回fals
- 重写hashCode()和equals()方法让HashSet可以去掉属性重复
-

----------
### Collections工具
- Collection 和 Collections 有什么区别?
        - Collection是接口, 是单列集合的顶层, 包含一些共性方法
        - Collections是类, 提供操作Collection的一些工具方法, 类似的还有操作数组的Arrays工具类
-  Collections类 常用静态方法
        - static int binarySearch(List list, T key) : 使用二分查找来查找元素在指定列表的索引位置 二分查找的前提是集合已经排序, 查找原理类似猜数字
        - static void copy(List dest, List src) : 将源列表中的数据复制到目标列表 注意: 目标列表的长度至少等于源列表的长度
        - static void fill(List list, Object obj) : 使用指定对象填充指定列表的所有元素
        - static void reverse(List list) : 反转集合中的元素
        - static void shuffle(List list) : 随机打乱集合中元素的顺序
        - static void sort(List list) : 将集合中的元素按照元素的自然顺序排序 自然顺序: 元素要具有比较性 A-Z, 0-9本身就具有自然顺序 自定义的对象, 如Student等, 需要自己定义如何进行比较
        - static void swap(List list, int i, int j) : 将指定列表中的两个索引进行位置互换
----------
###Map接口的概述
- Map<K, V> 接口 是双列集合的顶层, 和Collection属于同级
-  特点 (1)存储方式是 key-value (键值对)方式, 即一个键对应一个值 (2)一个键只能映射一个值 (3)键不能重复, 值可以重复 (4)键是无序的
-  Map和Collection的区别
        -  Map是双列集合, 用于处理有 一一对应 关系的数据,键不能重复且键无序
        -  Collection是单列集合, 有不同的子体系, List允许重复且有序, Set不允许重复且无序
- 多态创建对象: (也可以不使用多态) Map<K, V> map = new HashMap<>();
- 常用方法:
        - 增和改
                - V put(K key, V value) : 添加键值对.
                - 注意: 如果key已经存在, 则会使用新的value覆盖原有value, 并将原有value返回
        - 删
                - void clear() : 清空集合
                - V remove(Object key) : 删除指定键的值(key和value都会删除)
        - 查
                - V get(Object key) : 通过指定键获取值
                - int size() : 获取集合长度
        - 判断
                - boolean containsKey(Object key) : 是否包含指定的键
                - boolean containsValue(Object value) : 是否包含指定的值
                - boolean isEmpty() : 是否为空
        - 遍历
                - Set<Map.Entry<K, V>> entrySet() : 获取键值对的Set集合
                - Set<K> keySet() : 获取所有键的Set集合
                - Collection<V> values() : 获取所有值得Collection集合

----------

## 异常,递归
###异常概述和体系
- 异常:就是不正常的情况下,是代码编译或运行时发生的错误
- 常见异常:
        - NullPointerExxeption
        - ArrayIndexOutBoundException
- 异常处理方式:JVM默认处理方式,try...catch()
        - 处理异常的方式有两种:
                - 捕捉异常
                        - try...catch()...
                        - 提前对可能发生的异常进行处理, 纠正错误并避免程序终止.
                - 抛出异常
                        - throws
                        - 不捕获异常, 当发生异常时向方法外界抛出, 直到最顶层的方法, 最终终止程序
                        - 一般在无法处理异常, 或希望外界处理异常时使用
        - 声明自定义异常
                - 关键字:throw
        - 多异常处理
                - 多异常的捕获: 可以写多个catch代码块来分别处理同一个try代码块中的多个异常
                - 多异常捕获中catch的顺序
                        - 如果被捕获的异常类没有继承关系, 则catch的顺序可以随意定义
                        - 如果异常是继承关系的类, 必须子类异常在上, 父类异常在下
                                - 原因: 因为父类包含子类的异常, 如果上方被父类异常的catch捕获了, 那么捕获子类异常的catch永 远也不会用到
                        - 多个catch代码块的执行逻辑
                                - try代码块中抛出的异常, 如果catch中有对应的具体异常, 则执行对应的catch代码块. 其他catch代码块不 会执行(类似于if...else if, switch...case)
                                - try代码块中抛出的异常, 如果catch中没有对应的具体异常, 则所有catch代码块都不会执行. 相当于异常 没有捕获, 仍然会导致程序终止

               

----------
###Throwable的常用方法
- 常用成员方法
        -  String getMessage() : 异常的信息. 没有原因返回 null
        -  String toString() : 异常的类型和原因 void
        -  printStackTrace() : 使用标准错误输出流打印异常信息
###finally概述和引用场景
- finally关键字
        - 作用:与try... catch配合,无论异常是否被捕获,最终都会执行finally代码
        - 应用场景:IO流的关流操作,无论IO操作过程中是否出现异常,最终都要关流,避免程序占用资源,所以一般都在finally代码中进行关流操作
        - 格式:        try{ }catch(){ }finally{ }
###异常分类
- 异常的分类
        - 编译时异常: 编译时就发生的异常
                - Exception 及其子类(除RuntimeException体系)
                - 处理方式: 编译时期必须处理(try...catch或throws)
        - 运行时异常: 编译时正确, 但运行时发生的异常
                - RuntimeException 类及其子类
                - 处理方式: 编译时期可以自由选择处理或不处理
###递归
- 递归
        - 递归思想: 将大问题拆为小问题, 将小问题继续拆为小问题, 所有的小问题解决了, 大问题也就解决了
        - 在Java代码中的实现方式: 方法自己调用自己 (所以必须要定义方法)
        - 作用: 简化代码书写
        - 注意事项: 必须要定义方法的结束方式(出口). 无法结束的方法会导致内存溢出 递归次数要注意. 递归次数太多会导致内存溢出

0 个回复

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