Java 和 Kotlin 语法区别

1.extends  用 (冐号):代替。MainActivity extends Activity,

现在是  MaiActivity :Activity()

2.interface 用(逗号),代替。 A interface B{}

现在是  ,B{}

3.override 不现进 注解,而是用到了方法中

这样写 override fun onCreate(saveInstanceState:Bundle?)

4. 没有switch case 了,

现在用when()   ->

5.kotlin没有object类

现在是Any()没有Object()

6.跟java一样不能继承final类

继承open abstract 类,并且默认是open,必须要写修饰符

7.不在有分号,

不在有分号,不在有分号,不过可以写的

8. java中没能返回值是void,返回值写在小括号左面

现在改成空方法是Unit,方法用fun1, fun2,代替, 并且返回值要写在小括号后面

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

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

返回值可以用一个表达式写funadd(x:Int,y:Int):Int= x+ y

9.jave中每珍上对象都要new

kotlin不需要new这个关键字

10.在java中给控件不能直接赋值,

在kotlin里  通过import kotlinx.android.synthetic.main.demo.*

text1.text = "hello world kotlin"这样就完成了"hello world kotlin"

11.for循环也不一样了  在java中是这样写的for(int i = ; i < 10; i++)

Kotlin是这样写的for (i in 0..99) {

12.java中方法在括号,

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

@Override

public void run() {

main_srl.setRefreshing(false);

}

}, 5000);kotlin是这样写的Handler().postDelayed({main_srl!!.isRefreshing =false},5000)}

13.调用方法的不同,个人目前发现除了调用set..Listener 还是原来的方法,其它的都改变了

一.

java中

