Error对象在发生程序故障时被抛出。

Error对象表示一个程序员应该避免出现的程序故障。

例如,使用无效的参数调用函数,甚至是参数的数目出错, 或者在函数不允许的时候调用它。

这些都不是调用者期望,或应该捕获的。 如果发生这些情况,那么程序一定是有问题的,并且终止程序可能是最安全的做法。

当一个函数决定抛出Error的时候,它发生的环境、条件应该描述清楚。 并且,它们应该是可检测和可预测的,以便程序员在使用函数的时候可以避免引起错误。

此类情况通常使用"must"或"must not"这样的关键字来描述条件, 如果你在函数的文档中看到了这样的关键字, 那么在不满足要求的时候,很有可能会产生一个Error并抛出。

例如, 在String.contains中的描述:

   `startIndex` must not be negative or greater than `length`.

在这种情况下,如果startIndex是负数,或者太大, 则会抛出错误。

在调用一个函数之前,如果未发现使用条件,那么被调用的函数不应该抛出错误。 它可能仍然会抛出一个值, 但是调用者必须捕获抛出的值,使它实际上成为另一个结果,而不是Error。 抛出的对象可以选择实现Exception来记录特殊情况,而不是错误, 除非没有其它记录外的情况。

在Dart中,所有非null的值都能被抛出。而继承Error的对象会特殊处理: 它们会第一时间被抛出,在抛出时间点的堆栈信息会被记录、保存在Error对象中。 它可以使用stackTrace的getter方法来恢复。 对于仅仅只是实现了Error接口,而没有继承它的Error对象, 将不会自动保存堆栈信息。

Error对象也用于系统范围的故障,比如栈溢出,或内存不足。

Error在将要被捕获之前,并没有被创建,子类也没有必要去区分Error。 同时,为了使各组相关的Error便于创建,子类使用固定的Error消息创建对象。 例如,在startIndex不在0..length范围的时候, 如果String.contains方法要使用RangeError对象, 可以通过new RangeError.range(startIndex, 0, length)轻松的创建。

Implemented by

Static Methods

safeToString(Object object) String

安全地将一个值转换成一个String描述。

Constructors

Error()

Properties

hashCode int

获取对象的哈希值。

read-only, inherited
runtimeType Type

表示对象的运行时类型。

read-only, inherited
stackTrace StackTrace

堆栈轨迹。

read-only

Operators

operator ==(other) bool

相等操作符。

inherited

Methods

noSuchMethod(Invocation invocation) → dynamic

当一个不存在的函数或成员变量被访问时,该函数被调用。

inherited
toString() String

返回一个用来表示对象的字符串。

inherited