欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java中static在Kotlin中怎么用

小編給大家分享一下Java中static在Kotlin中怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)于2013年成立,先為漢陽(yáng)等服務(wù)建站,漢陽(yáng)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為漢陽(yáng)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

static修飾符是java里面非常常用的一個(gè)東西,用法也非常多。然而,在kotlin里竟然沒(méi)有這個(gè)東西!那該如何替代呢?本文就總結(jié)了下java里面static的幾種常見(jiàn)用法在kotlin里的替代方式。

static在java里面的用法總結(jié)

static在java里面的用法有很多,最常用的有下面幾種:

靜態(tài)變量及方法  靜態(tài)初始化  靜態(tài)內(nèi)部類(lèi)

下面我們就看看這幾種場(chǎng)景在kotlin是如何實(shí)現(xiàn)的。

場(chǎng)景一:靜態(tài)變量及方法

靜態(tài)變量及方法可能是我們平時(shí)用到static最多的地方,我們先看看java里面是如何做的。

java靜態(tài)變量及方法介紹:

首先,是靜態(tài)變量和方法的定義:

public class StaticTest {  public static int STATIC_VAR = 0;  public static void staticMethod(String str){    System.out.println(str);  }}

然后是靜態(tài)變量和方法的使用:

StaticTest.STATIC_VAR = 10;StaticTest.staticMethod("hello");

java的實(shí)現(xiàn)方式大家都非常熟悉了,下面著重說(shuō)說(shuō)kotlin是如何實(shí)現(xiàn)的。

kotlin替代靜態(tài)變量及方法的方案

kotlin通過(guò)引入“伴生對(duì)象”的概念來(lái)替代java里的靜態(tài)變量及方法。

“伴生對(duì)象”這個(gè)名詞聽(tīng)上去很古怪,其實(shí)非常簡(jiǎn)單:在類(lèi)的內(nèi)容使用companion來(lái)標(biāo)記一個(gè)對(duì)象。所有需要“靜態(tài)化”的變量和方法都放在這個(gè)對(duì)象里。

下面是定義伴生對(duì)象的代碼:

