Java 和 Kotlin 語(yǔ)法區(qū)別

1.extends? 用 (冐號(hào)):代替衙四。MainActivity extends Activity,

現(xiàn)在是? MaiActivity :Activity()

2.interface 用(逗號(hào))候学,代替。 A interface B{}

現(xiàn)在是? ,B{}

3.override 不現(xiàn)進(jìn) 注解复唤,而是用到了方法中

這樣寫(xiě) override fun onCreate(saveInstanceState:Bundle?)

4. 沒(méi)有switch case 了,

現(xiàn)在用when()?? ->

5.kotlin沒(méi)有object類(lèi)

現(xiàn)在是Any()沒(méi)有Object()

6.跟java一樣不能繼承final類(lèi)

繼承open abstract 類(lèi),并且默認(rèn)是open阔加,必須要寫(xiě)修飾符

7.不在有分號(hào)奢啥,

不在有分號(hào)秸仙,不在有分號(hào),不過(guò)可以寫(xiě)的

8. java中沒(méi)能返回值是void,返回值寫(xiě)在小括號(hào)左面

現(xiàn)在改成空方法是Unit,方法用fun1, fun2,代替扫尺, 并且返回值要寫(xiě)在小括號(hào)后面

fun Unit(x: Any, y: Any) {

funUnit(x: Any, y: Any): Int{

返回值可以用一個(gè)表達(dá)式寫(xiě)funadd(x:Int,y:Int):Int= x+ y

9.jave中每珍上對(duì)象都要new

kotlin不需要new這個(gè)關(guān)鍵字

10.在java中給控件不能直接賦值筋栋,

在kotlin里? 通過(guò)import kotlinx.android.synthetic.main.demo.*

text1.text = "hello world kotlin"這樣就完成了"hello world kotlin"

11.for循環(huán)也不一樣了? 在java中是這樣寫(xiě)的for(int i = ; i < 10; i++)

Kotlin是這樣寫(xiě)的for (i in 0..99) {

12.java中方法在括號(hào),

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

main_srl.setRefreshing(false);

}

}, 5000);kotlin是這樣寫(xiě)的Handler().postDelayed({main_srl!!.isRefreshing =false},5000)}

13.調(diào)用方法的不同正驻,個(gè)人目前發(fā)現(xiàn)除了調(diào)用set..Listener 還是原來(lái)的方法弊攘,其它的都改變了

一.

java中

main_srl.setOnRefreshListener(

kotlin中

main_srl!!.setOnRefreshListener{...

二.java中

main_srl.setRefreshing(false)

kotlin中

main_srl!!.isRefreshing = false? ? //雙嘆號(hào)的用法抢腐??襟交?

14 .->的用法

java中是這樣寫(xiě)的

recyclerViewAdapter.setOnItemClickedListener(new HeaderRecyclerViewAdapter.onItemClickedListener() {

@Override

public void onItemClick(View view, int position) {

Toast.makeText(MainActivity.this, "position " + position, Toast.LENGTH_SHORT).show();

}

});

kotlin這樣寫(xiě)的recyclerViewAdapter.setOnItemClickedListener{ view, position-> Toast.makeText(this@MainActivity, "position " + position, Toast.LENGTH_SHORT).show()}

15 . 強(qiáng)制轉(zhuǎn)換

java中? mHeader(View)

kotlin 中是mHeader as View

Add-non-null aserted 就是改變?yōu)椴皇强盏?mHeader!!

Case expressino? ? ? 就是強(qiáng)制轉(zhuǎn)換 mHeader as View

16.變量

1.java中分為二類(lèi)(基本迈倍,引用)八種(byte short int long flout double char boolean)

2.kotlin 中分有以下不同之睡

1.基本類(lèi)型中 java中有的kotlin也有,就是不能給一個(gè)int賦值為double

var i Int = 1;

var d Double = i .toDouble();? //其它也類(lèi)似這樣沒(méi)有java中的自動(dòng)提升捣域,強(qiáng)轉(zhuǎn)的說(shuō)法了L淙尽!焕梅!

2. | & 或 和 和 改為了? or 和 and

var testOr = Flag or Flags

var testAnd = Flag and Flags

3.變量 var? val? (這個(gè)類(lèi)似java中的final)

4.屬性? kotlin沒(méi)有g(shù)et,set方法迹鹅,直接賦值,直接使用

17. Anko具聽(tīng)說(shuō)是一個(gè)很代替xml繪制ui的強(qiáng)大的類(lèi)庫(kù)

18.java中asycTask

kotlin 中 async{

run(){

uiThread{...}

}}

19.with函數(shù)

with是一個(gè)非常有用的函數(shù)贞言,它包含在Kotlin的標(biāo)準(zhǔn)庫(kù)中斜棚。它接收一個(gè)對(duì)象和一個(gè)擴(kuò)展函數(shù)作為它的參數(shù),然后使這個(gè)對(duì)象擴(kuò)展這個(gè)函數(shù)该窗。這表示所有我們?cè)诶ㄌ?hào)中編寫(xiě)的代碼都是作為對(duì)象(第一個(gè)參數(shù))的一個(gè)擴(kuò)展函數(shù)弟蚀,

