前言:对于学过或者有Android开发经验的同学来说,对于Java 语言可以说是相当的熟悉的了,但对Flutter有兴趣的部分同学而言,想要学习Flutter,是需要先了解Dart语言的语法的,dart语言其实和Java语言是有很大的相似之处的,为了能让大家更快的对dart语言有一个初步的认识,博主在这给Java和dart语言进行一个异同之处的对比。

 1.变量

Dart定义变量时可以不预先定义变量类型,程序会自动推断类型,定义变量可以通过 var 关键字来申明变量

eg: var name = 'Dart';
      int age = 24;

2.常量

Dart定义常量用 final 和 const 关键字来修饰符

const值不变,一开始就得赋值

final 可以开始不赋值,但只能赋值一次

final 不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化

常量是永远不改量的量,用final或const修饰它,而不是使用var或其他变量类型

// const 常量
const PI = 3.14159;
print('PI: $PI');
 
// final 常量 
final PI_2 = 3.1415;
print('final常量 PI_2: $PI_2');
final a = new DateTime.now();
print(a); // 2020-03-05 12:02:05.759293
 
// const a = new DateTime.now(); // 报错
 
// final 和 const 区别: // final 可以开始不赋值,但只能赋一次;
// final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化。

3.类

new一个对象的时候,new关键字可以省略。

class Person(){ }
main(){ Person p = Person(); }

4.构造函数

class Person{
String name; num age;
Person(this.name,this.age);
//以上写法等同于以下
Person(String name,num age){
this.name = name; this.age = age;
} }

5.命名构造函数

Dart不支持构造函数重载,但是可以用可选参数代替。命名构造函数也是可以代替java的重载的。

class Person{
String name; num age; Person.haha(){ }
} main(){
Person p = new Person.haha();
}

6.继承

主要概念基本同java相同,唯一有区别的就是子构造继承父构造的声明方式

这里是通过super+初始化列表的方式调用父类的构造函数。

class Children extends Person{
Children(String name,num age):super(name,age){
}
}

7.抽象类

抽象类声明与java相同,都是abstract关键字声明,抽象方法则与之不同。

抽象方法在Dart中声明方式不加方法体既是抽象方法。

abstract class Person{
eat();//抽象方法
}

 

8.多态

定义:允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果。

父类定义一个方法不去实现,让每个子类实现,每个子类有不同的表现。

class Children extends Person{
@override eat(){ print("喝粥"); }
} main(){
Person children= new Children (); children.eat();
}

9.接口

dart没有interface关键字定义接口,而是普通类和抽象类都可以被当做接口被实现,同样使用implements关键字进行实现。

对于dart的接口,如果实现的类是普通类,会将普通类和抽象类中的属性和方法全部需要复写一遍。

而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像java接口那样的方式,一般会使用抽象类。

建议使用抽象类定义接口。

 

10.泛型

泛型是为了解决类,方法,接口的重用性,以及对不特定数据类型的支持(类型校验)。

Dart的泛型和java基本相同。

T getData<T>(T value){
return value;
}

 

未完待续。。。。。。。。。