for-each 循环
=====================================
* 数组遍历、集合迭代遍历
的语法简化
* 数组
for(int i=0;i<a.length;i++) {
String s = a[i];
// 处理 s
}
for-each简化语法:
for(String s : a) {
// 处理 s
}
* 集合
for(Iterator<String> it = list.iterator(); it.hasNext();) {
String s = it.next();
// 处理 s
}
for-each简化语法:
for(String s : list) {
// 处理 s
}
可变长参数
=====================================
* 对数组参数的语法简化
* 本质是数组
void f(int[] a) {
// 处理数组 a
}
f(new int[]{5,23,5,4,2});
f(new int[]{});
----可变长参数----
void f(int... a) {
// 处理数组 a
}
f(2,4,1,2,5);
f(2,5,5,3,32,2,6,7,8,4,3,345,5);
f(2);
f();
泛型
=====================================
* 是一种类型参数
class A<T> {
T t;
void f1(T t) {
}
T f2() {
}
}
A<Date> a = new A<>();
* 泛型不支持基本类型
枚举 enum
=====================================
* 一组固定选项
* enum 代替 class 关键字
enum Type {
COLD, HEAT, NUCLEAR
}
*) 这三个选项,
本质是 Type 类型的对象
class Type {
public static final Type COLD = new Type();
public static final Type HEAT = new Type();
public static final Type NUCLEAR = new Type();
}
异常
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* 封装错误信息的对象
*) 类型名称
*)提示消息
*)行号
* 继承结构
Throwable
|— Error 系统即错误 java运行时环境出现的错误,如:JVM内存资源耗尽
|— Exception可修复的错误,网络故障、文件损坏、输入非法等导致的错误
|— 其他Exception
|— RuntimeException
|— NullPointerException
|— ArrayIndexOutOfBoundsException
|— ArithmeticException
|— NumberFormatException
|— InputMismatchException
* 捕获异常
*) 目的:当异常发生时妥善的终止程序,避免灾难性后果发生
*) a具体操作:1) 通知:向用户通知异常的发生
2) 恢复:保存重要数据、关闭文件,回滚事务等
3)退出:以恰当的形式退出程序
Try{
可能抛出异常的代码
} catch (AException e){// 捕获AException 类型的对象, 赋给变量e
getMessage() 得到有关异常事件的信息
printStackTrace() 跟踪异常事件发生时执行堆栈内容
在这里修复异常,使程序继续执行
} finally {
不论出不出错都执行
}
* RuntimeException
有默认抛出管道
*) RuntimeException 及其子类型 都可以从默认管道抛出
*) 其他Exception 要添加抛出管道才能抛出, 如果不添加管道,必须捕获
* throws
*) 添加指定异常的抛出管道
*) 程序中会定义许多方法,这些方法中可能会因某些错误而引发异常,但是我们不希望直接在这个方法中处理这些异常,而希望调用这个它的方法来统一处理,这时候我们可以使用“throws”关键词来声明这个方法将会抛出异常
Void f() throws AException,BException {
}
*
* throw
手动抛出异常对象
AException e = new AException();
throw e;
* 异常包装
捕获到一个异常对象, 然后封装在另一个异常对象中, 再抛出
* 自定义异常
*) 自定义异常类型,来表示业务相关的异常
ZhuanZhangException
UsernameNotFoundException
WrongPasswordException
*) 步骤:
1) 起名字 (最好能通过名字看出是什么异常)
2) 继承一个合适的父类型
3) 添加合适的构造方法