異常
在java.lang包中,有一個(gè)叫做Throwable的類,它有兩個(gè)子類Exception以及Error,兩者都是Java異常處理重要的子類,包含大量子類以及方法,也可以通過繼承Exception自定義異常
異常為程序本身可以處理的問題,而錯(cuò)誤會(huì)導(dǎo)致程序崩潰或者災(zāi)難性后果.
如果一個(gè)方法有可能出現(xiàn)異常,需要聲明并拋出一個(gè)異常.
在方法調(diào)用時(shí),需要去嘗試捕獲這個(gè)異常并進(jìn)行處理.
/**
*三角形異常案例,三條邊長大于零且任意兩條邊之和大于第三邊的三條邊能組成三角形.
*所以在實(shí)際編程時(shí),要對這三條邊加以約束,當(dāng)條件不符合時(shí)要拋出異常,給予提示.
*/
//三角形異常類,成員變量為要輸出的異常信息以及三角形的三邊.
class TriangleException extends Exception{
private String info;
private int x,y,z;
public TriangleException(String info,int x,int y,int z){
this.info=info;
this.x=x;
this.y=y;
this.z=z;
}
public String getInfo(){
System.out.println("x:"+x+" y:"+y+" z:"+z);
return this.info;
}
}
//三角形類,成員變量為三角形的三條邊長
class Triangle{
private int x,y,z;
//由于構(gòu)造方法需要對三邊進(jìn)行初始化,所以可能會(huì)有異常,要進(jìn)行拋出
public Triangle(int x,int y,int z)throws TriangleException{
if(x<=0||y<=0||z<=0){
//拋出異常變量(攜帶異常信息以及三條邊長)
throw new TriangleException("邊長不能小于0!",x,y,z);
}else if (x+y<=z||x+z<=y||z+y<=x) {
throw new TriangleException("兩邊之和要大于第三邊!",x,y,z);
}else{
this.x=x;
this.y=y;
this.z=z;
}
}
//由于set方法需要對三邊進(jìn)行賦值,所以可能會(huì)有異常,要進(jìn)行拋出
public void setXYZ(int x,int y,int z)throws TriangleException{
if(x<=0||y<=0||z<=0){
//拋出異常變量(攜帶異常信息以及三條邊長)
throw new TriangleException("邊長不能小于0!",x,y,z);
}else if (x+y<=z||x+z<=y||z+y<=x) {
throw new TriangleException("兩邊之和要大于第三邊!",x,y,z);
}else{
this.x=x;
this.y=y;
this.z=z;
}
}
}
class TriangleDemo{
//入口點(diǎn)
public static void main(String[] args){
//由于在初始化一個(gè)對象時(shí),傳入三邊可能發(fā)生異常,所以需要try
try{
Triangle a = new Triangle(3,4,5);
}
//將捕獲的異常對象進(jìn)行處理,打印對象的info信息
catch(TriangleException e){
System.out.println(e.getInfo());
}
try{
Triangle b = new Triangle(1,2,3);
}
catch(TriangleException e){
System.out.println(e.getInfo());
}
try{
Triangle c = new Triangle(-1,2,4);
}
catch(TriangleException e){
System.out.println(e.getInfo());
}
}
}
結(jié)果:
x:1 y:2 z:3
兩邊之和要大于第三邊!
x:-1 y:2 z:4
邊長不能小于0!