在理想状态下,用户输入的格式永远的正确,选择打开的文件也一定存在,并且永远不会出现BUG,但是在现实世界中充满了许多有问题的数据与代码,所以就要处理这些问题。这就是java异常的来源。
异常分为:受查异常与非受查异常。
受查异常:不知道有没有,对不对的错误数据或代码,无法把控的错误。
非受查异常:知道是什么错误,是什么类型的错误。
例子:
package learning20180820;
/**
*
* 一些异常
*/
public class SomeExceptions {
//字符串转整形——类型转换异常
public static int stringToInt(String str) throws Exception{
int tt = 0;
try{
tt = Integer.parseInt(str);
}catch(Exception e){
throw new Exception("stringToInt的参数:"+str+" 格式错误导致异常发生!");
}
return tt;
}
//查找数组中第10个数——数组越界异常
public static int selectNumFormArray(int[] a) throws Exception{
try{
return a[10];
}catch(Exception e){
throw new Exception("selectNumFormArray的参数:"+a+"导致异常发生!");
}
}
//去除字符串首尾空格——空指针异常
public static String deleteSpace(String str) throws Exception{
try{
return str.trim();
}catch(Exception e){
throw new Exception("deleteSpace的参数:"+str+"导致异常发生!");
}
}
//除法运算——除数为零异常
public static int invide(int a,int b) throws Exception{
try{
return a/b;
}catch(Exception e){
throw new Exception("invide的参数:"+b+"导致异常发生!");
}
}
//打印年龄——代码逻辑异常
public static void sayYourAge(int age) throws Exception{
if((age < 0) || (age > 100)){
throw new Exception("年龄小于0或者大于100了!");
}
System.out.println("你的年龄是"+age);
}
}
package learning20180820;
/**
*
*查看方法状态
*/
public interface MethodsInterface {
MessageData<Car> tellStation();
}
package learning20180820;
public class UseMethods implements MethodsInterface {
public MessageData<Car> tellStation() {
// TODO Auto-generated method stub
//创建返回数据对象
MessageData<Car> md = new MessageData<>();
try{
//空指针异常
SomeExceptions.deleteSpace(" ");
//除数为零异常
SomeExceptions.invide(10, 1);
//代码逻辑异常
SomeExceptions.sayYourAge(-100);
//数组越界异常
int[] a = {1};
SomeExceptions.selectNumFormArray(a);
//类型转换异常
SomeExceptions.stringToInt("fasf");
}catch(Exception e){
//创建汽车对象
Car shifeng = new Car("时风");
//封装返回对象
md.setData(shifeng);
md.setCode(444);
md.setMessage(e.getMessage());
return md;
}
Car baoma = new Car("宝马");
//封装返回对象
md.setData(baoma);
md.setCode(888);
md.setMessage("你成功获得一辆宝马!");
return md;
}
}
package learning20180820;
public class MessageData<T> {
private T data;
private String message;
private int code;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
@Override
public String toString() {
return "MessageData [data=" + data + ", message=" + message + ", code=" + code + "]";
}
}