我們可以就像作為this一樣使用所有它的public方法和屬性。當(dāng)我們針對(duì)同一個(gè)對(duì)象做很多操作的時(shí)候這個(gè)非常有利于簡(jiǎn)化代碼酗失。

20.增強(qiáng)For循環(huán)

java中: for(集合 變量:集合名)

kotlin中:for(變量名in 變量集合)

21.三元表達(dá)式

java中(condition ? then : else)

kotlin中 if (a > b) a else b

fun main(args: Array) {

println(args[0].toInt())

println(args[1].toInt())

println(max(args[0].toInt(), args[1].toInt()))

}

fun max(a: Int, b: Int) = if (a > b) a else b

22. switch case

java中 switch(){

case:

breaak;

}

kotlin 中 when() ->

fun main(args: Array) {

val language = if (args.size == 0) "EN" else args[0]

println(when (language) {

"EN" -> "Hello!"

"FR" -> "Salut!"

"IT" -> "Ciao!"

"DU" -> "dub is a very excellent boy"

else -> "Sorry, I can't greet you in $language yet"

})

}

23.在java中是沒(méi)有""",這樣的符號(hào)

kotlin中:

fun main(args:Array){

val text = """

Tell me and I forget.

Teach me and I remember.

Involve me and I learn.

(Benjamin Franklin).

