Flutter学习的第三天:面向对象编程Dart语言的学习还能让我回忆java基础,“诚不欺我”真的能够快速上手。

因为Flutter的开发语言是Dart,所有必须得知道Dart的语法,对于学过java或者Python等语言的来说,上手还是比较轻松的。
如果不知道Flutter能优缺点,或者Flutter在android studio配置环境。Flutter学习第一天:小伙花饭钱去买Flutter教学视频,只为了知道Flutter是否支持双系统开发?

如果想了解Dart的数据类型可以看看这篇博客:Flutter学习第二天:Dart常用数据类型(int,num,double,bool,List,Map)以及方法大总结。

我学习视频的那个老师博客地址,老师说的很不错,清晰易懂。

1.构造方法

一个小知识:dart语言是前面加一个下划线来实现变量或者方法为私有属性或者私有方法

String _school;    //私有属性   
_learn(){
    print("_learn私有方法");
  }

个人觉得构造方法的形式和java还是很像的。
Dart语言的构造方法

class Person{
  String name;
  int age;
  Person(this.name,this.age);
}

继承父类实现构造方法。
小知识点:作为一个合格程序员,符合标准肯定很重要。
解释说明注释:需要用//来注释,而不是通/* */注释
文档注释:需要用///来注释,而不是通过/** ... */注释

所以和java的标准还是有一些区别的。如果想了解更多Dart小知识可以去这个链接进行学习,文章很详细。

///这里的Person是指上方那个类
class Student extends Person{
  //定义类的变量
  String _school;          //通过下划线来识别私有字段(变量)
  String city;
  String country;
  String name;
  ///构造方法:
  ///通this._school初始化自有参数
  ///name,age交给父类进行初始化
  ///city为可选参数
  ///country默认参数
  Student(this._school,String name, int age,
      {this.city,this.country='China'})
      : //初始化列表:除了调用父类构造器,在子类构造器方法体之前,你也可以初始化实例变量,
        name='$country.$city',
        super(name, age);
}

上方代码进行解析:我们可以==看到_school是Student的初始化自有参数,name,age交给父类Person进行初始化,city是可选参数(可选参数的意思你创建一个新对象可选择赋值,或者不赋值),country是默认参数,上面country的默认国家是china==。下方代码进行解释:

与java的区别:dart新建对象时,不需要new对象,直接给你个对象他不香吗。[图片上传失败...(image-3e1fa2-1611455158081)]

//因为city,country是可选参数,可写,可不写,如最下方
Student stu=Student("大学", "小罗", 20,city: "长沙",country: "china");
Student stu=Student("大学", "小罗", 20);

2.命名构造方法

==命名构造方法=类名+方法名==
命名构造方法的好处:可以通过类名+多种方法来构造多种构造方法。

Student类指的是上方构造方法中的那个类。下面两个都是命名构造方法。

Student.cover(Student stu):super(stu.name,stu.age);
Student.now(){
   print("我是命名构造函数!");
 }

3.工厂构造方法

工厂构造方法和我们设计模式课学的单例模式挺像的,单例模式总共有8种,这个是最基础的懒汉式单例。主要功能就是不管你新建多少个对象,都是同一个对象。下方有实例。

class Logger{
  static Logger _cache;
  ///工厂构造方法
  factory Logger(){
    if(_cache==null){
      _cache=Logger._internal();
    }
    return _cache;
  }

检测是否为工厂构造方法
你可以试一下,结果返回的是true。

 Logger logger1=Logger();
 Logger logger2=Logger();
 print(logger1==logger2);

4.命名工厂构造方法

==命名工厂构造方法=类名+方法名==
命名构造方法的功能差不多。

factory Student.stu(Student stu) {
    return Student(stu._school, stu.name, stu.age,
         city: stu.city, country: stu.country);
}

5.setters和getters方法

setters和getters方法只有私有属性才有,在方法前面加一个下划线_即可属性私有属性。
例如:

String _school;
//_school的getters方法
String get school => _school;
//_school的setters方法
set school(String value) {
  _school = value;
}

从上方可以看到和java的getters和setters方法还是有很多异同的地方。如果你忘记写了的话,可以通过下图中形式进行自动生成,和我们android的使用差不多。


在这里插入图片描述

在这里插入图片描述

6.静态方法

和java差不多,就不一 一说明了。

 static doPrint(String str) {
    print('doPrint:$str');
  }

7.抽象方法

使用 abstract 修饰符来定义一个抽象类,该类不能被实例化。和java的使用也差不多。

abstract class Study{
  void study();
}

class StudyFlutter extends Study{
  @override
  void study() {
    // TODO: implement study
    print("努力学习呀");
  }
}

8.mixins

这个是java没有的,是dart所独有的特征。
1.mixins :在多个类层次结构中重用代码的一种方式。
2.mixins :在 with 关键字后面跟一个或多个 mixin 的名字(用逗号分开),并且with要用在extends关键字之后

如下方Test需要重用Person,Study类的方法,因为extends只能继承一个类。

class Test extends Person with Study {
  Test(String name, int age) : super(name, age);

  @override
  void study() {
    // TODO: implement study
  }
}

9.泛型

关于泛型的作用可以看一下这个大佬博客,very详细泛型
[图片上传失败...(image-d1ea6c-1611455158082)]
我这里展示一下泛型的使用:
泛型的功能是增加代码的复用减少了强制转化,如下方代码,已经可以确定cache1.getItem('cache1')输出为String型,不要进行强制转化。

//泛型类
class Cache<T>{
  static final Map<String,Object> _cached=Map();

  ///泛型方法
 void setItem(String key,T value){
   _cached[key]=value;
 }
 T getItem(String key){
   return _cached[key];
 }
}

//新建泛型Cache的使用
class TestGeneric{
  void start(){
    Cache<String> cache1=Cache();
    cache1.setItem('cache1', 'cache1');
    String string1=cache1.getItem('cache1');
    print(string1);
  }
}

10.小彩蛋

1.善用?.防止空异常

print(list?.length); 

2.善用??设置默认值

 print(list?.length ?? 0);

3.简化判断

 list = [];
 list.add(0);
 list.add('');
 list.add(null);
 //快速判断
 if ([null, '', 0].contains(list[0])) {
    print('list[0] is empty');
  }

持续学习中。。。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,135评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,317评论 3 397
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,596评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,481评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,492评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,153评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,737评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,657评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,193评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,276评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,420评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,093评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,783评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,262评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,787评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,427评论 2 359

推荐阅读更多精彩内容