Java异常
Throwable有两个重要的子类:Error、Exception
- Error:较为严重的错误,一般指JVM之类的错误或内存泄漏等错误
Exception
抛出异常
- 捕捉异常
- 异常处理
- try:执行可能产生异常的代码
- catch:捕获异常
- finally:无论是否发生异常代码总能执行
- throw:手动抛出异常
- throws:声明可能要抛出的异常
- throw&throws
- 可以通过throws声明要抛出何种类型的异常,通过throw将产生的异常抛出
- 方法可以不处理可能存在异常的代码,将异常抛出给调用该方法的人去处理该异常(try-catch-finally)
- 如果是unchecked Exception,那么可以不使用throws声明要抛出的异常,编译通过,但运行时会被系统抛出
- checked Exception必须处理异常或重新抛出异常,否则编译报错
- 方法抛出的异常,该方法的调用者必须处理或重新抛出异常
- 子类重写父类抛出异常的方法时,声明的异常必须是父类方法所声明异常的父类或子类
- throw用来抛出异常 ```java public void method() throws Exception1,Exception2,…,ExceptionN{ //可能产生异常的代码 }
public void method() throws 异常类型{ //代码段 throw new 异常类型(); }
<a name="Kb4wf"></a>
### 自定义异常
- 对于特定业务可以自定义异常来处理
- 定义一个类去继承Throwable类或其子类
```java
public class MyException extends Throwable{
public MyException(){
super("自定义异常类");
}
}
异常链
- 有时候我们会捕获一个异常再抛出一个新的异常
- 将异常发生的原因一个传一个串起来,即把底层的信息传给上层,这样逐层抛出
Throwable的构造方法可以传一个cause接收上层的异常信息
Java包装类
包装类与基本数据类型
装箱
- 自动装箱:Integer n = 10;
- 手动装箱:Integer n = valueOf(10);
拆箱
基本数据类型 -> 字符串:使用包装类的toString()方法
字符串 -> 基本数据类型
String s1 = “Hello”;
- String s1 = new String();
String s1 = new String(“Hello”);
String对象的常用方法
==和equals()方法的区别
字符串的不可变性
String && StringBuffer && StringBuilder
String不可变,StringBuffer、StringBuilder可变
- 当对字符串频繁操作时使用StringBuffer或StringBuilder
- StringBuffer和StringBuilder二者基本相似
- StringBuffer线程安全,StringBuilder线程不安全
- StringBuilder > StringBuffer(速度)
常用方法
List是元素有序且可以重复的集合,称为序列
- List可以精确控制元素插入的位置和删除某个位置的元素
-
ArrayList
底层是数组
- 动态增长
- 尾部插入删除非常有效
- 适合查看和更新元素
-
LinkedList
底层是链表
-
Set
HashSet
是Set的一个重要实现类,称为哈希集
- 无序且不可重复
- 只允许一个null元素
- 具有良好的存取和查找性能
-
Iterator(迭代器)
统一的方式对各种集合元素进行遍历(Collection)
- hasNext()检测是否还有下一个元素
next()返回下一个元素
Iterator<String> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next()+" ");
}
Map
键值对形式存储(key-value)
- key-value以Entry类型的对象实例存在
- 可以通过key找到value
- 一个映射不能包含重复的键
-
HashSet
实现Map接口
- 允许使用null键和null值
- key不允许重复
-
集合排序
集合中的基本数据类型排序
使用Collections类中sort()方法
sort(List
list) - 根据元素的自然顺序对指定列表按照自然升序进行排序 集合中的字符串排序
同样和基本数据类型排序一样:使用Collections类中sort()方法
Comparator接口
可以自定义一个比较器
- 强行对某个对象进行整体排序的比较函数
可以将Comparator传递给sort方法(如Collections.sort()或Arrays.sort())
public Class Cat{
private int age;
private String name;
...
}
public CatComparator implements Comparator<Cat>{
public int compare(Cat c1, Cat c2){
return c1.age - c2.age;
}
}
public static void main(String[] args){
List<Cat> list = new ArrayList<Cat>;
Iterator it = list.iterator();
while(it.hasNext()){
System.out.print(it.next() + " ");
}
//这里的比较器可以写成匿名内部类的形式
Collections.sort(list,new CatComparator());
it = list.iterator();
while(it.hasNext()){
System.out.print(it.next() + " ");
}
}
Comparable接口
需要排序的类实现Comparable接口,并重写compareTo方法
- 类的compareTo方法被称为它的自然比较方法
- 对于集合,通过调用Collections.sort方法
- 对于数组,通过调用Arrays.sort方法
public Class Cat implements Comparable<Cat>{
private int age;
private String name;
....
public int compareTo(Cat c){
return this.age - c.age;
}
}