异常
- 编译时异常
必须要处理,两种处理方案:
- try … catch …
- throws,throws + 异常类名 跟在方法的括号后面。如果采用throws,即抛出异常,将来谁调用谁来处理
- 运行时异常
可以不处理,出现问题后再修改代码,也可以像编译时异常进行处理。 - throw 和 throws的区别
- throws用在方法声明后面,跟的是异常类名,表示抛出异常,由该方法的调用者来处理。表示出现异常的一种可能性,并不一定发生这些异常。
2)throw用在方法体内,跟的是异常对象名,表示抛出异常,由方法体内的语句处理。执行throw一定抛出了某种异常。
集合
(其中单列、双列理解为:单独数据,数据对)
-
List允许集合元素重复,作为接口,通过其子类ArrayList,LinkedList实例化
ArrayList 类似数组,查找快,增删元素慢
LinkedList类似链表,查找慢,增删快 ,实现了List和Deque接口,Deque是支持两端元素插入和移除的线性集合,名称deque是“双端队列”的缩写,通常发音为“deck”。(做算法题要用到栈或者队列工具,都采用Deque) -
Set不允许集合元素重复,作为接口,通过其子类HashSet、TreeSet 实例化。
HashSet 底层数据结构是哈希表,没有带索引的方法,集合中元素顺序不作保证,但保证不含重复元素。不能使用普通for循环遍历,但可以通过迭代器或者增强for遍历。HashSet保证元素唯一性是通过 hashCode() 和 equals() 方法实现的。LinkedHashSet 可以保证元素唯一并有序(指按存储顺序排序)
TreeSet 中元素唯一且有序,但不是根据元素存储顺序,而是根据构造方法的比较器进行排序,无参构造默认按元素自然排序进行排序。
自然排序:就是让元素所属的类实现Comparable< E >接口,重写compareTo(T o)方法,重写方法时要注意排序规则的主要和次要条件。
//无参构造,TreeSet内元素所属类实现Comparable<E>接口,并重写compareTo方法
@Override
public int compareTo(Student stu) {
//按年龄升序排列,年龄相同按姓名字典序升序
int num = this.age - stu.age;
num = num == 0 ? this.name.compareTo(stu.name) : num;
return num;
}
//带参构造TreeSet
TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {//比较器
@Override
public int compare(Student o1, Student o2) {
int num = o1.getAge() - o2.getAge();
num = num == 0 ? o1.getName().compareTo(o2.getName()): num;
return num;
}
});
-
Map ( Interface Map<K,V>)
将键映射到值;不能包含重复的键;每个键可以映射到最多一个值。
具体的实现类HashMap,常用方法可在帮助文档中查看。 -
可变参数
可变参数指的是参数个数可变,用 数据类型 + … 的形式定义参数,需要注意的是,当方法中包含可变参数和其他参数时,要把其他参数写在前面。
public class Demo {
public static void main(String[] args) {
System.out.println(sum(1,2,1,3,1));
}
public static int sum(int... a) { //a其实是一个数组
int sum = 0;
// for (int i = 0; i < a.length; i++) {//这样写也是可以的
// sum += a[i];
// }
for(int i : a) {
sum += i;
}
return sum;
}
public int test1(int a, int... b) {
return 0;
}
public int test2(int... a, int b) { //编译错误
return 0;
}
}