package fighting;
/**
* 因为项目中会出现特有的问题,
* 而这些问题并未被java所描述并封装对象,
* 所以对于这些特有的问题可以按照java的对问题封装的思想。
* 将特有的问题,进行自定义的异常封装。
*
* 需求:在本程序中,对于除数是负数,也视为是错误的是无法进行运算的,
* 那么就需要对这个问题进行自定义的描述。
*
*
*
*/
public class ExceptionDemo {
public static void main(String[] args) {
DivArithmetic da= new DivArithmetic();
try {
int x = da.div(4, -1);
System.out.println("x="+x);
} catch (NagetiveNumberException e) {
System.out.println(e.toString());
}
}
}
class DivArithmetic{
//当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
//要么在内部try..catch树立,要么在函数上声明让调用者处理。
//一般情况下,函数内出现异常,函数上需要声明。
int div(int a,int b) throws NagetiveNumberException{
/**
* 自定义异常,需要手动
* java异常可以自动抛出,也可以手动抛出
*/
if(b<0){
throw new NagetiveNumberException();//手动通过throw关键字抛出一个自定义异常对象
}
return a/b;
}
}
class NagetiveNumberException extends Exception{
}
程序的运行结果是:fighting.NagetiveNumberException
发现e.toString()方法,返回的只有异常的名称,没有异常信息。
那么如何给自定义异常添加异常信息呢?
package fighting;
/**
* 因为项目中会出现特有的问题,
* 而这些问题并未被java所描述并封装对象,
* 所以对于这些特有的问题可以按照java的对问题封装的思想。
* 将特有的问题,进行自定义的异常封装。
*
* 需求:在本程序中,对于除数是负数,也视为是错误的是无法进行运算的,
* 那么就需要对这个问题进行自定义的描述。
*
*
*
*/
public class ExceptionDemo {
public static void main(String[] args) {
DivArithmetic da= new DivArithmetic();
try {
int x = da.div(4, -1);
System.out.println("x="+x);
} catch (NagetiveNumberException e) {
System.out.println(e.toString());
}
}
}
class DivArithmetic{
//当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
//要么在内部try..catch树立,要么在函数上声明让调用者处理。
//一般情况下,函数内出现异常,函数上需要声明。
int div(int a,int b) throws NagetiveNumberException{
/**
* 自定义异常,需要手动
* java异常可以自动抛出,也可以手动抛出
*/
if(b<0){
throw new NagetiveNumberException("除数不能为负数");//手动通过throw关键字抛出一个自定义异常对象
}
return a/b;
}
}
class NagetiveNumberException extends Exception{
//自定义异常可以设置自己的异常信息
private String msg;
public NagetiveNumberException(String msg){
this.msg=msg;
}
public String getMessage(){
return msg;
}
}
程序运行结果是:fighting.NagetiveNumberException: 除数不能为负数
像上面这样自己在异常类中进行定义是可以的,但是发现Throwable方法Throwable(String message)构造方法,而且还有getMessage()方法,而Exception是throwable的子类,并且它的方法都是从父类继承而来。所以我们可以直接调用父类的构造方法。
package fighting;
/**
* 因为项目中会出现特有的问题,
* 而这些问题并未被java所描述并封装对象,
* 所以对于这些特有的问题可以按照java的对问题封装的思想。
* 将特有的问题,进行自定义的异常封装。
*
* 需求:在本程序中,对于除数是负数,也视为是错误的是无法进行运算的,
* 那么就需要对这个问题进行自定义的描述。
*
* 如何定义异常信息呢?
* 因为父类中已经把异常信息的操作都完成了,
* 所以子类只要在构造时,将异常信息传递给父类通过super语句,
* 那么就可以直接通过getMessage()方法获取自定义的异常信息。
*
*/
public class ExceptionDemo {
public static void main(String[] args) {
DivArithmetic da= new DivArithmetic();
try {
int x = da.div(4, -1);
System.out.println("x="+x);
} catch (NagetiveNumberException e) {
System.out.println(e.toString());
}
}
}
class DivArithmetic{
//当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
//要么在内部try..catch树立,要么在函数上声明让调用者处理。
//一般情况下,函数内出现异常,函数上需要声明。
int div(int a,int b) throws NagetiveNumberException{
/**
* 自定义异常,需要手动
* java异常可以自动抛出,也可以手动抛出
*/
if(b<0){
throw new NagetiveNumberException("除数不能为负数");//手动通过throw关键字抛出一个自定义异常对象
}
return a/b;
}
}
class NagetiveNumberException extends Exception{
//自定义异常可以设置自己的异常信息
/* private String msg;
public NagetiveNumberException(String msg){
this.msg=msg;
}
public String getMessage(){
return msg;
}*/
public NagetiveNumberException(){
super();
}
public NagetiveNumberException(String msg){
super(msg);
}
}
程序运行结果依然是:fighting.NagetiveNumberException: 除数不能为负数。
还可以在异常类中自定义属性和方法,打印自己需要的信息。
package fighting;
/**
* 因为项目中会出现特有的问题,
* 而这些问题并未被java所描述并封装对象,
* 所以对于这些特有的问题可以按照java的对问题封装的思想。
* 将特有的问题,进行自定义的异常封装。
*
* 需求:在本程序中,对于除数是负数,也视为是错误的是无法进行运算的,
* 那么就需要对这个问题进行自定义的描述。
*
* 如何定义异常信息呢?
* 因为父类中已经把异常信息的操作都完成了,
* 所以子类只要在构造时,将异常信息传递给父类通过super语句,
* 那么就可以直接通过getMessage()方法获取自定义的异常信息。
*
* 自定义异常:必须是自定义类继承Exception
* 为什么要继承Exception?
* 异常体系有一个特点:因为异常类和异常对象都需要被抛出,
* 他们都应具备可抛性,这个可抛性是Throwable这个体系中独有特点。
* 只有这个体系中的成员才能使用throws和throw操作。
*
*/
public class ExceptionDemo {
public static void main(String[] args) {
DivArithmetic da= new DivArithmetic();
try {
int x = da.div(4, -1);
System.out.println("x="+x);
} catch (NagetiveNumberException e) {
System.out.println(e.toString());
System.out.println("除数:"+e.getValue());
}
}
}
class DivArithmetic{
//当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
//要么在内部try..catch树立,要么在函数上声明让调用者处理。
//一般情况下,函数内出现异常,函数上需要声明。
int div(int a,int b) throws NagetiveNumberException{
/**
* 自定义异常,需要手动
* java异常可以自动抛出,也可以手动抛出
*/
if(b<0){
throw new NagetiveNumberException("除数不能为负数",b);//手动通过throw关键字抛出一个自定义异常对象
}
return a/b;
}
}
class NagetiveNumberException extends Exception{
//自定义异常可以设置自己的异常信息
/* private String msg;
public NagetiveNumberException(String msg){
this.msg=msg;
}
public String getMessage(){
return msg;
}*/
private int value;//自定义异常特有数据
public NagetiveNumberException(){
super();
}
public NagetiveNumberException(String msg,int value){
super(msg);
this.value=value;
}
public int getValue(){//自定义异常特有方法
return value;
}
}
运行结果:
fighting.NagetiveNumberException: 除数不能为负数
除数:-1