自定义异常方法
Java标准库:
Exception
│
├─ RuntimeException
│ │
│ ├─ NullPointerException
│ │
│ ├─ IndexOutOfBoundsException
│ │
│ ├─ SecurityException
│ │
│ └─ IllegalArgumentException
│ │
│ └─ NumberFormatException
│
├─ IOException
│ │
│ ├─ UnsupportedCharsetException
│ │
│ ├─ FileNotFoundException
│ │
│ └─ SocketException
│
├─ ParseException
│
├─ GeneralSecurityException
│
├─ SQLException
│
└─ TimeoutException
一般抛出异常直接使用JDK定义类型,在大型项目中,我们可能会遇到标准异常无法表示的问题,这时我们就可以自定义异常来满足自己的使用需求。
步骤
- 必须继承自一个Exception(受检异常或者说编译异常) 或者一个RuntimeException(非受检异常,编译异常,运行时报错,抛出)
建立一个合理的异常继承体系是非常重要的,一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。
BaseException需要从一个适合的Exception派生,通常建议从 RuntimeException派生`
public class BaseException extends RuntimeException {
}
其他类型的异常就可以继承自该BaseException异常`
例如
import 'dart:async';
import 'package:http/http.dart' as http;
void main() {
httpRequest();
}
Future httpRequest() async {
try {
var url = 'http://127.0.0.1/1.php';
http.get(url).then((response) {
if (response.statusCode == 200) {
return response;
} else if (response.statusCode == 404) {
throw StatusException(type: StatusType.STATUS_404, msg: '找不到异常');
} else if (response.statusCode == 500) {
throw StatusException(type: StatusType.STATUS_500, msg: '服务器内部发生错误');
} else {
throw StatusException(type: StatusType.DEFAULT, msg: '请求异常');
}
});
} catch (e) {
return print('error:::' + e.toString());
}
}
//枚举错误类型
enum StatusType {
DEFAULT,
STATUS_404,
STATUS_500,
}
//自定义错误提示
class StatusException implements Exception {
StatusType type;
String msg;
StatusException({this.type = StatusType.DEFAULT, this.msg});
@override
String toString() {
return msg ?? 'Http请求异常!';
}
}