Dart语言
- Dart语言,具有动态语言和静态语言的特性。 即具备双重语言优势。且同时支持JIT(Just In Time,即时编译)和AOT(Ahead of Time,运行前编译)两种编译模式。
- Dart语言,并发是通过Isolate实现的。 Isolate是类似于线程但不共享内存,独立运行的worker。这样的机制,就可以让Dart实现无锁的快速分配。
- Dart是单线程模型,不存在资源竞争和状态同步的问题。 这就意味着,一旦某个函数开始执行,就将执行到这个函数结束,而不会被其他Dart代码打断。
访问权限修饰符
Java
public
具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。
protected
主要的作用就是用来保护子类的。相当于传递给子类的一种继承。
default
有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
private
访问权限仅限于类的内部,是一种封装的体现。
Dart
Dart中只有 public 和 private 两种。
对应 有下划线_ 和 没下划线_ 两种。如: _key 、_getName()
分支语句判断
Javascript
let accNum = “”; // accNum = undefined、null
if (accNum) {
// 表示 如果 卡号非空 执行
// 方法体
}
Dart
dart中在分支语句判断上必须是判断值类型为 `布尔(bool)`
操作符
Javascript
let accNum = “”; // accNum = undefined、null
let inputNum = “6228483267096781”
// 表示 如果 accNum为空,newNum取值inputNum
let newNum = accNum || inputNum;
Dart
/ ** dart中在使用上有"??" */
let accNum = ""; // accNum =null
let inputNum = "6228483267096781"
// 只有当accNum值为null时,newNum取值inputNum
let newNum = accNum ?? inputNum;
级联赋值
Java
Room room = new Room();
room.address = “地址”;
room.stress = “街道” ;
room.name = “房子” ;
room.color = “颜色”;
Dart
Room room = new Room();
// dart中
room..address = "地址" ..stress = "街道" ..name = "房子" ..color = "颜色";
键值对Map
Javascript
let person = { “name”:“姓名”, “agender”:“性别”, “age”:“年龄” }
// 获取姓名方式有两种(因为 js中Map具有对象\键值对双重特性)
// 并且js中键值对类型可以不唯一
let name = person.name; // 具备对象属性
let name = person[“name”];
Dart
/** Dart 键值对中值类型必须一致,且不具备对象属性*/
Map person = { "name":"姓名", "agender":"性别", "age":"年龄" }
const name = person["name"];
// 特殊键值对,const修饰过的不能增、删、改。
var map = const {"key":"value", "name":"beijing"};
类和接口
Java
// java中类和接口是严格区别的
// 区别通过关键字 interface abstract class extends implements
interface Person {
void run();
}
class Police {
void study(){…};
}
class Teacher extends Police implements Person {
… …
}
Dart
/** dart 中 类和接口是统一的, 都可以使用关键字 implement */
abstract class Person {
void run();
void study();
}
class Teacher extends Person{
@override
void run() {
// TODO: implement run
}
@override
void study() {
// TODO: implement study
}
}
// 类和接口是 统一的; 类是接口, 接口也是类
class Student implements Person, Teacher {
@override
void run() {
// TODO: implement run
}
@override
void study() {
// TODO: implement study
}
}
不能重载
Java
// java 中是可以进行普通方法+构造方法重载的
class Person {
public void run(){
… …
}
public void run(Sring car){
… …
}
}
Dart
dart 中是不能进行普通方法重载的, 但是可以通过命名构造方法的重载;
/**
* 子类继承父类。如果子类使用了多参命名构造方法,且并被初始化调用,那么会 始终先初始化调用父类的默认或无参构造方法。
*/
class Person {
num age = 0;
String address = "Person 的 地址";
String _gender = "男";
bool get asAdult => age > 18;
Person() {
print("Person 构造方法");
}
void run () {
print("Person run方法执行");
}
void study() {
print("Person学习性别 = $_gender");
}
Person.person(){
print("Person 命名构造方法");
}
Person.person2(num age){
this.age = age;
print("Person 有参数命名构造方法");
}
}
待续…