国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Kotlin對(duì)比Java編程語言其優(yōu)勢(shì)在哪里?

開發(fā) 后端
通過文中對(duì)比,我們應(yīng)該可以看到作為一門現(xiàn)代編程語言的特點(diǎn)和具備的優(yōu)勢(shì),而且關(guān)于Kotlin好用的特性我們還沒有完全列舉完,比如便捷的集合操作、屬性委托、擴(kuò)展函數(shù)等等。

隨著計(jì)算機(jī)語言的發(fā)展,以成本為核心的驅(qū)動(dòng)力,推動(dòng)著經(jīng)歷了匯編、C、C++、Java、Kotlin的發(fā)展,其目的在于讓開發(fā)人員更好的聚焦于業(yè)務(wù),而不用太關(guān)注語言本身的處理。

近幾年,又開始流行更高級(jí)的語言,它們被稱之為現(xiàn)代編程語言,比如Rust、Go、Kotlin和TypeScript等。現(xiàn)代的核心原因,我認(rèn)為可以總結(jié)為以下幾點(diǎn):

  • 入門更容易
  • 類型推斷
  • 空指針安全
  • 內(nèi)置的并發(fā)支持
  • 減少模板代碼(簡(jiǎn)潔)
  • 操縱集合更容易
  • 更智能的垃圾回收

以上不一定非常全,但是一定程度上概括了現(xiàn)代語言的特點(diǎn),下面我們就基于Kotlin和Java的對(duì)比,來看下Kotlin的優(yōu)勢(shì)。

new個(gè)對(duì)象

new一個(gè)對(duì)象,是我們?cè)诰幊讨凶畛S玫牟僮髦唬屛覀兿瓤聪氯绾卧贘ava中new一個(gè)對(duì)象。

  1. List<String> list =new ArrayList<String>(); 
  2. list.add("hello world"); 

在Java中,我們需要定義一個(gè)變量,然后通過new關(guān)鍵字聲明一個(gè)ArrayList的示例,這樣我們就可以使用他了。

但是在Kotlin,new一個(gè)對(duì)象會(huì)更簡(jiǎn)潔。

  1. var list:ArrayList<String> = ArrayList<String>() 

直接省略了new關(guān)鍵字即可。

類型推斷

對(duì)于以上的Kotlin代碼,我們完全可以省略掉變量:后面的類型聲明,因?yàn)閗otlin可以自己推斷出來。

  1. val list = ArrayList<String>() 

是不是覺得更簡(jiǎn)潔了?我們開發(fā)的效率也更高了。

空指針安全

在Java中,變量,方法的參數(shù)等都是可以為null的,但是在Kotlin中默認(rèn)是不允許的,通過這種強(qiáng)制的限制,更好的避免空指針異常。

  1. var list = ArrayList<String>() 
  2. list = null 

以上代碼,在編譯期你會(huì)得到一個(gè)錯(cuò)誤提示:

  1. Null can not be a value of a non-null type ArrayList<String> 

如果我們的確需要null賦值怎么做呢?在Kotlin中需要開發(fā)者自己顯示聲明才可以。

  1. var list:Array<String>? = null 

如上所示,在類型后加?即可。但是注意,我們不提倡這種做法,在實(shí)際的開發(fā)中,你會(huì)發(fā)現(xiàn)?大部分都是為了兼容Java代碼使用的。

屬性

我們通常會(huì)把數(shù)據(jù)和對(duì)數(shù)據(jù)的處理封裝到一個(gè)類中,如果類中有私有字段,我們還需要提供getter和setter方法提供訪問和修改字段的方法。

  1. //Person.java 
  2. public  class Person { 
  3.   private String name
  4.  
  5.   public String getName() { 
  6.     return name
  7.   } 
  8.  
  9.   public void setName(String name) { 
  10.     this.name = name
  11.   } 
  12. //Main.java 
  13. public static void main(String[] args) { 
  14.   Person p = new Person(); 
  15.   p.setName("張三"); 
  16.   System.out.println(p.getName()); 

以上是我們通過Java實(shí)現(xiàn)的一個(gè)Person類,并且定義了name私有字段,同時(shí)提供了getter和setter方法,這樣我們才能夠使用它。

通過以上代碼,大家可以看到,我們?yōu)榱藢?shí)現(xiàn)一個(gè)name的存儲(chǔ),寫了很多代碼,如果一個(gè)類存在很多字段,我們會(huì)寫更多的不必要的getter和setter方法。