class StaticTest {  companion object{//伴生對(duì)象是可以指定名字的,不過(guò)一般都省略掉。    var STATIC_VAR = 0    fun staticMethod(str: String?) {      println(str)    }  }}

接下來(lái)看看如何使用伴生對(duì)象,伴生對(duì)象只能通過(guò)類(lèi)名來(lái)訪(fǎng)問(wèn),使用方法和java差不多:

StaticTest.STATIC_VAR = 100StaticTest.staticMethod("hello")

kotlin的伴生對(duì)象解決了什么問(wèn)題?

大家可能會(huì)好奇,為什么kotlin要用這么一個(gè)奇怪的方式來(lái)解決這個(gè)問(wèn)題呢?

我的理解是有兩個(gè)原因:

第一,使用伴生對(duì)象體現(xiàn)了kotlin一貫的設(shè)計(jì)理念:一切都是對(duì)象!伴生對(duì)象也是對(duì)象!而java的static,顯然和對(duì)象沒(méi)有關(guān)系。

第二,伴生對(duì)象解決了java靜態(tài)變量及方法的一個(gè)常見(jiàn)的反模式:靜態(tài)方法及變量可以通過(guò)對(duì)象的引用來(lái)訪(fǎng)問(wèn)。

還是拿上面的例子,java的靜態(tài)變量及方法可以通過(guò)類(lèi)引用和對(duì)象引用兩種方法訪(fǎng)問(wèn):

//通過(guò)類(lèi)引用訪(fǎng)問(wèn)StaticTest.STATIC_VAR = 10; StaticTest.staticMethod("hello");//通過(guò)對(duì)象引用訪(fǎng)問(wèn)StaticTest obj = new StaticTest();obj.STATIC_VAR = 10;obj.staticMethod("hello");

而通過(guò)對(duì)象引用訪(fǎng)問(wèn)靜態(tài)變量及方法,顯然是不合適的。但是在java里卻沒(méi)有辦法從語(yǔ)法層面避免這個(gè)問(wèn)題。

而kotlin的伴生對(duì)象只能通過(guò)類(lèi)引用訪(fǎng)問(wèn),從語(yǔ)法的層面解決了這個(gè)問(wèn)題:

//使用類(lèi)引用訪(fǎng)問(wèn)StaticTest.STATIC_VAR = 100StaticTest.staticMethod("hello")  //不能使用對(duì)象引用訪(fǎng)問(wèn)val obj = StaticTest()obj.STATIC_VAR = 100 //編譯錯(cuò)誤obj.staticMethod("hello") //編譯錯(cuò)誤

總之,kotlin里每個(gè)新的語(yǔ)言特性,都是為了填補(bǔ)java的某一個(gè)坑。

場(chǎng)景二:靜態(tài)初始化

java里的靜態(tài)初始化可以在類(lèi)加載的時(shí)候初始化一些靜態(tài)變量,比如:

public class StaticTest {  public static int STATIC_VAR = 0;    static {    STATIC_VAR = 100;    System.out.println("in static init");  }    public static void main(String[] args) {    System.out.println(StaticTest.STATIC_VAR);  }}

上面的代碼執(zhí)行結(jié)果如下:

in static init100

在kotlin里,因?yàn)閖ava的靜態(tài)變量及方法都是放在伴生對(duì)象里實(shí)現(xiàn)的,而伴生對(duì)象也是一個(gè)普通對(duì)象,所以可以通過(guò)伴生對(duì)象的init方法來(lái)實(shí)現(xiàn)變量的初始化,代碼如下:

class StaticTest {  companion object{//伴生對(duì)象是可以指定名字的,不過(guò)一般都省略掉。    var STATIC_VAR = 0    init {      STATIC_VAR = 100      println("in companion object init")    }  }}

執(zhí)行代碼:

println(StaticTest.STATIC_VAR)

結(jié)果如下:

in companion object init100

可以看到,kotlin的實(shí)現(xiàn)方式要比java的更加一致,既然大家都是對(duì)象,所以都是通過(guò)init來(lái)初始化的。而java里,非靜態(tài)變量是通過(guò)構(gòu)造函數(shù)來(lái)初始化的,而靜態(tài)變量是通過(guò)static代碼塊來(lái)初始化的,兩者很不一致。

場(chǎng)景三:靜態(tài)內(nèi)部類(lèi)

java的內(nèi)部類(lèi)有兩種,普通內(nèi)部類(lèi)和靜態(tài)內(nèi)部類(lèi)。二者的區(qū)別是前者可以訪(fǎng)問(wèn)外部類(lèi)的變量,而后者不可以。同時(shí)普通內(nèi)部類(lèi)會(huì)持有外部類(lèi)的一個(gè)引用,靜態(tài)內(nèi)部類(lèi)則沒(méi)有。

public class StaticTest {    private int out = 0;    class InnerClass{    public void InnerClassMethod(){      out = 100; //可以訪(fǎng)問(wèn)外部類(lèi)的變量    }  }  static class StaticInnerClass{    public void StaticInnerClassMethod(){      out = 100; //編譯錯(cuò)誤,不可以訪(fǎng)問(wèn)外部類(lèi)的變量    }  }}

而kotlin的內(nèi)部類(lèi)也有兩種:內(nèi)部類(lèi)和嵌套類(lèi)。從語(yǔ)法上說(shuō),二值的差別就是前者多一個(gè)inner修飾符。

下面是和java的比較:

kotlin的內(nèi)部類(lèi)(使用inner修飾符)相當(dāng)于java的普通內(nèi)部類(lèi),可以訪(fǎng)問(wèn)外部變量,同時(shí)持有外部對(duì)象的引用。  kotlin的嵌套類(lèi)(沒(méi)有inner修飾符)相當(dāng)于java的靜態(tài)內(nèi)部類(lèi),不可以訪(fǎng)問(wèn)外部變量

kotlin嵌套類(lèi)的例子:

class StaticTest {  var out = 0  inner class InnerClass{    fun InnerClassMethod(){      out = 100 //內(nèi)部類(lèi)可以訪(fǎng)問(wèn)外部變量    }  }}

kotlin內(nèi)部類(lèi)的例子:

class StaticTest {  var out = 0  class InnerClass{    fun InnerClassMethod(){      out = 100 //編譯錯(cuò)誤,嵌套類(lèi)不可以訪(fǎng)問(wèn)外部變量    }  }}

通過(guò)對(duì)比,大家應(yīng)該很容易的搞清楚kotlin里內(nèi)部類(lèi)和嵌套類(lèi)的區(qū)別了。

以上是“Java中static在Kotlin中怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前題目:Java中static在Kotlin中怎么用
網(wǎng)站URL:http://aaarwkj.com/article26/gghccg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)頁(yè)設(shè)計(jì)公司做網(wǎng)站、定制網(wǎng)站、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
91国语对白在线观看| 久久亚洲国产成人精品性色| 日本美女午夜福利视频| 国产精品一区二区三区在线| 国产精品一区在线免费看| 超碰欧美黄色免费在线| 91免费人成网站在线观看| 日韩电影在线播放中文字幕| 亚洲av毛片在线免费播放| 日韩最新视频一区二区三| 人妻av天堂综合一区| 精品国产三级a在线观看网站| 2022国产精品一区| 99热国产这里只有精品| 91精品手机在线观看| 色哟哟视频免费在线观看| 国产三级自拍视频在线观看| 亚洲午夜精品一区二区久久| 日本岛国一区二区在线| 尤物视频在线观看羞羞| 国产欧美日本综合一区| 国产精品一区二区剧情熟女| 国产精品大屁股一区二区| 蜜桃人妻av一区二区三区| 日韩国产一区二区三区精品| 亚洲成av人片又粗又长| 香蕉视频欧美久久精品| 亚洲天堂av在线观看| 日韩成人三级一区二区| 精品久久久久久久久极品| 少妇人妻偷人精品系列| 日本中文字幕在线播放一区| 国产爆操美女在线观看| 婷婷网色偷偷亚洲男人| 一区二区三区在线观看美女视频| 亚洲欧美激情啪啪啪| 日本写真视频一区二区三区| 亚洲精品中文字幕乱码| 日本精品一区二区三区免费| 国产日韩欧在线视频| 免费国产成人高清在线视频|