报名学习开课吧Java商业项目实战就业班

每周一报的时间又到了!!!首先总结一下上周学习的内容。

一、异常处理

1.1 异常是什么? 异常是在程序中导致程序中断运行的一种指令流。所以我们想要程序正常运行,就必须对可能或者已经出现的异常进行处理。

1.2 try+catch处理异常  标准格式如下:

 try{ // 有可能发生异常的代码段 }

catch(异常类型1 对象名1){ // 异常的处理操作 }

catch(异常类型2 对象名2){ // 异常的处理操作 }

finally{ // 异常的统一出口 (不管是否产生 了异常,最终都要执行此段代码。)}

 1.3 异常体系结构

 Error是JVM发出的错误操作,只能避免,无法用代码处理。而Exception指的就是我们所说的异常。

RuntimeException与Exception的区别:

 

1.4 throws和throw 

throws主要在方法的声明上使用,表示方法中不处理异常,而是交给调用处处理。格式如下:

 

throw关键字表示在程序中人为的抛出一个异常,因为从异常处理机制来看,所有的异常一旦产生之后,实际上抛出 的就是一个异常类的实例化对象,那么此对象也可以由throw直接抛出。

 1.5 自定义异常

1.6 有关异常处理的常见面试题

①try-catch-finally中可以省略catch和finall中的一个,单不可同时省略。

② try-catch-finally中如果catch中执行了return语句,finally中的代码依旧会执行。详解如下:

二、常用类库

2.1 泛型

 泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定 义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

①泛型类

②泛型接口 

③泛型方法

 

④泛型限制类型

 <T extends 类或接口 1 & 接口 2>  限制T的类型

泛型中的通配符 ?

2.2 常用类库

① java.util.Objects  此类包含static实用程序方法,用于操作对象或在操作前检查某些条件

② java.lang.Math  类Math包含用于执行基本数字运算的方法,例如基本指数,对数,平方根和三角函数

③ java.util.Arrays 该类包含用于操作数组的各种方法(例如排序和搜索)。 此类还包含一个静态工厂,允许将数组视为列表。

④ java.math.BigDecimal BigDecimal类提供算术,比例操作,舍入,比较,散列和格式转换的操作。

⑤ java.util.Date Date类表示特定的时刻,精度为毫秒。

⑥ java.text.DateFormat DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化和分析日期或时间。提供了许多类方法,用于根据默认或给定的区域设置和多种格式样式获取默认日期/时间格式化程序。也可帮助您格式化和解析任何区域设置的日期。

⑦ java.util.Calendar Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fieldsYEARMONTHDAY_OF_MONTHHOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。

⑧ java.lang.System System类包含几个有用的类字段和方法。 它无法实例化。 System类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。

⑨ java.lang.String String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。字符串是不变的; 它们的值在创建后无法更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,所以可以共享它们。

三、集合

3.1 类集概述

在 Java 中为了方便用户操作各个数据结构, 所以引入了类集的概念,有时候就可以把类集称为 java 对数据结构的实现。

3.2 常见的数据结构

数据存储的常用结构有:栈、队列、数组、链表和红黑树。

① 栈:stack,又称堆栈,栈(stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许插 入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。栈又称为先进后出 的线性表 。

② 队列:queue,简称队, 队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的 一端进行插入,而在另一端进行删除元素的线性表(先进先出)。队尾(rear)是允许插入的一端。队头(front)是 允许删除的一端。空队列是不含元素的空表。

③ 数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。就 像是一排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到 租房子的人。(查找快、增删慢)

④ 链表:[Linked List]:,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域(有时还会拥有存储上一个结点地址的指针域的部分)。我们常说的链表结构有单向链表、双向链表、循环链表。(空间没有限制,插入删除元素很快,但存取速度慢)

⑤ 二叉树:binary tree ,是每个结点不超过2的有序树(tree) 。 简单的理解,就是一种类似于我们生活中树的结构,只不过每个结点上都最多只能有两个子结点。 二叉树是每个节点最多有两个子树的树结构。顶上的叫根结点,两边被称作“左子树”和“右子树”。如图:

 而红黑树又是二叉树中的一种特殊情况:当前根节点的左边全部比根节点小,当前根节点的右边全部比根节点大。

.二叉树的遍历方式 二叉树的遍历方式,一般分为先序遍历,中序遍历,后序遍历。

3.3 Collection 

Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法, 这些方法可用于操作所有的单列集合。方法如下:

 3.4 List接口 

List 接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行 存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有 序,即元素的存入顺序和取出顺序一致。List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元 素索引来操作集合的特有方法,如下:

 

 3.5 ArrayList

java.util.ArrayList 集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用 最多的功能为查询数据、遍历数据,所以 ArrayList 是最常用的集合。

3.6 Vector

Vector的操作与使用 与ArrayList 大致相同,其主要区别如下:

3.7 LinkedList

java.util.LinkedList 集合数据存储的结构是链表结构。方便元素添加、删除的集合。其为我们提供了大量首尾操作的方法,常见方法如下: 

 3.8 Iterator与ListIterator

Iterator 接口也是Java集合中的一员,但它与 Collection 、 Map 接口有所 不同, Collection 接口与 Map 接口主要用于存储元素,而 Iterator 主要用于迭代访问(即遍历) Collection 中的元素,因此 Iterator 对象也被称为迭代器。

获取迭代器的方法:public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素的。

Iterator接口的常用方法如下:

public E next() :返回迭代的下一个元素。

public boolean hasNext() :如果仍有元素可以迭代,则返回 true。

ListIterator 是可以进行双向输出的迭代接口,此接口中定义了以下的方法:

 

3.9 forEach

又称增强for循环,专门用来遍历数组和集合的。它 的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。格式如下图:

3.10 Set 

java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与 List 接口不同的是, Set 接口中元素无序,并且都会以某种规则保 证存入的元素不出现重复。 

3.11 HashSet与Comparable

HashSet 属于散列的存放类集,里面的内容是无序存放的。java.util.HashSet 底层的实现其实是一个 java.util.HashMap支持。HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证 元素唯一性的方式依赖于: hashCode 与 equals 方法。

注意:给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方 式,才能保证HashSet集合中的对象唯一。

3.12 TreeSet 与Comparable

TreeSet 本身属于排序的子类(即虽然在增加元素的时候属于无序的操作,但是增加之后却可以为用户进行排序功能的实现。)如果用于存储自定义类,还想达到可以自动排序的效果,则必须在自定义类中实现 Comparable 接口。

3.13 Comparator

如果在使用的时候,想要独立的定义规则去使用 可以采用Collections.sort(List list,Comparetor c)方 式,自己定义规则如下:

3.14 Map

以上的 Collection 中,每次操作的都是一个对象,如果现在假设要操作一对对象,则就必须使用 Map 。里面的所有内容都按照 keyvalue 的形式保存,也称为二元偶对象。此接口定义如下:public interface Map<K,V>,此接口常用方法如下:

 3.15 哈希表

在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一 个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率 较低。而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8时,将链表转换为红黑树,这样大大减少了查找时间。当链表长度减少为阈值(6)时,又会重新吧红黑树转换为链表。如下图所示:

 

 3.16 HashMap

此类继承了 AbstractMap 类,同时可以被克隆,可以被序列化下来。

3.17 关于Map集合的输出

在 Collection 接口中,可以使用 iterator()方法为 Iterator 接口实例化,并进行输出操作,但是在 Map 接口中并没有此 方法的定义,所以 Map 接口本身是不能直接使用 Iterator 进行输出的。

因为 Map 接口中存放的每一个内容都是一对值,而使用 Iterator 接口输出的时候,每次取出的都实际上是一个完整的 对象。如果此时非要使用 Iterator 进行输出的话,则可以按照如下的步骤进行:

1、 使用 Map 接口中的 entrySet()方法将 Map 接口的全部内容变为 Set 集合

2、 可以使用 Set 接口中定义的 iterator()方法为 Iterator 接口进行实例化

3、 之后使用 Iterator 接口进行迭代输出,每一次的迭代都可以取得一个 Map.Entry 的实例

4、 通过 Map.Entry 进行 key 和 value 的分离。

Map.Entry 本身是一个接口。此接口是定义在 Map 接口内部的,是 Map 的内部接口。此内部接口使用 static 进行定义, 所以此接口将成为外部接口。 实际上来讲,对于每一个存放到 Map 集合中的 key 和 value 都是将其变为了 Map.Entry 并且将 Map.Entry 保存在了 Map 集合之中。如下图所示:

 在 Map.Entry 接口中以下的方法最为常用:

 

以上就是上周所学习的全部内容,内容量还是比较庞大的,平时要多去运用这些常用类库以及JDK自带的类集,这样才能更好地理解去消化。 

加油吧!努力地朝着自己的目标而奋斗!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值