闭包

支持闭包,闭包能够访问外部方法内部的局部变量

void main() {

var foo = a();

foo ();

foo ();

foo ();

foo ();

}

// 定义闭包

a() {

int count = 0;

// 匿名函数

return (){

print(count++);

};

}

嵌套函数

// 外层函数

void showName(var name) {

// 函数中嵌套函数

void printName(var name) {

print(“Hello name is: $name”);

}

// 使嵌套函数生效

printName(name);

}

// 主函数调用

void main() {

showName(“Tom”);

}

操作符

1.空替换?? expr1 ?? expr2,如果expr1是non-null,返回其值。否则执行expr2并返回其结果;

2.条件成员访问?.P?.y = 4; 如果p是non-null,则设置y的值等于4;

3.类型判定操作符(as,is,is!);

4.级联操作,可以在同一个对象上连续调用多个函数以及访问成员变量;

// 条件操作符(特有的 ??)

var oldState ;

// 传统的写法

var newState = (oldState == null) ? oldState : ‘not final’;

// 使用??操作符

var newState1 = oldState ?? ‘not final’;

// 避空(特有的?.)

void main() {

Person person = new Person(‘Tom’);

Person person1 = null ;

// person 非空,正常返回

print(person?.name);

// person1为空,正常返回null

print(person1?.name);

// peroson1为空,报异常

print(person1.name);

}

class Person {

final String name;

Person(this.name);

}

// 类型判定操作符(as,is,is!,):

void main() {

var person = new Person();

// 判断person是不是Person类型

if (person is! Person) {

print(“person is not Person type”);

}

if (person is Person) {

person.name = ‘Tom’;

print(person.name);

}

// 上面代码可以使用as简化,as是把操作符对象转化为特定的类型

(person as Person).name = ‘Tom’;

print(person.name);

// 上面两种写法有区别,第一种是如果是true就执行里面的内容,false就不执行;

// 第二种情况使用as会抛出一个异常

}

class Person {

var name;

}

// 级联操作

// 获取一个id为btn1的按钮对象

var btn = query(‘#btn1’);

btn.text = ‘确定’;

btn.classes.add(‘ButtonStyle’);

btn.onClick.listen((s) => window.alert(‘ok’));

// 上面代码等价于

query(‘#btn1’)

…text = ‘确定’

…classes.add(‘ButtonStyle’)

…onClisk.listen((s) => window.alert(‘ok’));

异常

  1. 和java不同的是,Dart可以抛出任意类型的对象;

  2. 程序不会强制要求开发中处理异常,但若发生异常,程序会中断;

  3. 其中异常主要分为Error和Exception两种类型。

void main() {

try {

test();

} on RangeError catch (e) {

print(e);

} on Error catch (e) {

print(e);

} finally {

print(‘finally’);

}

}

test() {

throw RangeError(“下标越界”);

}

  1. 创建对象可以不使用new关键字;

  2. Dart中没有public,private,protected这些关键字;

  3. 没有interfaces关键字,每一个类都是一个接口。我们可以用抽象类来类比java中的接口;

  4. Dart把多重继承的类叫做Mixins。

main() {

var point = new Point();

point.run();

// 这里会执行P类中的run()

// 可以理解成优先级覆盖,子类>重用>父类

P p = new P();

p.run();

Q q = new Q();

q.run();

}

class Point {

void run() {

print(“Point run…”);

}

}

class Note {

void run() {

print(“Note run…”);

}

}

// 多继承

class P extends Point with Note {

void run() {

print(“P run…”);

}

}

class Q implements Point {

@override

void run() {

print(“Q run…”);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后送福利了,现在关注我并且加入群聊可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,欢迎加群探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿

点击GitHub领取
录播视频图.png

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频*
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-88p5DQCH-1710834024923)]

最后送福利了,现在关注我并且加入群聊可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,欢迎加群探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿

点击GitHub领取
[外链图片转存中…(img-o9hPxnVE-1710834024924)]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