异常一种是try-catch还有一种就是函数后面直接跟个throws声明抛出异常public class MinusAgeException extends Throwable {
public MinusAgeException(){}
public MinusAgeException(int age) {
if(age<0) System.out.println("年龄为负数!错误!");
}
}这个自己写的年龄为负数就抛出异常的类 如果我函数后面比如public void f()throws MinusAgeException{....}
这样声明函数可能抛出异常我就不能给参数了,是不是如果要给构造器参数只能用try-catch?这样我catch里面可以用有参构造器new一个对象
public MinusAgeException(){}
public MinusAgeException(int age) {
if(age<0) System.out.println("年龄为负数!错误!");
}
}这个自己写的年龄为负数就抛出异常的类 如果我函数后面比如public void f()throws MinusAgeException{....}
这样声明函数可能抛出异常我就不能给参数了,是不是如果要给构造器参数只能用try-catch?这样我catch里面可以用有参构造器new一个对象
public void f()throws MinusAgeException{
new MinusAgeException(-1);//这样就有一个异常抛出了
}
恩恩 理解了 原本上理解有点错误 那么如果采用try-catch这种方法 要在catch里面处理的时候抛出异常是这么写么:
try{
....
}catch(MinusAgeException e){
...
}然后这里我就有个疑问了catch里面如果写e=new MinusAgeException (age);好像就报错了哎
try {
throw new MinusAgeException();//需要有异常抛出,才能catch
} catch (MinusAgeException e) {
e = new MinusAgeException(-1);
e.printStackTrace();
}
}
}class MinusAgeException extends Throwable {
public MinusAgeException() {
} public MinusAgeException(int age) {
if (age < 0)
System.out.println("年龄为负数!错误!");
}
}
throw new MyException();//这是我自己写的异常类,继承了
//Exception,不是运行时异常,
//所以必须在方法声明中声明抛出异常
}
public void b(){
throw new MyRuntimeException();//这是一个运行时异常,不用在方法声明中声明
}
public void c(){
try{
throw new MyException("抛出一个异常");//非运行时异常如果不在方法声明中声明,
//则必须用try..catch进行捕捉
}catch(MyException e){
System.out.println("An error accident....");
}
}
public void d(){
try{
throw new MyRuntimeException("抛出一个运行时异常");//运行时异常可以捕捉,也可以不捕捉
}catch(MyRuntimeException e){
System.out.println("An error accident......");
}
}
public void e() throws MyException{
try{
throw new Exception("抛出一个异常");
}catch(Exception e){
System.out.println("记录日志");//这是一个在实际项目中的常用方法,即捕捉所有异常,
throw new MyException(e);//然后将其包装在项目自己写的异常类中抛出。这么做的作用是为了方便记录日志,统一管理
}
}