Kotlin

原创 2018年04月15日 18:58:31
1、kotlin(肯棱鳞)  开发区块链 基于jvm的开发语言
2、kotlin 语言特点
  集合各种语言的优点:java scala c# groovy python c c++
  简介 ---主要针对java
  安全   ---通过编译可以规避空指针安全
  互操作  ---可以配合java
  oop+FP  ---支持面向对象和函数编程
  协程   ---和异步操作相同,相当于线程,但比java结束空间
  DSL(领域特定语言)
3、kotlin的前景
kotlin script(gradle)
java 虚拟机应用
   web kotlinee
   javafx
前端开发  kotlinjs
android开发
ios开发
kotlin Native程序(完全抛弃jvm虚拟机)
全栈工程师
4、基本语法:HelloWrold
  fun main(args : Array<String>):Unit{  //函数 Unit 相当与void 无返回值
  println("HelloWorld");
  }
   (1)基本数据类型 8中基本类型,都是大写 ---类似于java
  var a:Boolean =true
  var b:Byte=10
  var c:Short=20
  var d:Char='a'
  var e:int=10
  var f:Float =10.1234567
  var g :Double=1.1234567
  var h:Long =10L
    (2)智能类型推断
   var a=true ---如果有赋值,可以不用写数据类型,可以自己判断出他是Boolean类型
   var b=10
   (3)原样输出字符串
Java
   String s="中国\n广东省\n深圳市"
Kotlin 也可以同上写法
   var s="""
     中国
     广东省
     深圳市
     """.trimIndent()
    (4) 区间
  定义1到100
 var range=1..100
  定义‘a’到‘Z’
  val charRange1=‘a’..'z'
    (5)空安全处理
    Java
    string s=null;
    s.length(); ---空指针异常
   Kotlin
   var s:String=null  ---错误
   var  s:String?=null
   s?.length ---空安全调用  当s!=null时,才会调用。length
    (6)常见Exception有哪些
    JAVA 
   if(data!=null&&data.value!=null){
   data.value.toString();
    }
   Kotlin
   data?.value?.toString()
  (7)apply表达式
Java
  List<String> list=null;
   if(list!=null){
    list.add("张三");
    list.add("李四");
    list.add("王五");
   }
Kotlin
   list?.add("张三");
   list?.add("李四");
   list?.add("王五");
  或 apply函数
   list?.apply{
   add("张三");
   add("李四");
   add("王五");
    }
  (8)标签处返回
  loop@for (c1 in s1){
   for(c2 in s3){
     if(c1=='b1'&& c2=='2'){
      break@loop  ---直接可以跳出外层for 跳出打标签出
   }
   }
   }
  (9) statement & Exception
 java 声明式语法:
  声明 no return value
  public int max(int a,int b){
     if(a>b){
    return a;
   }else{
    return b;
   }
  }
  kotlin 表达式语法
  表达式 return value
  fun max(a:Int,b:Int):Int{---函数 函数名 参数 返回值
    return if(a>b){
    a
   } else{
    b
   }
   }
   只有一个时
   fun max(a:Int,b:Int){
      return if(a>b) a else b
     }
  Java
 public String todo(){
   if(age>=1|| age<=6){
      return "没有上学";
   }else if(age==7){
   return "开始上学";
   }else if (age==12){
   return "开始上中学";
    } else if(age==15){
   return "开始上高中";
   }else{
    return "开始上社会大学";
    }
   }
Kotlin
   fun rodo():String{
    return when(age){ ---相当于switch
     in 1..6->"没有上学"  --in 相当于in
      7->"开始上小学"
     12->"开始上中学"
     15->"开始上高中"
      18->"开始上大学"
    else->"在上社会大学"
   }
   }
   (10)默认参数和具名参数
  Java
  public void send(String path,String method){
    //网络请求
   }
 public void send(String path){//默认method是GET
 //GET网络请求
  }
  Kotlin
 fun send(path:String,method:String="GET"){
  }
调用
  send(path,method)
  send(path,"www.baidu.com")
  智能类型转换
 Java
 Animal animal =new Dao();
 if(animal istanceof Dog){
   Dog dog=(Dog) animal;
   dog.wangwang();
 }
 Kotlin 
  if(animal is Dog){---is 相当于instanceof
   animal.wangwang()
  }
 (11)by lazy
  class  person{
   val  name byLazy{"张三"} ---惰性加载,线程安全  val只能初始化一次
   }
(12)扩展函数
  Java
public class StringUtils{
   public static boolean isEmpty(String str){
    return str==null||str.length()==0;
  }
}
Kotlin
 fun String.isEmpty():Boolean{
  return this=null || this.length==0
}
  fun main(args:Array<String>):Unit{
  val str="张三"
  str.isEmpty()
 }
(13)Object 单例
Java
  public class NetManager{
    private static NetManager netManager=new Netmanager();
  private Netmanager();
  public static NetManager getInstance(){
   return netManager;
   }
   }
