kotlin与Java的区别

初学kotlin:kotlin与Java的区别

1.入口函数的区别:输入输出的区别kotlin中输出用print(ln),并且一个语句完了之后不用加分号

kotlin中变量没有类型,用val与var它会自动推断类型

val为不可变变量,相当于常量 ;var为可变变量   

 指针常量值指针指向的对象不能变,但对象的内容能变

//指针常量与常量指针与c语言中类似,常量指针与指针常量相反

2.kotlin中连接字符串用$符号  如果要更改输出的变量的值,需要加一个括号

3.数组的定义

Java中不可变数组的定义原则:必须要直接或间接明确元素有多少个

kotlin中用Array  eg:val nums=arrayOf(1,2,.....)

4.输出数组元素

Java中   eg:in nums[]  for(int num: nums){System.out.println(num));

kotlin :for(i in 1..5){print(i)}//此时会打印出1,2,3,4,5    

若想要跳格输出eg: for(i int 1..6 step 2){print(i)}//此时结果为 1,3,5

若不想要某个数如for(i int 1 until 5){print(i}此时不会输出5

若想要遍历数组元素for(num in nums){print(num)} 【nums为一个数组】 //这是for-each 方法,不关注索引

如想要反序则for(i in 5 down to 1)

若想要同时取出索引值和元素则for((i,num) in nums.withIndex()){println("i-num")

kotlin 用readLine    变量说明类型 eg:val a:Int=20    这里的20是Int类对象的一个值 【至于这个变量为什么能进行加减乘除这些运算,是因为In类有相应的方法,其他类也是如此】  包装类

kotlin中不支持强制类型转换,但是类有相应的方法

可选类型:String?表示有值或没值null

!!强制表示肯定有值

address?.length 表示:1.如果有值,直接访问对象的length方法                             

                                       2.如果没有值,后面的方法不执行



内存中存储数据

堆的特点:堆的内存由谁创建的就由谁释放

用new 方法产生的对象放在堆里

临时变量作用域结束后由系统自己释放

栈的特点:First in ,Last out【FULO】先进后出

Java和kotlin是跨平台的高级语言

解析器能够将高级语言转换为JVM虚拟机能够识别的语言  即.class 文件,字节码文件

将文件转换为字节码文件右击文件?open in > terminal>


硬盘和内存的区别

如果要运行一个文件,就会把硬盘里的文件加载到内存中如果内存不够,会放到缓存中,如果缓存不够,放到二级缓存以此类推

栈帧可以理解为方法

eg:public class Testperson {

public int dosomething(){

int a=1;        int b=2;        int c=(a+b)*5;        System.out.println(Thread.currentThread());//输出当前线程        return c;    }

public static void main(String args){

    Testperson testperson=new Testperson();        int  result=testperson.dosomething();        System.out.println(result);    }

}

访问权限:

public   任意位置都可访问:同一个包中、当前类的子类、同一个文件、同一个模块

private   当前类可以访问,其他位置不能访问

protected   当前类、子类能访问,同一个包能访问,外部包、外部模块不能访问

default   与protected类似

Java中类创建后并不会立即占据内存

Animal a1=new  Animal() 经历的过程(仅仅是一个例子):

1.当用new方法创建对象时,在方法区寻找类的信息

2.如果没有这个类,类加载器将当前这个类的字节码文件加载到内存中    【这个类在内存中的形式是什么?   是类对象(类对象是虚的,但是它占据内存)】

3.在堆中申请内存空间

4.当前的创建的对象的地址会放在操作数栈中

5.在当前线程栈->方法栈帧->局部变量区申请内存空间给a1

6.从操作栈中弹出顶部操作数(即4中创建的对象的地址)赋值给a1

构造方法:为什么要有构造方法?

1.默认的无参构造方法

类本身不知道如何创建自己的对象,对象本身是由Object(){}来创建,再由当前这个类来初始化这个对象

2.重载的有参方法

(1)为了方便初始化值(2)在创建对象的同时给予某些需要的数据(时机)

如何巧妙使用private来私有化构造方法

给外部提供一个单例对象(整个程序运行中这个类只有一个对象)

1.私有化构造方法->外部无法创建这个类的对象

private Animal(){}

2.提供一个静态成员属性->静态变量,只会初始化一次

private static Animal instance=new Animal();

3.给外部提供一个静态方法->获取这个对象

//注:这里没有考虑内存消耗和线程安全

public static Animal getInstance(){return instance }

加上static这个方法就变成了类方法,如果没有static就是普通方法,需要创建一个对象去调用

4.外部获取这个对象

Animal.getInstance();

系统类库中一般以instance、shared、default开头的方法通常提供单例对象

kotlin(方法是函数,但Java中叫方法而不叫函数)

构造函数

1.主构造函数

当没有修饰符修饰构造函数或没有参数时,可以省略;反之必须要写constructer()class Person constructor(){}

2.次构造函数

constructer(name String):this(){]

注:a.次构造函数必须直接调用主构造函数

        b.如果有父类,必须调用父类的构造函数

//次构造函数必须继承主构造函数

open class Father3 constructor(name: String)

 class Person8 constructor (name:String):Father3(name){

constructor(name:String,age:Int):this(name)

}

kotlin 实现单例(不完善版本)

class Person9 private construtor(){

companion object{//companion 这个相当于Java中的static

private val defaultInstance=Person9()

fun getInstance():Person9{

return defaultInstance

}

}

}

注:java中的顶级类是Object类,kotlin中是Any类




kotlin 声明属性的方式1

//形式参数

 //临时定义一个变量保存外部传递过来的值

 //注意:aName和aAge是临时的,只能在两种情况下可以使用

   //1. 声明变量时 变量的初始值是外部通过主构造函数传递过来

class L3Person constructor(aName:String,aAge:Int){

  var name:String = aName

 var age:Int = aAge

 }

   //2. 初始化块中调用

   class L3Person constructor(aName:String,aAge:Int){

    var name:String = ""

   var age:Int = 0

    //主构造函数调用之后 如果有声明 就会调用init初始化块

     init {

    name = aName

       age = aAge

   }

   }

声明属性的方式2

 //在主构造函数中直接声明属性 用val var

  //需要在创建对象时给初始值的属性才放到主构造函数中

   class L3Person constructor(

     private var aName:String,

    val aAge:Int

   ){

      var score = 98.5

 }

方法声明

//无参 无返回值的函数

 //kotlin

 fun test():Unit{}

  //Java

public void test(){}

//有参 无返回值的函数

  //kotlin

 fun test1(a:Int,b:Int):Unit{}

   //java

 public void test1(int a,int b){}

  //有参 有返回值的函数

 //kotlin

   fun test2(a:Int,b:Int):Int{

       return a + b

  }

  //java

    public int test3(int a,int b){

    return  a + b;

  }

   //如果函数实现只有一行 可以省略{}

 fun test3(a:Int, b:Int):Int = a+b

//如果函数实现只有一行 可以省略{}

  //返回值类型也可以省略

   fun test4(a:Int, b:Int) = a+b

Java如果方法是void类型的,它是没有返回值的,但如果方法的实现即函数体里有return,此时这个return没有返回值,它的作用是能够退出当前这个模块

主构造函数里声明val/var表示是类的属性

kotlin中返回值为空用Unit表示

最后在这里想要浅说一下:

写程序有几个阶段:

1.在文本编辑器或IDE中编写代码

2.预编译.e

3.汇编:把高级语言转化为汇编语言(汇编语言介于高级语言和机器语言之间).s

4.编译:把汇编文件转化为二进制语言.o

5.链接:把所有.o文件连接成可执行文件.exe、.dmg

6.运行:得到对应的结果

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

推荐阅读更多精彩内容