Kotlin来了

kotlin优点(主要是代码简洁度)

1.避免空指针异常,其次在一个文件中java方法必须写在class里面,而kotlin则没要求

2.在同一个文件中,有class a则不允许在class外的方法(与class同一级别,也就是没写在class里的方法)同名  

3.可以没有;作为语句结尾

 http://www.jianshu.com/p/1a23856bc749

 

基础语法

相等

  • 引用相等

      a === b    // a.identityEqual(b)
  • 结构相等

      a == b        // a?.equals(b) ?: b === null
  • For

    • in等价于foreach

        for ((k, v) in map) {
            println("$k -> $v") }
    • indices下标索引

        fun main(args : Array<String>) { for(i in args.indices) { print(args[i]) } }
    • sizei()

        fun main(args : Array<String>) { var i = 0 while(i < args.size()) { print(args[i++]) } }

var代表变量;val代表常量

参数后面带有?代表可为空

 

创建对象直接 val user = User()就好

重写方法在fun前面override关键字java则是在上面有一个注解的@override

声明一个为空的对象作为变量

private var mTextMessage: TextView? = null
把一个对象转为子对象使用关键字 as
mTextMessage = findViewById(R.id.message) as TextView



万能的:

方法返回一个值,在方法的()后面加:以及返回的类型

例如返回布尔类型的

fun  a():Boolean{
return false
}
在类后面:xxx()这是继承或者实现一个另一个类
例如:class MainActivity : AppCompatActivity() {}

可以被继承的类需要在类前面使用open关键字,
被overite 的方法也需要在方法前使用open


OOP

  1. 默认都是final
  2. package import和java一致,如果出现导入报名冲突可以使用as

     import foo.Bar
     import bar.Bar as bBar

构造函数

  1. 主构造函数只有一个,是类头的一部分跟在类名后面

    • 主构造函数的参数

        class Person (firstName: String) { init {} // 主构造函数初始化代码 } // 等价于 public final class Person { public Person(String name) { // init{} } }
    • 主构造函数 + 属性

        class Person(val name: String, var age: Int) {} // 等价于 public final class Person { private final String name; private int age; public Person(@NotNull String name, int age) {} // getter setter }
    • 如果一个类没有声明任何构造函数,将会生成一个不带参数的主构造函数

  2. 二级构造函数,使用constructor

     class Person(val name: String) { constructor(name: String, parent: Person): this(name) {} }
  3. 创建实例:没有<del>new</del>关键字,直接调用构造函数

     val person = Pserson("ss");

属性

要使用属性只需要使用名称引用即可,就相当于java中的public字段

继承:

所有类的共同父类Any,不属于java.lang.Object,没有任何成员变量,甚至没有equals()hashCode()toString()





普通类

  1. 继承的类有主构造函数

     open class Base(p: Int) {} class Derived(p: Int) : Base(p) {}
  2. 没有主构造函数,那么每个二级构造函数使用super或者委托给另一个构造函数

     class MyView : View {
    
         constructor(context: Context) : super(context) {
         }
    
         constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { } }
  3. 父类的函数必标注open(去掉java中的final关键字)否则子类不允许定义同名函数;因此父类类头上也要标注open
  4. 函数必须加上override标注才能重写父类方法

抽象类 & 接口

单例

好像object 声明修饰的就是一个简单的单例模式
object SDKFactory {
    fun say(name : String) { println("hello ${name}") } } SDKFactory.say("CatDog") // SDKFactory.INSTANCE.say("CatDog")
public final class SDKFactory { public static final SDKFactory INSTANCE; private SDKFactory() { INSTANCE = (SDKFactory)this; } static { new SDKFactory(); } public final void say(@NotNull String name) { // .. } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值