Kotlin
  object NetManager{ ---前面加Object就是单例模式,以后不能在new出来
  }
(14)data class
java 的bean类
  Kotlin数据类
  data class Person(var name:String,var age:Int);
(15)函数式编程
 高级函数  可以作为参数或返回值
   fun test():()->Unit{--返回值是函数 没有返回值
   var a=10
  return {
   println(a++)
   }
  }
   fun cacl(a:Int,b:Int,block:(Int,Int)->Int):Int{
   return block(a,b)
  }
Lambda表达式
sum =cacl(a,b,{a,b->   ---匿名函数
a+b
})
(16)接口回调和函数回调
   Java 接口回调
   Kotlin 函数回调
  private  Lateinit var callBack:(String)->Unit   ----Lateinit 延迟初始化
   fun setCallBack(callBack:(String)->Unit){
  this.callBack=callBack
 }
  fun execute(){
  //业务逻辑满足回调
  callback("张三");
   }
(17)DSL  领域特定语言
    html{
    head{
         title{+"XML encoding with Rotlin"}
        }
     body{
       h1{+"XML encoding with Rotlin"}
    }
   }
(18)用于android
(19)js应用  编写kotlin代码 js自动生成
      1、获取canvas  画布
     val canvas =document.getElementById("canvas") as HTMLcanvsElement
      2、代码中不能直接操作canvas 需要通过context
      val ctx=canvas.getContext("2d") as canvasRenderingContext2D
     //宽度和高度
   val width=window.innerwidth
   val  heigth=window.innerHeight 
(20)java fx 

让ActiveX控件设计状态在容器中的大小锁定!

让ActiveX控件设计状态时在容器中的大小锁定,可以使用下面这个宏,该宏为无窗口的ActiveX控件,在vc++.net(atl7.0)下编译成功.#ifndef __CONTROL_NO_WIND...
  • lu_zi
  • lu_zi
  • 2002-11-04 13:09:00
  • 836

Kotlin object express 匿名内部类

Android 中建立一个handler 内部类处理多线程 var handler = object: Handler() { override fun handleMes...
  • Airoyee
  • Airoyee
  • 2015-10-15 09:49:28
  • 4512

Android Kotlin 开发--偶遇Rxjava、Retrofit进行网络请求

概述上篇写了Kotlin在Android中的使用初体验小Demo,对Kotlin还不知道如何下手的小伙伴可以去看看,请收下我的膝盖(抱拳)Android Kotlin 开发–初体验Demo,大神请绕道...
  • wu996489865
  • wu996489865
  • 2017-05-30 18:01:03
  • 5695

java保证线程安全的两种方式

更新:我用C++,Java和Python简单示范了一下同步线程的机制,链接 浅议Rust开发中的线程安全,有兴趣的可以看一下。 JVM有主内存(Main Memory)和工作内存(Working M...
  • xiangxianghehe
  • xiangxianghehe
  • 2016-04-12 17:29:27
  • 10822

多线程

多线程 1:多线程的概念 就是应用程序有多条执行路径 进程:正在运行的程序。 线程:进程的执行路径,执行路径。 2:如何使用多线程程序 A:方式1 继承Thread类。 a:创建一个类继承Thread...
  • u013479321
  • u013479321
  • 2014-02-22 22:14:44
  • 386

Kotlin的那些事儿

最近Kotlin可谓是大火,谷歌影响力还是不容小觑的。 苦逼的程序猿们是不是该学一波Kotlin了呢?下面放一些在网上收集的十分简洁的干货 Kotlin 基本语法 先说个...
  • lty406910111
  • lty406910111
  • 2017-05-22 14:51:19
  • 551

Kotlin学习笔记

这份笔记是我在阅读kotlin官方文档的时候整理记录的 转载请标明出处: —————————————————————————– 1.常识 private >>> 只在该类(以及它的成...
  • zull_kos_mos
  • zull_kos_mos
  • 2017-06-20 16:30:25
  • 1739

线程安全

线程安全 就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,其他线程不能访问,只有当该线程访问完成其他线程才能进行访问。不会出现数据不一致或污染。 线程不安全 就是不提供数据保护,多...
  • u012385217
  • u012385217
  • 2016-05-26 11:11:08
  • 158

实现线程安全的几种方式

实现线程安全的几种方式
  • qq_35181209
  • qq_35181209
  • 2017-07-08 10:50:31
  • 328

多线程(二)

线程安全问题这里以简单的卖票程序为例开始本文的讲解,通过运行该卖票程序可以发现有可能打印出0、-1、-2等错票,这就表明多线程的运行出现了安全问题。产生的原因可归纳为两点: 线程任务中有处理到共享的数...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2017-10-08 11:31:19
  • 666
收藏助手
不良信息举报
您举报文章:Kotlin
举报原因:
原因补充:

(最多只允许输入30个字)