类方法
Dart中的类方法也就是静态方法,访问的时候直接使用类去访问,不用创建实例变量。
class StaticClass {// 静态static int count = 1;static int sum(int a){return a + count;}}
这里的静态方法也就相当于类方法:
在静态方法里面不能访问非静态成员:
class StaticClass {// 静态static int count = 1;int currentCount = 0;static int sum(int a){return a + count + this.currentCount;}}

但是在实例方法里面可以访问非静态成员,也可以访问静态成员
class StaticClass {// 静态static int count = 1;int currentCount = 0;static int sum(int a){return a + count ;}int sum1(int a) {return currentCount + a + count;}}
因为静态方法是通过类对象来调用的,类对象在调用之前实例对象还有可能没有被构造,所以成员变量也可能不存在。所以在类方法里面不能访问非静态成员。静态变量在整个内存中只有一份,只要在一处被修改,全局都被修改
void main() {staticDemo(); /// 22print(StaticClass.count); /// 2print(StaticClass.sum(20)); /// 22}void staticDemo() {StaticClass.count = 2;print(StaticClass.sum(20));}
对象操作符
我们知道对象置为null之后,再次访问对象内的属性,此时会报错。那么在Dart中如果规避呢
void staticDemo() {var s1;s1 = StaticClass();print(s1.currentCount);s1 = null;print(s1.currentCount); ///此时访问会报错}

我们可以使用可以为空的类型?
void staticDemo() {var s1;s1 = StaticClass();print(s1.currentCount);s1 = null;print(s1?.currentCount);}

强制类型转换
如果我们这么写肯定会报错,因为Object中没有currentCount
void staticDemo() {var s1 = Object();s1 = StaticClass(); /// 多肽print(s1.currentCount);s1 = null;print(s1?.currentCount);}

在哪里调用就在哪里强制转换,转换过后就没有问题了。
void staticDemo() {var s1 = Object();s1 = StaticClass(); /// 多肽print((s1 as StaticClass).currentCount);}
如果再次给s1赋值为null也会报错,因为第一次赋值的是Object,而Object不能为空。
void staticDemo() {var s1 = Object();s1 = StaticClass(); /// 多肽print((s1 as StaticClass).currentCount);s1 = null;}

或者还可以这么判断:s1 is StaticClass
void staticDemo() {var s1 = Object();s1 = StaticClass(); /// 多肽print((s1 as StaticClass).currentCount);if (s1 is StaticClass) {print(s1.currentCount);}}
链式语法
在Dart中可以使用链式语法..返回的是对象本身
void staticDemo() {var s1 = Object();s1 = StaticClass(); /// 多肽print((s1 as StaticClass).currentCount);if (s1 is StaticClass) {print(s1.currentCount);var result = s1..currentCount = 15..sum1(20); /// 链式语法print(result);}}