現(xiàn)在我們看在Kotlin中如何實(shí)現(xiàn)上面的功能。

  1. //Person.kt 
  2. class Person { 
  3.   var name:String = "" 
  4.  
  5. //main.kt 
  6. fun main(){ 
  7.   val p = Person() 
  8.   p.name = "張三" 
  9.   println(p.name

是的,就是這么簡(jiǎn)單,只需要這么幾行代碼,就可以實(shí)現(xiàn)和Java一樣的功能,因?yàn)镵otlin可以幫我們自動(dòng)的生成getter和setter這些模板代碼,就省了我們很多事情,大大的提高了我們的開發(fā)效率,并且整個(gè)代碼也更簡(jiǎn)潔。

這里需要注意的是,如果字段是val聲明的,那么只會(huì)生成getter方法,因?yàn)関al是不可修改的,等價(jià)于Java中的final修飾符;如果字段是var的,可以同時(shí)生成getter和setter方法,這時(shí)候就可以對(duì)字段賦值了。

數(shù)據(jù)類

Kotlin的簡(jiǎn)潔不僅僅體現(xiàn)在getter和setter方法上,還有數(shù)據(jù)類。一個(gè)數(shù)據(jù)類是一個(gè)數(shù)據(jù)容器,它用來存放數(shù)據(jù)。

一個(gè)好的數(shù)據(jù)類的聲明,不僅有私有的字段、getter和setter方法,還要有toString、equals和hashCode方法的實(shí)現(xiàn),以便對(duì)他們進(jìn)行打印、比較以及更好的儲(chǔ)存在map中。

還是以Person類為例,一個(gè)合格的數(shù)據(jù)類代碼如下:

  1. public static  class Person { 
  2.   private String name
  3.  
  4.   public Person(String name) { 
  5.     this.name = name
  6.   } 
  7.  
  8.   public String getName() { 
  9.     return name
  10.   } 
  11.  
  12.   public void setName(String name) { 
  13.     this.name = name
  14.   } 
  15.  
  16.   @Override 
  17.   public boolean equals(Object o) { 
  18.     if (this == o) return true
  19.     if (o == null || getClass() != o.getClass()) return false
  20.  
  21.     Person person = (Person) o; 
  22.  
  23.     return Objects.equals(name, person.name); 
  24.   } 
  25.  
  26.   @Override 
  27.   public int hashCode() { 
  28.     return name != null ? name.hashCode() : 0; 
  29.   } 
  30.  
  31.   @Override 
  32.   public String toString() { 
  33.     return "Person{" + 
  34.       "name='" + name + '\'' + 
  35.       '}'
  36.   } 

看下我們Java的實(shí)現(xiàn),需要有這么30多行代碼才能實(shí)現(xiàn)。如果我們使用Kotlin會(huì)是怎樣的呢?

  1. data class Person(val name: String) {} 

只需要這么一行代碼,以上的Java功能都會(huì)實(shí)現(xiàn),這里的關(guān)鍵在于一個(gè)data修飾符,是不是很酸爽。

并發(fā)

Kotlin提供了協(xié)程來實(shí)現(xiàn)并發(fā),相比Java的Thread和Executor等來說,它更輕便,簡(jiǎn)潔。我們對(duì)比下并發(fā)的基本實(shí)現(xiàn)。

  1. public static void main(String[] args) throws InterruptedException { 
  2.   new MyThread().start(); 
  3.   System.out.println(Thread.currentThread().getName()+":main"); 
  4.   //保證JVM存活 
  5.   Thread.sleep(1000); 
  6.  
  7. private static class MyThread extends Thread{ 
  8.   @Override 
  9.   public void run() { 
  10.     try { 
  11.       Thread.sleep(500); 
  12.       System.out.println(Thread.currentThread().getName()+":Thread"); 
  13.     } catch (InterruptedException e) { 
  14.       e.printStackTrace(); 
  15.     } 
  16.   } 

運(yùn)行查看輸出,我們發(fā)現(xiàn)MyThread并沒有阻塞main的執(zhí)行,也就是并發(fā)了。

  1. main:main 
  2. Thread-0:Thread 

但是要注意到,Java使用了兩個(gè)線程,一個(gè)是main,一個(gè)是Thread-0。同樣的功能,我們現(xiàn)在使用kotlin實(shí)現(xiàn)下:

  1. fun main(){ 
  2.   runBlocking { 
  3.     launch { 
  4.       delay(500) 
  5.       println("${Thread.currentThread().name}:Thread"
  6.     } 
  7.     println("${Thread.currentThread().name}:main"
  8.   } 

相比Java來說更簡(jiǎn)潔,而且我們看下打印的輸出:

  1. main:main 
  2. main:Thread 

竟然是在同一個(gè)線程上實(shí)現(xiàn)的并發(fā),少了一個(gè)線程的申請(qǐng)開銷,效率更高,這也是kotlin提出協(xié)程的概念。如果我們不想讓它在main線程上執(zhí)行,可以通過切換調(diào)度器來實(shí)現(xiàn)。

  1. launch(Dispatchers.IO) 

只需要把上面的代碼的launch換成launch(Dispatchers.IO)即可,這樣調(diào)度器就給我們分配了一個(gè)IO的線程池來執(zhí)行我們的代碼。如果我們使用Java來實(shí)現(xiàn),要自己定義線程池,還要提交Runnable,整個(gè)代碼是非常多的。

  1. main:main 
  2. DefaultDispatcher-worker-1:Thread 

kotlin的協(xié)程非常強(qiáng)大和簡(jiǎn)潔,通過以上的例子,不能完全展示它的特性,剩下的如協(xié)程上下文、調(diào)度器、Flow、通道等能力大家可以自己摸索。

小結(jié)

通過以上對(duì)比,我們應(yīng)該可以看到作為一門現(xiàn)代編程語言的特點(diǎn)和具備的優(yōu)勢(shì),而且關(guān)于Kotlin好用的特性我們還沒有完全列舉完,比如便捷的集合操作、屬性委托、擴(kuò)展函數(shù)等等。

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2012-02-17 09:33:08

KotlinJavaJVM

2011-08-01 10:10:22

私有云公有云

2011-07-12 17:42:46

PHP

2010-09-10 10:30:39

DIV+CSS

2021-10-28 22:31:11

存儲(chǔ)云存儲(chǔ)數(shù)據(jù)

2022-07-31 21:36:30

工業(yè)機(jī)器人機(jī)器人

2018-08-09 18:27:03

編程語言JavaPython

2019-08-13 06:50:31

編程語言排行榜Python

2017-12-18 17:04:08

編程語言排行榜KotlinC

2011-07-20 11:06:58

Mozilla

2024-09-20 09:30:44

2024-04-24 12:03:20

2021-10-27 09:33:01

數(shù)字人民幣微信支付寶

2009-06-23 09:07:38

2010-09-28 08:58:22

WLAN無線交換機(jī)管理

2009-04-28 16:18:29

Linux開源軟件優(yōu)勢(shì)

2020-12-02 09:51:06

C++語言學(xué)習(xí)

2017-12-09 22:09:05

編程KotlinC語言

2013-07-01 18:43:35

個(gè)推公共平臺(tái)云推送優(yōu)勢(shì)

2019-06-04 08:30:57

KotlinPHP語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日本精品视频一区二区三区| 色婷婷综合久久久久中文字幕 | 岛国在线大片| 国产高清在线a视频大全| silk一区二区三区精品视频 | 久久久久久97三级| 在线免费观看视频一区| 中文字幕在线亚洲| 亚洲自拍偷拍色图| 人妻少妇精品久久| 青青草视频免费在线观看| 成人黄色免费短视频| 色综合久久一区二区三区| 国产在线精品一区二区不卡了| 一区二区三区av电影| 日韩免费观看高清完整版 | 亚洲午夜视频在线观看| 亚洲激情视频网站| 国产精品你懂得| 少妇高潮大叫好爽喷水| 中文官网资源新版中文第二页在线观看| 欧美极品videos大乳护士| 日韩精品欧美激情一区二区| 懂色av中文一区二区三区| 色综合天天综合在线视频| 日韩在线免费av| 国产一区二区久久久| 在线观看国产中文字幕| sm久久捆绑调教精品一区| 四虎国产精品免费观看| 9久草视频在线视频精品| 欧美美女黄视频| 欧美在线一级va免费观看| 99精品视频网站| 免费a级毛片在线观看| 亚洲综合网狠久久| 麻豆国产精品视频| 色综合久久99| 777精品视频| 欧美黑人在线观看| 黄色在线免费| 首页国产精品| 亚洲国产精华液网站w | 久久国产精品亚洲77777| 亚洲色图欧洲色图| 国产亚洲一区精品| 蜜桃狠狠色伊人亚洲综合网站| 日日噜噜噜夜夜爽爽狠狠视频| 国产精品99精品一区二区三区∴| 一本不卡影院| 午夜精品久久一牛影视| 色综合久久精品亚洲国产| 天堂v在线视频| 嫩草在线视频| 久久国产影院| 亚洲欧美怡红院| 精品国产一区二区三区久久久狼| 欧洲亚洲一区| 日韩av免费观影| 亚洲三级网址| 国产视频在线观看一区二区三区| 精品亚洲一区二区| 女同一区二区| 九色视频网站在线观看| 国产欧美日韩在线一区二区| 久久久久国产一区二区三区四区 | 日韩精品欧美成人高清一区二区| 欧美日韩亚洲一区二区| 欧美亚洲在线观看| 亚洲爆乳无码专区| 日本肉肉一区| 久久精品国产一区二区三区免费看 | 亚洲精品99久久久久中文字幕| 国产精品视频免费一区二区三区| 黄动漫在线免费观看| 精品无人区一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲精品美女在线| 日本精品一区二区三区不卡无字幕| 国产毛片av在线| 仙踪林久久久久久久999| 一区二区三区在线观看国产| 国内精品久久久久影院优| 日韩网址在线观看| 欧美特黄色片| 成人动漫精品一区二区| 亚洲精品中文字幕有码专区| 亚洲精品日韩成人| 青草影视电视剧免费播放在线观看| 9国产精品视频| 欧美日韩综合一区| 高清不卡日本v二区在线| 欧美一区二区三区少妇| 色狮一区二区三区四区视频| 亚洲国产综合色| 国产精品成久久久久三级| 99在线免费观看| 欧美交a欧美精品喷水| 国产精品色哟哟网站| 欧美精品久久久久久久久久| 成人免费在线小视频| 青青久久精品| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美一级做一级爱a做片性| 国产91丝袜在线播放九色| 亚洲乱码国产乱码精品精| 国产日本欧美在线| 亚洲精华液一区二区三区| 国模娜娜一区二区三区| 精品香蕉在线观看视频一| 操bbb操bbb| 日韩av免费| 99久久精品免费精品国产| 久久精品91久久久久久再现| 日韩精品视频久久| 亚洲精品aⅴ| 中文字幕在线观看不卡视频| 欧美一区二区三区免费视| 国产一级视频| 日本欧美肥老太交大片| 精品久久久国产精品999| 成人午夜小视频| 亚洲52av| 亚洲国产电影| 日韩欧美成人一区| 咪咪色在线视频| 欧美激情啪啪| 国产精品网站在线播放| 日本久久久久亚洲中字幕| 激情视频免费观看在线| 中国成人一区| 91精品国产综合久久精品图片| 日韩精品资源| 欧美××××黑人××性爽| 91麻豆swag| 清纯唯美亚洲综合| 日韩欧美在线观看一区二区| 亚洲性视频h| 精品久久一区二区三区| 伊人网在线免费| 国产精品一区二区精品| 中文字幕中文字幕一区二区| 国产精品中文字幕在线观看| 高清国产福利在线观看| 日韩福利视频网| 国产一级揄自揄精品视频| 国产精品涩涩涩视频网站| 综合伊思人在钱三区| 日韩欧美亚洲范冰冰与中字| 欧美日韩精品久久| 日韩不卡免费高清视频| 国产色爱av资源综合区| 国产精品久久久久久久久久久久久久| 日本在线一二三| 石原莉奈在线亚洲二区| 在线视频日韩精品| 岛国毛片在线播放| 亚洲国产日韩欧美在线| 欧美一区二区三区四区五区| www.在线观看av| 精品女人视频| 欧美视频免费在线| 日韩影片在线播放| www.久久草.com| 亚洲午夜一二三区视频| 欧美日韩综合另类| 亚洲ww精品| 亚洲国产毛片aaaaa无费看| 麻豆精品视频| 成人黄色毛片| 亚洲黄色小视频| 久久久99爱| 久久精品97| 亚洲午夜一区二区三区| 欧美午夜精品久久久久免费视| 久久av日韩| 欧美日韩免费在线观看| 一区二区三区欧美在线| 粉嫩av一区二区| 欧美午夜寂寞影院| 欧美中日韩在线| jlzzjlzz亚洲女人| 精品少妇一区二区三区在线播放| 青娱乐自拍偷拍| 色爱综合网欧美| 亚洲国产精品嫩草影院久久| 欧美第一页浮力影院| 影音先锋久久资源网| 最新亚洲国产精品| 亚洲精品一区视频| 国产一区激情在线| 国产99在线|中文| 蜜臀av在线| 国产精品久久国产精麻豆99网站| 超碰97在线人人| 久久天堂影院| 一本大道av伊人久久综合| 成人在线播放网址| 第九色区aⅴ天堂久久香| 日韩成人久久久|