# qd_dz_java20200319 **Repository Path**: climpeaker/qd_dz_java20200319 ## Basic Information - **Project Name**: qd_dz_java20200319 - **Description**: Java基础:核心类、异常、集合 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # qd_dz_java20200319 #### 介绍 Java基础:核心类、异常、集合 #### 课堂笔记 1. 核心类 ```aidl 1.1 String工具类 String类是jdk提供的一个用于字符串处理的工具类; String类提供的行为方法; String类的特性; 参考api进行学习; 字符串在java中使用双引号引出,可以有任意个字符构成,字符char类型使用单引号引出,且只有一个字符; 1.1.1 String类 String类底层是字符数组存储;所有String类具有数组的特性; String字符串有下标索引,且从0开始;可以通过下标访问对应字符元素; String字符串一旦初始化之后,长度是固定的,是不能再扩展的; 1.1.2 String类的常用的方法 参阅api方法列表; 1.2 StringBuilder工具类 主要进行字符串的拼接操作处理; String和StringBuilder的区别: String是固定长度的,如果使用+连接多个字符串,则需要多次申请内存,效率较低; StringBuilder是存储的字符串是可以变长的,多个字符串进行拼接时效率较高;初始化长度是16,当然也可以初始化是制定长度; 如果是字符串进行拼接操作,有限使用StringBuilder,尽量避免使用+拼接; StringBuffer和StringBuilder一样,都是字符串处理的工具类;二者的使用是一样的; StringBuffer是线程安全的;StringBuilder是线程不安全的; 1.3 Object工具类 Object类是所有类的直接或者间接父类; 注意:子类从Object父类继承的方法以及子类可以重写的方法; equals方法在Object类中判定两个对象的引用地址是否相同;(Object判定方式:使用== 判定两个对象的地址引用的hashcode码是否相同) 但是在Object的子类中,所有的子类都重写了equals方法,equals方法的功能就转变:判定两个对象的内容是否相同; == 和 equals方法: == 判定两个对象的地址引用的hashcode码是否相同(是不是同一个对象)【地址引用】 equals方法判定两个对象内容是否相同;【对象内容】 1.4 Math类 数学运算工具类; 课下练习:将一个double类型的数字保留1位小数?如何实现? 1.5 Arrays工具类 主要是进行数组的处理; 使用数组的拷贝方法接口;用于数组的扩容。 1.6 Scanner工具 主要进行控制台输入;简单文本扫描器,也就是文本输入器; 1.7 包装类 包装类:将8种基本类型使用面向对象的思想进行封装,使8种基本类型支持面向对象的思想; 基本类型: byte short int long float double char Boolean 【不支持面向对象】 包装类: Byte Short Integer Long Float Double Character Boolean 【支持面向对象】 默认值都是null 拆箱:将包装类转变为基本类型; 装箱:将基本类型转变为包装类类型; 注意: 包装类类型和基本类型以及String类型之间的相互转换; 包装类就是把8种基本类型纳入面向对象的知识体系; 包装类的默认值为null,基本类型的默认值不为null; 软件工程原则:在抽象封装类的成员变量时,如无特殊要求,则使用包装类类型;【包装类类型默认值是null】 ``` 2. 异常 ```aidl 2.1 异常概念 异常,就是发生非正常的情况; 错误:错误发生时程序是无法继续运行的; 异常:异常发生时程序可以继续运行; 异常和错误都继承了Throwable类; 异常的父类是Exception,错误的父类是Error类型,他们都继承自Throwable类; 2.2 异常的分类 Exception类是所有异常类的直接或间接父类; 根据异常在编译阶段是否进行处理: 检查性异常:要求编程时就需要显式进行异常处理; 非检查性异常:编程时不需要显式进行处理,可以通过编程逻辑严密性避免发生异常; 根据异常发生的时机: 编译时异常:就是检查性异常; 运行时异常:非检查性异常; 2.3 异常的处理机制 在编程时对异常进行显式的处理; 2.3.1 try-catch-finally机制 语法: try{ // 可能发生异常的语句块 }catch(发生的异常类型 变量名){ // 进行异常处理 }catch(发生的异常类型2 变量名2){ // 进行异常处理 }catch(发生的异常类型n 变量名n){ // 进行异常处理 }finally{ // 收尾工作 } 解析: try中是可能发生异常的语句块,或者是必须进行异常处理的语句块; catch是用于对发生的异常的处理逻辑;括号中是声明当前catch块可以处理的异常类型; catch可以有多个;从前往后多个catch处理的异常类型的范围是从小到大的;【先子类类型的异常,后父类类型的异常】 多个catch块之间是互斥的,发生异常之后,只执行其中一个,其他不会被执行;【类似于if-else的互斥关系】 Exception是所有异常的父类,一般放在多个catch的最后位置; finally是进行收尾工作处理的; finally语句块可有可无,如果有finally语句块,无论是否发生异常,则都会被执行; catch (FileNotFoundException|NullPointerException e)变形的写法,要求 | 前后的异常类不能是父子类的包含关系; 2.3.2 throws处理机制 在方法声明的同时使用throws将方法体内的代码块可能发生的异常进行抛出;抛出之后由方法的上层调用者来进行处理; 如果一直向上抛出异常,则最后由jvm来处理; 2.4 throw的用法-手动制造异常 使用throw可以在编码时,主动抛出一个异常,一般用于方法调用之间的一些通信处理; 语法: throw new 抛出的异常类(构造参数列表); 2.5 自定义异常 自定义异常通过继承Exception类或其子类,通过重写的方式,实现自定义异常类; ``` 3. 集合 ```aidl 3.1 集合概念 集合:就是一组数据的集合体;这组数据可能类型相同,也可以能类型不同;可能连续,也可能不连续; 常用的集合由Collection和Map接口衍变而来; 学习集合从以下几个方法进行对比学习: 是否重复? 集合中的元素是否可以重复 是否为null?集合中的元素是否可以存储null值 是否有序?集合中存入时元素的顺序和遍历取出时的顺序是否一致,一致成为有序;不一致成为无序 是否排序?集合中的元素在遍历取出时是否按照自然排序规则进行了排序? 【自然数排序、字典排序】 3.2 Collocation接口的实现类 主要的实现类或者子接口:Set、List、Queue 3.2.1 Set接口 Set接口中的集合是一个不包含重复元素的集合; Set集合中的元素没有下标,不能像数组一样采用下标方式进行遍历了; HashSet:底层存储结构是Hash表; 是否重复? 否 是否为null?是 是否有序?否 是否排序?否 遍历方式:foreach遍历、Iterator迭代器遍历 LinkedHashSet:底层存储结构是双向链表; 是否重复? 否 是否为null?是 是否有序?是 是否排序?否 遍历方式:foreach遍历、Iterator迭代器遍历 TreeSet:底层存储结构是树型存储(红黑树、b+树的一种); 是否重复? 否 是否为null?否 是否有序?否 是否排序?是 遍历方式:foreach遍历、Iterator迭代器遍历 总结: Set集合的实现类的特性和其子类的底层的数据结构相关: Hash表存储结构:不重复、无序、可以为null、不排序 双向链表存储结构:不重复、有序、可以为null、不排序 红黑树存储结构:不重复、无序、不可以为null、排序 3.3 Map接口 主要是实现类或子接口:HashMap、TreeMap、LinkedHashMap ``` #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)