main_srl.setOnRefreshListener(

kotlin中

main_srl!!.setOnRefreshListener{...

二.java中

main_srl.setRefreshing(false)

kotlin中

main_srl!!.isRefreshing = false    //双叹号的用法???

14 .->的用法

java中是这样写的

recyclerViewAdapter.setOnItemClickedListener(new HeaderRecyclerViewAdapter.onItemClickedListener() {

@Override

public void onItemClick(View view, int position) {

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

}

});

kotlin这样写的recyclerViewAdapter.setOnItemClickedListener{ view, position-> Toast.makeText(this@MainActivity, "position " + position, Toast.LENGTH_SHORT).show()}

15 . 强制转换

java中  mHeader(View)

kotlin 中是mHeader as View

Add-non-null aserted 就是改变为不是空的 mHeader!!

Case expressino      就是强制转换 mHeader as View

16.变量

1.java中分为二类(基本,引用)八种(byte short int long flout double char boolean)

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

1.基本类型中 java中有的kotlin也有,就是不能给一个int赋值为double

var i Int = 1;

var d Double = i .toDouble();  //其它也类似这样没有java中的自动提升,强转的说法了!!!

2. | & 或 和 和 改为了  or 和 and

var testOr = Flag or Flags

var testAnd = Flag and Flags

3.变量 var  val  (这个类似java中的final)

4.属性  kotlin没有get,set方法,直接赋值,直接使用

17. Anko具听说是一个很代替xml绘制ui的强大的类库

18.java中asycTask

kotlin 中 async{

run(){

uiThread{...}

}}

19.with函数

with是一个非常有用的函数,它包含在Kotlin的标准库中。它接收一个对象和一个扩展函数作为它的参数,然后使这个对象扩展这个函数。这表示所有我们在括号中编写的代码都是作为对象(第一个参数)的一个扩展函数,

我们可以就像作为this一样使用所有它的public方法和属性。当我们针对同一个对象做很多操作的时候这个非常有利于简化代码。

20.增强For循环

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

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

21.三元表达式

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中是没有""",这样的符号

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.循环

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通过Entry集合访问,对Entry感兴趣,可以访问与key对应的Value值

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

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

}

4、通过迭代Key集合访问Map集合,maps.keySet()返回的是一个Set集合,Set直接继承Collection,所以可以对其进行迭代。

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、通过迭代Values集合访问Map集合,maps.values()返回的是Collection,所以可以对其迭代。

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

while(iter.hasNext()){

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

}

6、通过迭代Entry集合访问Map集合,maps.entrySet()返回的是一个Set>,Set直接继承Collection,所以可以对其迭代。

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

while(it.hasNext()){

Entry entry = it.next();

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

}

7.项目中用到的高级写法

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++){//初使化;循环体;循环条件

sb.append(k + ",");

}

}

kotlin中:fun main(args: Array) {

val numbers = listOf(1, 2, 3)

println(numbers.filter(::isOdd))//是这样写的

}

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

26.如何定义变量

Java 定义变量的写法:String string = "hello"

基本等价的 Kotlin 定义变量的写法:var string :String = "hello"

27.Java 定义 final 变量的写法:

Java中这么写 final String string = "hello"

Kotlin 当中应该这么写 const val string:String = "hello"

28.如何定义函数

Java 当中如何定义函数,也就是方法,需要定义到一个类当中

public boolean testString(String name){...

等价的 Kotlin 写法:

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

29.如何定义数组

Java 的数组非常简单,当然也有些抽象,毕竟是编译期生成的类:

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

Kotlin 的数组其实更真实一些,看上去更让人容易理解:

val name:Array = arrayOf{"a","b"}//避免byte short 拆箱,装箱  写法为 XArray,例如 Int 的定制版数组为 val ints = intArrayOf(1,2,3)

val emptyStrings :Array = arrayOfNulls(10)//Array T 即数组元素的类型。另外,String? 表示可以为 null 的 String 类型

30.如何写变长参数

Java 的变长参数写法如下:

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

Kotlin 的变长参数写法如下:

fun hello(varargnames:String){...

31.如何写三元运算符

Java 可以写三元运算符:

int code = isSuccessfully?200:400;

Kotlin 该怎么写呢?

int code = if(isSuccessfully) 200 else 400

31.如何写 main 函数

Java 的写法只有一种:

class MainJava{

public static void main(String []args){

...

Kotlin,main 函数的写法如下:

class MainKotlin{

companion object{

@jvmStatic

fun main(args:Array){

...

32.如何实例化类

Java中:

Dub dub = new Dub();

Kotlin中:

val dub = Dub();

33.如何写 Getter 和 Setter 方法

Java 的 Getter 和 Setter 是一种约定俗称,而不是语法特性,所以定义起来相对自由:

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 定义的类成员变量如果不初始化,那么基本类型被初始化为其默认值  int 0;boolean false; String null;

public class Hello{

private String name;

Kotlin 当中直译为:

class Hello{

private var name:String? = null;//如果不使用可控类型,需要加 lateinit 关键字

class Hello{

private lateinit var name:String//lateinit 是用来告诉编译器,name 这个变量后续会妥善处置的。

35.如果我要想定义一个可以延迟到一定实际再使用并初始化的 final 变量,这在 Java 中是做不到的

Kotlin 有办法,使用 lazy 这个 delegate 即可:

class Hello{

private val name by lazy{

NameProvider.getName()

36.如何获得 class 的实例

java中可以 类名.class ,对象.getClass();Class.forName("");

刚刚接触 Kotlin 的时候,获取 Java Class 的方法却是容易让人困惑:

class Hello

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

如果想要拿到 Java 的 Class 实例,那么就需要前面的办法了。

37.List集合要重新划分了

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

而是private var list MutableList ?= null

38.成员变量的写法

companion object {

private valTAG = FirstActivity::class.java.simpleName

}//写在compaintion里

39.在Kotlin中写上下文不再是类名点this了而是

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

40.Kotlin中的空是Unit表示相当于void

41.伸展 spread符是什么鬼  (在数组前面加上 *),Java中可是没有

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

42.Kotlin竟支持局部函数,在Java中也是没有的

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. ?.和 !!. 的区别?

首先声名在java中是没有这个语法的,

在kotlin中说下它们之间的不同

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

!!.就是非空判断了

最后是本人在学习中有点迷惑的地方,后续进行完善也希望博友知道的进行讲解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)) }

}

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

推荐阅读更多精彩内容