""".trimMargin()

print(text)

}

24.contait

java String中contains

kotlin

if ("ddd" in array) // collection.contains(obj) is called

println("Yes: array contains ddd")25.循環(huán)

java中:

1.得到key

for(String k:maps.keySet()){

System.out.println(k+":"+maps.get(k));

}

2.得到value

for(String value:maps.values()){

System.out.println(value);

}

3.得到key,和value

for(String string:map.keySet()){

Integer integer = map.get(string);

System.out.println(string +"....."+integer);

}

3.1通過(guò)Entry集合訪(fǎng)問(wèn)义钉,對(duì)Entry感興趣,可以訪(fǎng)問(wèn)與key對(duì)應(yīng)的Value值

for(Entry entry:maps.entrySet()){

System.out.println(entry.getKey()+":"+entry.getValue());

}

4规肴、通過(guò)迭代Key集合訪(fǎng)問(wèn)Map集合捶闸,maps.keySet()返回的是一個(gè)Set集合,Set直接繼承Collection奏纪,所以可以對(duì)其進(jìn)行迭代鉴嗤。

Iterator iterator = maps.keySet().iterator();

while(iterator.hasNext()){

String key = iterator.next();

System.out.println(key+":"+maps.get(key));

}

Iterator> it = map.entrySet().iterator();//Map遍歷

while (it.hasNext()){

Map.Entry next = it.next();

System.out.println("second type --> "+ "key"+ next.getKey()+",value"+next.getValue());

}

5、通過(guò)迭代Values集合訪(fǎng)問(wèn)Map集合序调,maps.values()返回的是Collection醉锅,所以可以對(duì)其迭代。

Iterator iter= maps.values().iterator();

while(iter.hasNext()){

System.out.println(iter.next());

}

6发绢、通過(guò)迭代Entry集合訪(fǎng)問(wèn)Map集合硬耍,maps.entrySet()返回的是一個(gè)Set>,Set直接繼承Collection边酒,所以可以對(duì)其迭代经柴。

Iterator> it = maps.entrySet().iterator();

while(it.hasNext()){

Entry entry = it.next();

System.out.println(entry.getKey()+":"+entry.getValue());

}

7.項(xiàng)目中用到的高級(jí)寫(xiě)法

for (Iterator iterator = map.keySet().iterator(); iterator.hasNext(); ) {

StringBuffer sb = new StringBuffer();

String key = iterator.next();

sb.append("[").append(key).append("]");

for (int k = map.get(key); k < 4; k++){//初使化;循環(huán)體墩朦;循環(huán)條件

sb.append(k + ",");

}

}

kotlin中:fun main(args: Array) {

val numbers = listOf(1, 2, 3)

println(numbers.filter(::isOdd))//是這樣寫(xiě)的

}

fun isOdd(x: Int) = x % 2 == 0

26.如何定義變量

Java 定義變量的寫(xiě)法:String string = "hello"

基本等價(jià)的 Kotlin 定義變量的寫(xiě)法:var string :String = "hello"

27.Java 定義 final 變量的寫(xiě)法:

Java中這么寫(xiě) final String string = "hello"

Kotlin 當(dāng)中應(yīng)該這么寫(xiě) const val string:String = "hello"

28.如何定義函數(shù)

Java 當(dāng)中如何定義函數(shù)坯认,也就是方法,需要定義到一個(gè)類(lèi)當(dāng)中

public boolean testString(String name){...

等價(jià)的 Kotlin 寫(xiě)法:

fun testString(name:String) :Boolean{...

29.如何定義數(shù)組

Java 的數(shù)組非常簡(jiǎn)單,當(dāng)然也有些抽象牛哺,畢竟是編譯期生成的類(lèi):

String[] names = new String[]{"a","b",}

Kotlin 的數(shù)組其實(shí)更真實(shí)一些陋气,看上去更讓人容易理解:

val name:Array = arrayOf{"a","b"}//避免byte short 拆箱,裝箱? 寫(xiě)法為 XArray引润,例如 Int 的定制版數(shù)組為 val ints = intArrayOf(1,2,3)

val emptyStrings :Array = arrayOfNulls(10)//Array?T 即數(shù)組元素的類(lèi)型巩趁。另外,String? 表示可以為 null 的 String 類(lèi)型

30.如何寫(xiě)變長(zhǎng)參數(shù)

Java 的變長(zhǎng)參數(shù)寫(xiě)法如下:

void holle(String...names){...

Kotlin 的變長(zhǎng)參數(shù)寫(xiě)法如下:

fun hello(varargnames:String){...

31.如何寫(xiě)三元運(yùn)算符

Java 可以寫(xiě)三元運(yùn)算符:

int code = isSuccessfully?200:400;

Kotlin 該怎么寫(xiě)呢?

int code = if(isSuccessfully) 200 else 400

31.如何寫(xiě) main 函數(shù)

Java 的寫(xiě)法只有一種:

class MainJava{

public static void main(String []args){

...

Kotlin淳附,main 函數(shù)的寫(xiě)法如下:

class MainKotlin{

companion object{

@jvmStatic

fun main(args:Array){

...

32.如何實(shí)例化類(lèi)

Java中:

Dub dub = new Dub();

Kotlin中:

val dub = Dub();

33.如何寫(xiě) Getter 和 Setter 方法

Java 的 Getter 和 Setter 是一種約定俗稱(chēng)议慰,而不是語(yǔ)法特性,所以定義起來(lái)相對(duì)自由:

public class SetAndGet{

private int x = 0;

publc Int getX(){

return x;

public void setX(int x){

this.x = x;

Kotlin 是有屬性的:

class kotlinSetAndGet{

var x:Int = 0

set(value) {field = value}

get() = field

34.如何延遲初始化成員變量

Java 定義的類(lèi)成員變量如果不初始化奴曙,那么基本類(lèi)型被初始化為其默認(rèn)值? int 0;boolean false; String null;

public class Hello{

private String name;

Kotlin 當(dāng)中直譯為:

class Hello{

private var name:String? = null;//如果不使用可控類(lèi)型别凹,需要加 lateinit 關(guān)鍵字

class Hello{

private lateinit var name:String//lateinit 是用來(lái)告訴編譯器,name 這個(gè)變量后續(xù)會(huì)妥善處置的缆毁。

35.如果我要想定義一個(gè)可以延遲到一定實(shí)際再使用并初始化的 final 變量番川,這在 Java 中是做不到的

Kotlin 有辦法到涂,使用 lazy 這個(gè) delegate 即可:

class Hello{

private val name by lazy{

NameProvider.getName()

36.如何獲得 class 的實(shí)例

java中可以 類(lèi)名.class ,對(duì)象.getClass();Class.forName("");

剛剛接觸 Kotlin 的時(shí)候脊框,獲取 Java Class 的方法卻是容易讓人困惑:

class Hello

val clazz = Hello::class.java? //拿到的是 Kotlin 的 KClass

如果想要拿到 Java 的 Class 實(shí)例,那么就需要前面的辦法了践啄。

37.List集合要重新劃分了

不在是Listlists = new ArrayList<>();

而是private var list MutableList ?= null

38.成員變量的寫(xiě)法

companion object {

private valTAG = FirstActivity::class.java.simpleName

}//寫(xiě)在compaintion里

39.在Kotlin中寫(xiě)上下文不再是類(lèi)名點(diǎn)this了而是

hsMain!!.OnSelectList{ text-> Toast.makeText(this@MainActivity, text, Toast.LENGTH_SHORT).show()

40.Kotlin中的空是Unit表示相當(dāng)于void

41.伸展 spread符是什么鬼? (在數(shù)組前面加上 *)浇雹,Java中可是沒(méi)有

vala=arrayOf(1,2,3)vallist=asList(-1,0,*a,4)

42.Kotlin竟支持局部函數(shù),在Java中也是沒(méi)有的

fun test(graph:Graph){

fun text(current:Vertex,visited:Set){

if(!visited.add(current) return

for(v in curren.neighbors)

test(v,visited)

test(graph.vertices[0],HashSet())

43. 屿讽?.和 U蚜椤!. 的區(qū)別伐谈?

首先聲名在java中是沒(méi)有這個(gè)語(yǔ)法的烂完,

在kotlin中說(shuō)下它們之間的不同

if( is != null) is.change(); 在kotlin中是這樣的 is?.change()

!!.就是非空判斷了

最后是本人在學(xué)習(xí)中有點(diǎn)迷惑的地方,后續(xù)進(jìn)行完善也希望博友知道的進(jìn)行講解QQ:277627117

val qq =et_qq!!.text.toString().trim{ it <=' '}//這里的it是什么意思fun main(args: Array) {

val oddLength = compose(::isOdd, ::length)//???

val strings = listOf("a", "ab", "abc")

println(strings.filter(oddLength))

}

fun isOdd(x: Int) = x % 2 != 0

fun length(s: String) = s.length

fun compose(f: (B) -> C, g: (A) -> B): (A) -> C {

return { x -> f(g(x)) }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诵棵,一起剝皮案震驚了整個(gè)濱河市抠蚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌履澳,老刑警劉巖嘶窄,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異距贷,居然都是意外死亡柄冲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)忠蝗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)现横,“玉大人,你說(shuō)我怎么就攤上這事〗潇簦” “怎么了晦攒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)得哆。 經(jīng)常有香客問(wèn)我脯颜,道長(zhǎng),這世上最難降的妖魔是什么贩据? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任栋操,我火速辦了婚禮,結(jié)果婚禮上饱亮,老公的妹妹穿的比我還像新娘矾芙。我一直安慰自己,他們只是感情好近上,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布剔宪。 她就那樣靜靜地躺著,像睡著了一般壹无。 火紅的嫁衣襯著肌膚如雪葱绒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天斗锭,我揣著相機(jī)與錄音地淀,去河邊找鬼。 笑死岖是,一個(gè)胖子當(dāng)著我的面吹牛帮毁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播豺撑,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼烈疚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了聪轿?” 一聲冷哼從身側(cè)響起爷肝,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屹电,沒(méi)想到半個(gè)月后阶剑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡危号,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年牧愁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片外莲。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猪半,死狀恐怖兔朦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情磨确,我是刑警寧澤沽甥,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站乏奥,受9級(jí)特大地震影響摆舟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邓了,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一恨诱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骗炉,春花似錦照宝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乍丈,卻和暖如春剂碴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诗赌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工汗茄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铭若。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像递览,于是被迫代替她去往敵國(guó)和親叼屠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法绞铃,類(lèi)相關(guān)的語(yǔ)法镜雨,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法儿捧,異常的語(yǔ)法荚坞,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,587評(píng)論 18 399
  • 《Kotin 編程思想·實(shí)戰(zhàn)》 《Kotlin極簡(jiǎn)教程》正式上架: 點(diǎn)擊這里 > 去京東商城購(gòu)買(mǎi)閱讀 點(diǎn)擊這里 >...
    光劍書(shū)架上的書(shū)閱讀 2,061評(píng)論 1 4
  • 前言 人生苦多,快來(lái) Kotlin 菲盾,快速學(xué)習(xí)Kotlin颓影! 什么是Kotlin? Kotlin 是種靜態(tài)類(lèi)型編程...
    任半生囂狂閱讀 26,146評(píng)論 9 118
  • 和一位美國(guó)來(lái)的朋友聊天懒鉴,她極力向我推薦一本風(fēng)行全美的書(shū)诡挂。本來(lái)對(duì)所謂的暢銷(xiāo)書(shū)是敬而遠(yuǎn)之的碎浇,覺(jué)得它們有著太多商業(yè)運(yùn)作的...
    李中東閱讀 2,334評(píng)論 2 50
  • 周末不能懶惰,繼續(xù)寫(xiě)起來(lái)璃俗,終于寫(xiě)到重疾險(xiǎn)了奴璃,極力推薦大家買(mǎi)的,前面說(shuō)那幾個(gè)都可以不買(mǎi)城豁,這個(gè)可是最低配置哈苟穆,您瞅準(zhǔn)嘍...
    樂(lè)予聊保險(xiǎn)閱讀 331評(píng)論 0 0