-
Dart 支持泛型,如
List <int>
(整数列表)或List <dynamic>
(任何类型的对象列表)。 -
Dart 支持顶级函数(例如
main()
),这些函数不会封装在一个类或者对象当中,所有的应用程序都至少有一个顶级函数,即main()
函数 。 -
Dart 支持顶级 变量 , 同样变量绑定在类或对象上(静态变量和实例变量)
-
与 Java 不同,Dart 没有关键字 “public” , “protected” 和 “private” 。 如果标识符以下划线(_)开头,则它相对于库是私有的
-
标识符 以字母或下划线(_)开头,后跟任意字母和数字组合
-
Dart 语法中包含 表达式( expressions )(有运行时值)和 语句( statements )(没有运行时值)
变量定义
var name = ‘beason’ //类型推导为string
dynamic name = ‘beason’ //动态类型,编译时不会进行类型推导,运行时进行类型推导
String name = “beason” //指定类型为String
思考:var, dynamic,object定义变量的区别?
所有的实例变量都隐式的生成get方法,非final变量还会生成set方法
默认值
未初始化的变量默认都是Null,无论是数字还是其他类型
Final/Const
-
使用过程中从来不会被修改的变量:final和const
-
Final 只能被设置一次:必须在构造函数体执行之前初始化
-
Const在编译时就已经固定
Dart 语言支持以下内建类型:
Number
-
int:整数值不大于64位,值的范围从 -263 到 263 - 1
-
double:64位浮点数
int
和double
都是num
的子类,num 类型包括基本运算 +, -, /, 和 *, 以及abs()
,ceil()
, 和floor()
, 等函数方法
String
- 支持内嵌${expression}表达式
var s = ‘string interpolation’;
print(‘Dart has $s, which is very handy.’);
-
支持使用”+“运算符,把多个字符串连接成一个
-
==用来检查两个对象是否相等
-
定义多行可以使用’’'三个点定义字符串
-
使用r前缀,可以定义raw原始字符串(没有任何转义,\n照样输出)
Boolean
- bool类型,只有字面量true/false表示
List(也被称为Array)
-
定义:var list = [1,2,3] ,推导类型为list
-
元素访问:list[1],list[-1]
-
在 List 字面量之前添加 const 关键字,可以定义 List 类型的编译时常量:
var constantList = const [1, 2, 3];
// constantList[1] = 1; // 取消注释会引起错误。
Map
-
定义:var map = {“key”:“value”}
-
元素访问:map[“key”]
-
添加元素:map[“addKey”] = “addValue”;
Set
- 定义:元素唯一的无序集合:var set = {1,2,3,4,5,7},类型推导为:Set
Dart 是一门真正面向对象的语言, 甚至其中的函数也是对象,并且有它的类型 Function。 这也意味着函数可以被赋值给变量或者作为参数传递给其他函数。 也可以把 Dart 类的实例当做方法来调用。
函数示例
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
//也可以省略类型声明
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
- 如果函数只有一行可以:
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
=> *expr*
语法是{ return *expr*; }
的简写
函数是一等对象
-
可以将函数作为另一个函数的参数
-
可以将函数赋值给任意变量
可选参数
- 命名可选参数
定义:
{param1, param2, …}
void enableFlags({bool bold, bool hidden}) {…}
使用:
paramName: value
enableFlags(bold: true, hidden: false);
- 位置可选参数
定义:
[]
String say(String from, String msg, [String device])
使用:调用方法的时候,可选参数可以省略
say(‘Bob’, ‘Howdy’)
- 默认参数值
使用=号来定义可选参数默认值,如果没有提供默认值,那么默认值为null
定义:
/// 设置 [bold] 和 [hidden] 标志 …
void enableFlags({bool bold = false, bool hidden = false}) {…}
使用:
// bold 值为 true; hidden 值为 false.
enableFlags(bold: true);
匿名函数
多数函数是有名字的, 比如 main()
和 printElement()
。 也可以创建没有名字的函数,这种函数被称为 匿名函数, 有时候也被称为 lambda 或者 closure 。
如果匿名函数只有一条语句同样可以使用 =>简写
下面例子中定义了一个包含一个无类型参数 item
的匿名函数。 list 中的每个元素都会调用这个函数,打印元素位置和值的字符串。
var list = [‘apples’, ‘bananas’, ‘oranges’];
list.forEach((item) {
print(‘${list.indexOf(item)}: $item’);
});
闭包
闭包:既一个函数对象,即使函数对象的调用在它的原始作用域之外,依然能够访问在它次法作用域内的变量
返回值
所有函数都会返回一个值。 如果没有明确指定返回值, 函数体会被隐式的添加 return null;
语句。
foo() {}
assert(foo() == null);
类型判定运算符
-
as 将对象强制转换为特定类型
-
is 是否是某种类型,相当于java instanceof
-
is! 是否不是某种类型
条件表达式
- condition ? expr1 : expr2
如果条件为 true, 执行 expr1 (并返回它的值): 否则, 执行并返回 expr2 的值。
- expr1 ?? expr2
如果 expr1 是 non-null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。
级联运算符 (…)
级联运算符 (..
) 可以实现对同一个对像进行一系列的操作。
非空调用
如:a?.b
相当于 a == null ? null : a.b
三目赋值运算符
如:a ??= b
相当于 a = a == null ? b : a
整除
如:a ~/ b
等价于 (a /b) as int
if
and else
//和 JavaScript 不同, Dart 的判断条件必须是布尔值,不能是其他类型
if (isRaining()) {
you.bringRainCoat();
} else if (isSnowing()) {
you.wearJacket();
} else {
car.putTopDown();
}
for
loops
//方式一var message = StringBuffer(‘Dart is fun’);for (var i = 0; i < 5; i++) { message.write(‘!’);}//方式二candidates.forEach((candidate) => candidate.interview());//方式三var collection = [0, 1, 2];for (var x in collection) { print(x); // 0 1 2}
while
and do
-while
loops
while (!isDone()) { doSomething();}
do { printLine();} while (!atEndOfPage());
break
and continue
-
Break:停止循环
-
Continue: 跳转到下一次迭代
switch
and case
在 Dart 中 switch 语句使用 ==
比较整数,字符串,或者编译时常量。 比较的对象必须都是同一个类的实例(并且不可以是子类), 类必须没有对 ==
重写。 枚举类型 可以用于 switch
语句。
- 在
case
语句中,每个非空的case
语句结尾需要跟一个break
语句
assert
-
如果
assert
语句中的布尔条件为 false , 那么正常的程序执行流程会被中断。 -
assert 语句只在开发环境中有效, 在生产环境是无效的; Flutter 中的 assert 只在 debug 模式 中有效。
Dart 代码可以抛出和捕获异常。 异常表示一些未知的错误情况。 如果异常没有被捕获, 则异常会抛出, 导致抛出异常的代码终止执行。
Dart 提供了 Exception 和 Error 类型, 以及一些子类型。 当然也可以定义自己的异常类型。 但是,此外 Dart 程序可以抛出任何非 null 对象, 不仅限 Exception 和 Error 对象。
- 也可以throw 'beason is null’抛出任意对象
throw FormatException(‘Expected at least 1 section’);throw ‘Out of llamas!’;
- 使用On来制定类型,catch捕获,try{}on Exception catch(e){}
try { breedMoreLlamas();} on OutOfLlamasException { buyMoreLlamas();}
- catch函数可以制定1-2个参数,第一个为异常对象,第二个为堆栈信息
try { // ···} on Exception catch (e) { print(‘Exception details:\n $e’);} catch (e, s) { print(‘Exception details:\n $e’); print(‘Stack trace:\n $s’);}
- 不管是否抛出异常,
finally
中的代码都会被执行。 如果catch
没有匹配到异常, 异常会在finally
执行完成后,再次被抛出:
Dart 是一种基于类和 mixin 继承机制的面向对象的语言。 每个对象都是一个类的实例,所有的类都继承于 Object. 。 基于 * Mixin 继承* 意味着每个类(除 Object 外) 都只有一个超类, 一个类中的代码可以在其他多个继承类中重复使用。
使用类的成员变量
-
使用 (
.
) 来引用实例对象的变量和方法 -
使用
?.
来代替.
, 可以避免因为左边对象可能为 null , 导致的异常。 -
使用对象的
runtimeType
属性, 可以在运行时获取对象的类型,runtimeType
属性回返回一个 Type 对象。
类的定义用 class
关键字,如果未显式定义构造函数,会默认一个空的构造函数,这一点与 Java是一样的
通过 构造函数 创建对象。 构造函数的名字可以是 *ClassName*
或者 `ClassName.identifier
构造函数
默认构造函数
在没有声明构造函数的情况下, Dart 会提供一个默认的构造函数。 默认构造函数没有参数并会调用父类的无参构造函数。
构造函数不被继承
子类不会继承父类的构造函数。 子类不声明构造函数,那么它就只有默认构造函数 (匿名,没有参数) 。
命名构造函数
class Point { num x, y; Point(this.x, this.y); // 命名构造函数,可以有多个 Point.origin() { x = 0; y = 0; }}
重定向构造函数
有时构造函数的唯一目的是重定向到同一个类中的另一个构造函数。 重定向构造函数的函数体为空, 构造函数的调用在冒号 (😃 之后。
class Point { num x, y; // 类的主构造函数。 Point(this.x, this.y); // 指向主构造函数 Point.alongXAxis(num x) : this(x, 0);}
常量构造函数
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
架构师筑基包括哪些内容
我花了将近半个月时间将:深入 Java 泛型.、注解深入浅出、并发编程.、数据传输与序列化、Java 虚拟机原理、反射与类加载、高效 IO、Kotlin项目实战等等Android架构师筑基必备技能整合成了一套系统知识笔记PDF,相信看完这份文档,你将会对这些Android架构师筑基必备技能有着更深入、更系统的理解。
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
注:资料与上面思维导图一起看会更容易学习哦!每个点每个细节分支,都有对应的目录内容与知识点!
这份资料就包含了所有Android初级架构师所需的所有知识!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
7617811)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
架构师筑基包括哪些内容
我花了将近半个月时间将:深入 Java 泛型.、注解深入浅出、并发编程.、数据传输与序列化、Java 虚拟机原理、反射与类加载、高效 IO、Kotlin项目实战等等Android架构师筑基必备技能整合成了一套系统知识笔记PDF,相信看完这份文档,你将会对这些Android架构师筑基必备技能有着更深入、更系统的理解。
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
注:资料与上面思维导图一起看会更容易学习哦!每个点每个细节分支,都有对应的目录内容与知识点!
[外链图片转存中…(img-sKpzAZUj-1712337617811)]
[外链图片转存中…(img-khnIbRou-1712337617811)]
这份资料就包含了所有Android初级架构师所需的所有知识!