/**
* Dart 语言提供了Exception和Error类型,以及许多预定义的子类类型
* 也可以自定义异常,Error是程序无法恢复的严重错误,表示程序出现
* 较严重问题,而又无法通过编程处理,只能终止程序
*
* 使用try语句来捕获异常,catch语句处理异常,catch语句有两个参数
* 一个必选的异常对象,第二个是可选的堆栈对象
*
*/
// 自定义异常
class MyException implements Exception {
// 接收异常信息
final String msg;
MyException(this.msg);
// 覆写toString方法
@override
String toString() {
// TODO: implement toString
return msg ?? 'MyException:$msg';
}
}
void main(){
try{
throw '这是一个异常';
}catch(e ,s){
print('异常详情 $e');
print('堆栈跟踪 $s');
}
try{
throw FormatException();
}on FormatException catch(e,s){
print('异常类型:FormatException 格式转换错误');
print('异常详情 $e');
print('堆栈跟踪 $s');
// 重新抛出异常
rethrow;
}on IntegerDivisionByZeroException{
print('异常类型:IntegerDivisionByZeroException');
}finally{
print('无论是否有异常,都会执行');
}
// 抛出自定义异常
throw MyException('自定义异常');
}
/**
* 泛型
* 符号<>将List标记为可泛型化的类,即类型可参数化
* 通常使用一个字母来表示类型参数,例如E,T,S,K,V等
*
* list,set 和map 字面量可以被参数化
*
* class ClassName<T>{
* // 泛型参数定义实列变量
* T t;
* // 定义方法实列方法 方法返回值和参数都可以使用泛型参数T
*
* T method(List<T> ts){
* T ts1;
* ts1 = ts[0]
* return ts1;
* }
* }
*
*/
class CachePool<T extends num>{
final Map pool = Map();
T getByKey(String key){
return pool[key];
}
void setByKey(String key,T value){
pool[key] = value;
}
}
void main(){
//创建List<String> 类型的实列
var names = <String>['Seth','Kathy','Lars'];
// 创建Set<String> 类型的实列
var uniqueNames = <String>{'seth','kathy','lars'};
// 创建Map<String,String>类型实列
var website = <String,String>{
'qq.com':'腾讯qq',
'aliyun.com':'阿里云',
'toutiao.com':'头条',
};
var values = List<String>();
var setValues = Set<String>();
var mapValues = Map<String,int>();
// 创建泛型参数我int的实列
var intMap = CachePool<int>();
intMap.setByKey('frist', 2);
print(intMap.getByKey('frist')); // 2
// intMap运行时类型:CachePool<int>
print('intMap运行时类型:${intMap.runtimeType}');
// 创建泛型参数为String的实列
var stringMap = CachePool<double>();
stringMap.setByKey('hi', 1.1);
print(stringMap.getByKey('hi')); // 1.1
// intMap运行时类型:CachePool<double>
print('intMap运行时类型:${stringMap.runtimeType}');
}
/**
* 声明和使用
* Dart程序是由被称为库的模块化单元组成的,一个库有个多
* 顶层声明组成,这些声明可以是函数,变量或类
*
*/
// 导入内置库
import 'dart:math';
// 导入第三方包
//import 'package:json_string/json_string.dart';
// 导入本地包
import 'example_01.dart';
void main(){
// 随机数
var random = Random();
var randomInt = random.nextInt(100);
print('0-100的随机数: $randomInt');
}