第二周预习(异常类和常用类,容器)
异常类
定义:程序运行时可能出现的错误,异常处理会改变程序控制流程。
java使用throw关键字抛出一个Exception子类实例表示异常发生,如
System.out.println(2/0);
常见异常:
NullPointerException :空指针引用异常
ClassCastException :类型强制转换异常。
IllegalArgumentException: 传递非法参数异常。
ArithmeticException :算术运算异常(除0)
ArrayStoreException :向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException: 下标越界异常
NegativeArraySizeException :创建一个大小为负数的数组错误异常
NumberFormatException :数字格式异常
SecurityException :安全异常
UnsupportedOperationException :不支持的操作异常
*try-catch语句:
格式:
try{
包含可能发生异常的语句。
}
catch(ExceptionSubClass1 e){
...
}
catch(ExceptionSubClass2 e){
...
}
finally()
每个catch参数中都是Excepttion的某个子类,表示try部分可能的异常,如果这些子类有父子关系则保留父类。
如:
public class Main {
public static void main(String args[]) {
int n = 0, m = 0, t = 1000;
try {
m = Integer.parseInt("8888");
n = Integer.parseInt("ab89");//发生异常,转向catch
t = 7777;//t没有机会被赋值
} catch (NumberFormatException e) {
System.out.println("发生异常:" + e.getMessage());
}
System.out.println("n=" + n + ",m=" + m + ",t=" + t);
try {
System.out.println("故意抛出I/O异常");
throw new java.io.IOException("我是故意的");//故意抛出异常
} catch (java.io.IOException e) {
System.out.println("发生异常:" + e.getMessage());
}
}
}
自定义异常类:
在编写程序时可以根据自己的需要扩展Exception类定义自己的异常类并用throw关键字说明产生异常的操作。
断言:
一般用于不希望通过抛出异常来处理的错误,如需要在发生错误是立刻停止,并且可以只在调试中执行调试完成后可以保留,利于后续调试。
实现:
assert booleanExpression;
//booleanExpression值为true继续执行,值为false停止执行
assert booleanExpression:messageException;
//booleanExpression值为true继续执行,值为false停止执行并输出messageException表达式的值
常用类
**String类:
常用方法
public int length():获取String对象的长度
public boolean equals(String s):比较当前String对象字符序列与参数s指定的String对象字符序列是否相同
public boolean startsWith(String s):判断字符序列前缀是否为参数s指定的对象的字符序列
public boolean endsWith(String s):判断字符序列后缀是否为参数s指定的对象的字符序列
public int compareTo(String s):按字典序与对象s的字符序列比较大小,相同返回0,大于s的字符序列返回正值,小于返回负值。
public boolean contains(String s):判断是否包含s的字符序列
public int indexOf(String s):从当前String对象的字符序列的0索引位置开始检索首次出现 str的字符序列的位置并返回该位置,没有检测到则返回-1.
public int IastIndexOf(String s):从当前String对象的字符序列的0索引位置开始检索最后一次出现 str的字符序列的位置并返回该位置,没有检测到则返回-1.
public String substring(int startpoint):获得一个新的String对象,新对象的字符序列是复制当前String对象字符序列中startpoint位置至最后位置上的字符得到的字符序列。
public String substring(int start,int end):获得一个新的String对象,新对象的字符序列是复制当前String对象字符序列中start位置至end-1位置上的字符得到的字符序列。
public String trim():获得一个新的String对象,新对象的字符序列是去掉前后空格后的字符序列。
StringTokenizer类:
StringTokenizer(String s):为String对象s构造一个分析器,使用默认的分隔标志(空格符,换行符,回车符,tab符,进纸符)
StringTokenizer(String s,String delim):为String对象s构造一个分析器,参数delim的字符序列的任意排列作为分隔标志
Scanner类
Scanner对象可以解析字符序列中的单词
StringBuffer类
与String类的区别
String对象的字符序列是不可修改、删除的,String对象的实体是不可能在发生改变的。
StringBuffer类对象的实体内存空间可以自动的改变大小,便于存放一个可变的字符序列。
Math类
Math类中包含许多用来进行科学计算的static方法
BigInteger类常用方法
用来处理特别大的整数
Random类
更为灵活的获得随机数
容器
一、常用容器)
Java容器分为两大阵营:Collection和Map
Collection:主要是单个元素的集合,由List、Queue、Set三个接口区分不同的集合特征,然后由下面的具体的类来实现对应的功能。
Map:有一组键值对的存储形式来保存,可以用键对象来查找值。
二、List
List的特点就是所有的元素是可以重复的。List接口在Collection的基础上增加了很多的方法。
List主要分为ArrayList和LinkedList,前者底层是使用数组实现的List,后者是使用链表实现的List。
Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在一个记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。
Stack是满足“后进先出”规则的容器,注意LinkedList可以实现所有的栈功能。
2.1 ArrayList
ArrayList是一个可以动态增长的数组。
Java中的数组一旦指定了长度就不可以改变,如果我们在业务中需要使用动态的数组,就可以使用ArrayList
ArrayList默认的长度是10,如果我们插入的数据超过了10,ArrayList会不断的自我增长,这一原理的实现我们会在以后介绍
ArrayList由于底层是使用数组实现的,所以随机访问速度快,插入删除较慢
toArray:把LinkedList转化为Array
2.2 LinkedList
LinkedList是使用链表实现的容器。
在列表中插入和删除速度快,但是查找需要遍历整个链表,速度较慢
使用LinkedList可以实现很多队列、栈的数据结构,并且有很多方法很类似,但是有细小的差别
getFirst和element都返回列表的头,但是不删除它,如果列表为空,抛出异常
peek实现的功能一样,但是列表为空时返回null
removeFirst和remove都是删除并返回列表的头,如果列表为空抛出异常
pool实现的功能一样,但是列表为空时返回null
使用LinkedList可以实现一个栈的功能,下面让我们写一个属于自己的栈
2.3Queue
队列是一个满足“先进先出”的数据结构。
LinkedList提供了方法支持队列操作,并且实现了Queue接口,所以LinkedList是队列的一种实现,可以通过LinkedList向上转型为Queue
offer:讲一个元素插入对尾
peek:不移除的情况下将元素插入队尾,队列为空返回null
element:不移除的情况下将元素插入队尾,队列为空报错
poll:移除并返回队头,队列为空返回null
remove:不移除的情况下将元素插入队尾,队列为空报错
PriorityQueue是优先级队列,我们暂时先不介绍
三、Set
set代表的是数学上的集合的意思,所以set中的元素不可以重复。
所以set中查找是最为重要的操作,而对于查找来说,我们最常用的就是HashSet
HastSet底层是使用散列函数,在查询的方面有优化
TreeSet底层使用的是红黑树
四、Map
Map是使用键值对存储的一种结构,所以在处理列如单词统计等方面是杀手锏
Map的键值对都可以为null
Map可以多维扩展。例如一个人拥有多个宠物,你可以这样定义:Map< Person, List< pet>>
Object put(Object key, Object value):放进一个键值对,返回值是被替换的值
Object remove(Object key)
void putAll(Map mapping)
void clear()
boolean containsKey(Object key)是否包含某个键
boolean containsValue(Object value)是否包含某个值
在Map中比较重要的是处理键值对的集合
public Set keySet():返回这个Map的所有键的集合,因为Map中键是唯一的,所以返回使用一个set
public Collection values():返回这个Map的所有值的集合,因为值可能重复,所以返回一个Collection
public Set entrySet():返回一个实现Map.Entry接口对象集合,使用这个方法可以遍历每一条记录。
遍历Map示范代