//定义声明抛出异常的方法
public static void method() throws ParseException{ //sf.parse(s)会抛出编译时异常ParseException,我们这里不处理,交给他人处理,
//所以用throws声明,交给调用者处理
//产生异常的准备 //运行时异常可以不用显式throws
String s = "1949-10-01";
DateFormat sf = new SimpleDateFormat("yyyy-MM!dd");
Date date = sf.parse(s);
System.out.println(1/0);
}
d.自定义异常类:目的为了见名知义
class 异常类名 extends Exception/RuntimeException{//继承Exception为编译时异常,继承RuntimeException为运行时异常
public 异常类名 (){
}
public 异常类名(String message){//当外部创建该自定义异常类的对象时候,可以传递一些对该异常的描述信息
}
}
class Demo{
public static void main(String[] args) {
//throw new 异常类名(对异常信息描述的字符串);//该异常对象由于在main方法中,被JVM调用,JVM会采用默认的处理机制
//直接打印到控制台上
try{
throw new 异常类名(对异常信息描述的字符串);
}catch(异常类名 e){
//处理代码
}
}
}
e.异常在继承中的注意事项:
class Father{
void method1()throws RuntimeException,NullPointerException{
}
void method2(){
}
}
class Son extends Father{
void method1()throws RuntimeException/NullPointerException/RuntimeException,NullPointerException{//只能throws父类异常子集,
//也可以不做任何声明
}
void method2(){
try{//只能做try..catch处理因为父类的method2没有throws任何异常
throw new ParseException();
}catch(Exception e){
}
3.finally与return语句:
public int method2() {
//定义返回值
int i = 100;
//产生异常的准备
String s = "1949-10-01";
DateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sf.parse(s);
//返回路径:每次碰到return就会在返回路径中临时存储这个被返回的值,无论方法内有任何的改变,返回路径中的这个值一致不变。
return i;
/*
//相当于以下三行代码
int temp=i;//temp=100;
i=200;
return temp;//100
*/