在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Kotlin替代Java重構(gòu)AOSP應(yīng)用

谷歌開(kāi)發(fā)者 ? 來(lái)源:Android開(kāi)發(fā)者 ? 作者:Android ? 2021-09-16 09:26 ? 次閱讀

兩年前,Android 開(kāi)源項(xiàng)目 (AOSP) 應(yīng)用團(tuán)隊(duì)開(kāi)始使用 Kotlin 替代 Java 重構(gòu) AOSP 應(yīng)用。之所以重構(gòu)主要有兩個(gè)原因: 一是確保 AOSP 應(yīng)用能夠遵循 Android 最佳實(shí)踐,另外則是提供優(yōu)先使用 Kotlin 進(jìn)行應(yīng)用開(kāi)發(fā)的良好范例。Kotlin 之所以具有強(qiáng)大的吸引力,原因之一是其簡(jiǎn)潔的語(yǔ)法,很多情況下用 Kotlin 編寫(xiě)的代碼塊的代碼數(shù)量相比于功能相同的 Java 代碼塊要更少一些。此外,Kotlin 這種具有豐富表現(xiàn)力的編程語(yǔ)言還具有其他各種優(yōu)點(diǎn),例如:

空安全: 這一概念可以說(shuō)是根植于 Kotlin 之中,從而幫助避免破壞性的空指針異常;

并發(fā): 正如 Google I/O 2019 中關(guān)于 Android 的描述,結(jié)構(gòu)化并發(fā) (structured concurrency) 能夠允許使用協(xié)程簡(jiǎn)化后臺(tái)的任務(wù)管理;

兼容 Java: 尤其是在這次的重構(gòu)項(xiàng)目中,Kotlin 與 Java 語(yǔ)言的兼容性能夠讓我們一個(gè)文件一個(gè)文件地進(jìn)行 Kotlin 轉(zhuǎn)換。

Android 開(kāi)源項(xiàng)目 (AOSP) 應(yīng)用

https://android.googlesource.com/platform/packages/apps/

Kotlin

https://kotlinlang.org/

Google I/O 2019

https://developer.android.google.cn/kotlin/first

AOSP 團(tuán)隊(duì)在去年夏天發(fā)表了一篇文章,詳細(xì)介紹了 AOSP 桌面時(shí)鐘應(yīng)用的轉(zhuǎn)換過(guò)程。而今年,我們將 AOSP 日歷應(yīng)用從 Java 轉(zhuǎn)換成了 Kotlin。在這次轉(zhuǎn)換之前,應(yīng)用的代碼行數(shù)超過(guò) 18,000 行,在轉(zhuǎn)換后代碼庫(kù)減少了約 300 行。在這次的轉(zhuǎn)換中,我們沿襲了同 AOSP 桌面時(shí)鐘轉(zhuǎn)換過(guò)程中類(lèi)似的技術(shù),充分利用了 Kotlin 與 Java 語(yǔ)言的互操作性,對(duì)代碼文件一一進(jìn)行了轉(zhuǎn)換,并在過(guò)程中使用獨(dú)立的構(gòu)建目標(biāo)將 Java 代碼文件替換為對(duì)應(yīng)的 Kotlin 代碼文件。因?yàn)閳F(tuán)隊(duì)中有兩個(gè)人在進(jìn)行此項(xiàng)工作,所以我們?cè)?Android.bp 文件中為每個(gè)人創(chuàng)建了一個(gè) exclude_srcs 屬性,這樣兩個(gè)人就可以在減少代碼合并沖突的前提下,都能夠同時(shí)進(jìn)行重構(gòu)并推送代碼。此外,這樣還能允許我們進(jìn)行增量測(cè)試,快速定位錯(cuò)誤出現(xiàn)在哪些文件。

AOSP 桌面時(shí)鐘應(yīng)用的轉(zhuǎn)換過(guò)程

https://medium.com/androiddevelopers/re-writing-the-aosp-deskclock-app-in-kotlin-76c836370cb

在轉(zhuǎn)換任意給定的文件時(shí),我們一開(kāi)始先使用 Android Studio Kotlin 插件中提供的從 Java 到 Kotlin 的自動(dòng)轉(zhuǎn)換工具。雖然該插件成功幫助我們轉(zhuǎn)換了大部份的代碼,但是還是會(huì)遇到一些問(wèn)題,需要開(kāi)發(fā)者手動(dòng)解決。需要手動(dòng)更改的部分,我們將會(huì)在本文接下來(lái)的章節(jié)中列出。

在將每個(gè)文件轉(zhuǎn)換為 Kotlin 之后,我們手動(dòng)測(cè)試了日歷應(yīng)用的 UI 界面,運(yùn)行了單元測(cè)試,并運(yùn)行了 Compatibility Test Suite (CTS) 的子集來(lái)進(jìn)行功能驗(yàn)證,以確保不需要再進(jìn)行任何的回歸測(cè)試。

Android Studio

https://developer.android.google.cn/studio

從 Java 到 Kotlin 的自動(dòng)轉(zhuǎn)換工具

https://developer.android.google.cn/kotlin/add-kotlin#convert

Compatibility Test Suite (CTS)

https://source.android.google.cn/compatibility/cts

自動(dòng)轉(zhuǎn)換之后的步驟

上面提到,在使用自動(dòng)轉(zhuǎn)換工具之后,有一些反復(fù)出現(xiàn)的問(wèn)題需要手動(dòng)定位解決。在 AOSP 桌面時(shí)鐘文章中,詳細(xì)介紹了其中遇到的一些問(wèn)題以及解決方法。如下列出了一些在進(jìn)行 AOSP 日歷轉(zhuǎn)換過(guò)程中遇到的問(wèn)題。

用 open 關(guān)鍵詞標(biāo)記父類(lèi)

我們遇到的問(wèn)題之一是 Kotlin 父類(lèi)和子類(lèi)之間的相互調(diào)用。在 Kotlin 中,要將一個(gè)類(lèi)標(biāo)記為可繼承,必須得在類(lèi)的聲明中添加 open 關(guān)鍵字,對(duì)于父類(lèi)中被子類(lèi)覆蓋的方法也要這樣做。但是在 Java 中的繼承是不需要使用到 open 關(guān)鍵字的。由于 Kotlin 和 Java 能夠相互調(diào)用,這個(gè)問(wèn)題直到大部分代碼文件轉(zhuǎn)換到了 Kotlin 才出現(xiàn)。

例如,在下面的代碼片段中,聲明了一個(gè)繼承于 SimpleWeeksAdapter 的類(lèi):

class MonthByWeekAdapter(context: Context?, params: HashMap《String?, Int?》) : SimpleWeeksAdapter(context as Context, params) {//方法體}

由于代碼文件的轉(zhuǎn)換過(guò)程是一次一個(gè)文件進(jìn)行的,即使是完全將 SimpleWeeksAdapter.kt 文件轉(zhuǎn)換成 Kotlin,也不會(huì)在其類(lèi)的聲明中出現(xiàn) open 關(guān)鍵詞,這樣就會(huì)導(dǎo)致一個(gè)錯(cuò)誤。所以之后需要手動(dòng)進(jìn)行 open 關(guān)鍵詞的添加,以便讓 SimpleWeeksAdapter 類(lèi)可以被繼承。這個(gè)特殊的類(lèi)聲明如下所示:

open class SimpleWeeksAdapter(context: Context, params: HashMap《String?, Int?》?) {//方法體}

override 修飾符

同樣地,子類(lèi)中覆蓋父類(lèi)的方法也必須使用 override 修飾符來(lái)進(jìn)行標(biāo)記。在 Java 中,這是通過(guò) @Override 注解來(lái)實(shí)現(xiàn)的。然而,雖然在 Java 中有相應(yīng)的注解實(shí)現(xiàn)版本,但是自動(dòng)轉(zhuǎn)換過(guò)程中并沒(méi)有為 Kotlin 方法聲明中添加 override 修飾符。解決的辦法是在所有適當(dāng)?shù)牡胤绞謩?dòng)添加 override 修飾符。

覆寫(xiě)父類(lèi)中的屬性

在重構(gòu)過(guò)程中,我們還遇到了一個(gè)屬性覆寫(xiě)的異常問(wèn)題,當(dāng)一個(gè)子類(lèi)聲明了一個(gè)變量,而在父類(lèi)中存在一個(gè)非私有的同名變量時(shí),我們需要添加一個(gè) override 修飾符。然而,即使子類(lèi)的變量同父類(lèi)變量的類(lèi)型不同,也仍然要添加 override 修飾符。在某些情況下,添加 override 仍不能解決問(wèn)題,尤其是當(dāng)子類(lèi)的類(lèi)型完全不同的時(shí)候。事實(shí)上,如果類(lèi)型不匹配,在子類(lèi)的變量前添加 override 修飾符,并在父類(lèi)的變量前添加 open 關(guān)鍵字,會(huì)導(dǎo)致一個(gè)錯(cuò)誤:

type of *property name* doesn’t match the type of the overridden var-property

這個(gè)報(bào)錯(cuò)很讓人疑惑,因?yàn)樵?Java 中,以下代碼可以正常編譯:

public class Parent { int num = 0;}

class Child extends Parent { String num = “num”;}

而在 Kotlin 中相應(yīng)的代碼就會(huì)報(bào)上面提到的錯(cuò)誤:

class Parent { var num: Int = 0}

class Child : Parent() { var num: String = “num”}

這個(gè)問(wèn)題很有意思,目前我們通過(guò)在子類(lèi)中對(duì)變量重命名來(lái)規(guī)避了這個(gè)沖突。上面的 Java 代碼會(huì)被 Android Studio 目前提供的代碼轉(zhuǎn)換器轉(zhuǎn)換為有問(wèn)題的 Kotlin 代碼,這甚至被報(bào)告為是一個(gè) bug 了。

被報(bào)告為是一個(gè) bug

https://youtrack.jetbrains.com/issue/KTIJ-8621

import 語(yǔ)句

在我們轉(zhuǎn)換的所有文件中,自動(dòng)轉(zhuǎn)換工具都傾向于將 Java 代碼中的所有 import 語(yǔ)句截?cái)酁?Kotlin 文件中的第一行。最開(kāi)始這導(dǎo)致了一些很讓人抓狂的錯(cuò)誤,編譯器會(huì)在整個(gè)代碼中報(bào) “unknown references” 的錯(cuò)誤。在意識(shí)到這個(gè)問(wèn)題后,我們開(kāi)始手動(dòng)地將 Java 中的 import 語(yǔ)句粘貼到 Kotlin 代碼文件中,并單獨(dú)對(duì)其進(jìn)行轉(zhuǎn)換。

暴露成員變量

默認(rèn)情況下,Kotlin 會(huì)自動(dòng)地為類(lèi)中的實(shí)例變量生成 getter 和 setter 方法。然而,有些時(shí)候我們希望一個(gè)變量?jī)H僅只是一個(gè)簡(jiǎn)單的 Java 成員變量,這可以通過(guò)使用 @JvmField 注解來(lái)實(shí)現(xiàn)。

@JvmField 注解的作用是 “指示 Kotlin 編譯器不要為這個(gè)屬性生成 getter 和 setter 方法,并將其作為一個(gè)成員變量允許其被公開(kāi)訪問(wèn)”。這個(gè)注解在 CalendarData 類(lèi)中特別有用,它包含了兩個(gè) static final 變量。通過(guò)對(duì)使用 val 聲明的只讀變量使用 @JvmField 注解,我們確保了這些變量可以作為成員變量被其他類(lèi)訪問(wèn),從而實(shí)現(xiàn)了 Java 和 Kotlin 之間的兼容性。

@JvmField 注解

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-field/

CalendarData 類(lèi)

https://android.googlesource.com/platform/packages/apps/Calendar/+/42e4b43133c4f866e0729438fb38bebc6d03b0a4/src/com/android/calendar/CalendarData.kt

val

https://kotlinlang.org/docs/basic-syntax.html#variables

對(duì)象中的靜態(tài)方法

在 Kotlin 對(duì)象中定義的函數(shù)必須使用 @JvmStatic 進(jìn)行標(biāo)記,以允許在 Java 代碼中通過(guò)方法名,而非實(shí)例化來(lái)對(duì)它們進(jìn)行調(diào)用。也就是說(shuō),這個(gè)注解使其具有了類(lèi)似 Java 的方法行為,即能夠通過(guò)類(lèi)名調(diào)用方法。根據(jù) Kotlin 的文檔,“編譯器會(huì)為對(duì)象的外部類(lèi)生成一個(gè)靜態(tài)方法,而對(duì)于對(duì)象本身會(huì)生成一個(gè)實(shí)例方法。”我們?cè)?Utils 文件中遇到了這個(gè)問(wèn)題,當(dāng)完成轉(zhuǎn)換后,Java 類(lèi)就變成了 Kotlin 對(duì)象。隨后,所有在對(duì)象中定義的方法都必須使用 @JvmStatic 標(biāo)記,這樣就允許在其他文件中使用 Utils.method() 這樣的語(yǔ)法來(lái)進(jìn)行調(diào)用。值得一提的是,在類(lèi)名和方法名之間使用 .INSTANCE (即 Utils.INSTANCE.method()) 也是一種選擇,但是這不太符合常見(jiàn)的 Java 語(yǔ)法,需要改變所有對(duì) Java 靜態(tài)方法的調(diào)用。

Kotlin 的文檔

https://kotlinlang.org/docs/java-to-kotlin-interop.html#static-methods

Utils 文件

https://android.googlesource.com/platform/packages/apps/Calendar/+/42e4b43133c4f866e0729438fb38bebc6d03b0a4/src/com/android/calendar/Utils.kt

性能評(píng)估分析

所有的基準(zhǔn)測(cè)試都是在一臺(tái) 96 核、176 GiB 內(nèi)存的機(jī)器上進(jìn)行的。本項(xiàng)目中分析用到的主要指標(biāo)有所減少的代碼行數(shù)、目標(biāo) APK 的文件大小、構(gòu)建時(shí)間和首屏從啟動(dòng)到顯示的時(shí)間。在對(duì)上述每個(gè)因素進(jìn)行分析的同時(shí),我們還收集了每個(gè)參數(shù)的數(shù)據(jù)并以表格的方式進(jìn)行了展示。

減少的代碼行數(shù)

9a8bd36e-1657-11ec-8fb8-12bb97331649.png

從 Java 完全轉(zhuǎn)換到 Kotlin 后,代碼行數(shù)從 18,004 減少到了 17,729。這比原來(lái)的 Java 代碼量減少了大約 1.5%。雖然減少的代碼量并不可觀,但對(duì)于一些大型應(yīng)用來(lái)說(shuō),這種轉(zhuǎn)換對(duì)于減少代碼行數(shù)的效果可能更為顯著,可參閱 AOSP 桌面時(shí)鐘文中所舉的例子。

AOSP 桌面時(shí)鐘https://medium.com/androiddevelopers/re-writing-the-aosp-deskclock-app-in-kotlin-76c836370cb

目標(biāo) APK 大小

9a975cfc-1657-11ec-8fb8-12bb97331649.png

使用 Kotlin 編寫(xiě)的應(yīng)用 APK 大小是 2.7 MB,而使用 Java 編寫(xiě)的應(yīng)用 APK 大小是 2.6 MB。可以說(shuō)這個(gè)差異基本可以忽略不計(jì)了,由于包含了一些額外的 Kotlin 庫(kù),所以 APK 體積上的增加,實(shí)際上是可以預(yù)期的。這種大小的增加可以通過(guò)使用 Proguard 或 R8 來(lái)進(jìn)行優(yōu)化。

Proguardhttps://developer.android.google.cn/studio/build/shrink-code

R8https://r8.googlesource.com/r8

編譯時(shí)間

9aa1be04-1657-11ec-8fb8-12bb97331649.png

Kotlin 和 Java 應(yīng)用的構(gòu)建時(shí)間是通過(guò)取 10 次從零進(jìn)行完整構(gòu)建的時(shí)間的平均值來(lái)計(jì)算的 (不包含異常值),Kotlin 應(yīng)用的平均構(gòu)建時(shí)間為 13 分 27 秒,而 Java 應(yīng)用的平均構(gòu)建時(shí)間為 12 分 6 秒。據(jù)一些資料 (如 “Java 和 Kotlin 的區(qū)別” 以及 “Kotlin 和 Java 在編譯時(shí)間上的對(duì)比”) 顯示,Kotlin 的編譯時(shí)間事實(shí)上比 Java 要更耗時(shí),特別是對(duì)于從零開(kāi)始的構(gòu)建。一些分析斷言,Java 的編譯速度會(huì)快 10-15%,又有一些分析稱這一數(shù)據(jù)為 15-20%。拿我們的例子進(jìn)行從零開(kāi)始完整構(gòu)建所花費(fèi)的時(shí)間來(lái)說(shuō),Java 的編譯速度比 Kotlin 快 11.2%,盡管這個(gè)微小的差異并不在上述范圍內(nèi),但這有可能是因?yàn)?AOSP 日歷是一個(gè)相對(duì)較小的應(yīng)用,僅有 43 個(gè)類(lèi)。盡管從零開(kāi)始的完整構(gòu)建比較慢,但是 Kotlin 仍然在其他方面占有優(yōu)勢(shì),這些優(yōu)勢(shì)更應(yīng)該被考慮到。例如,Kotlin 相對(duì)于 Java,更簡(jiǎn)潔的語(yǔ)法通常可以保證較少的代碼量,這使得 Kotlin 代碼庫(kù)更易維護(hù)。此外,由于 Kotlin 是一種更為安全有效的編程語(yǔ)言,我們可以認(rèn)為完整構(gòu)建時(shí)間較慢的問(wèn)題可以忽略不計(jì)。

Java 和 Kotlin 的區(qū)別

https://www.educba.com/java-vs-kotlin/

Kotlin 和 Java 在編譯時(shí)間上的對(duì)比https://medium.com/keepsafe-engineering/kotlin-vs-java-compilation-speed-e6c174b39b5d

首屏顯示的時(shí)間

9aad76a4-1657-11ec-8fb8-12bb97331649.png

我們使用了這種方法來(lái)測(cè)試應(yīng)用從啟動(dòng)到完全顯示首屏所需要的時(shí)間,經(jīng)過(guò) 10 次試驗(yàn)后我們發(fā)現(xiàn),使用 Kotlin 應(yīng)用的平均時(shí)間約為 197.7 毫秒,而 Java 的則為 194.9 毫秒。這些測(cè)試都是在 Pixel 3a XL 設(shè)備上進(jìn)行的。從這個(gè)測(cè)試結(jié)果可以得出結(jié)論,與 Kotlin 應(yīng)用相比,Java 應(yīng)用可能具有微小的優(yōu)勢(shì);然而,由于平均時(shí)間非常接近,這個(gè)差異幾乎可以忽略不計(jì)。因此,可以說(shuō) AOSP 日歷應(yīng)用轉(zhuǎn)換到 Kotlin,并沒(méi)有對(duì)應(yīng)用的初始啟動(dòng)時(shí)間產(chǎn)生負(fù)面影響。

方法https://developer.android.google.cn/topic/performance/vitals/launch-time#time-initial

結(jié)論

將 AOSP 日歷應(yīng)用轉(zhuǎn)換為 Kotlin 大約花了 1.5 個(gè)月 (6 周) 的時(shí)間,由 2 名實(shí)習(xí)生負(fù)責(zé)該項(xiàng)目的實(shí)施。一旦我們對(duì)代碼庫(kù)更加熟悉并更加善于解決反復(fù)出現(xiàn)的編譯時(shí)、運(yùn)行時(shí)和語(yǔ)法問(wèn)題時(shí),效率肯定會(huì)變得更高。總的來(lái)說(shuō),這個(gè)特殊的項(xiàng)目成功地展示了 Kotlin 如何影響現(xiàn)有的 Android 應(yīng)用,并在對(duì) AOSP 應(yīng)用進(jìn)行轉(zhuǎn)換的路途中邁出了堅(jiān)實(shí)的一步。

歡迎您通過(guò)下方二維碼向我們提交反饋,或分享您喜歡的內(nèi)容、發(fā)現(xiàn)的問(wèn)題。您的反饋對(duì)我們非常重要,感謝您的支持!

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3945

    瀏覽量

    127932
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2974

    瀏覽量

    105144
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69049
  • AOSP
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    6223

原文標(biāo)題:使用 Kotlin 重寫(xiě) AOSP 日歷應(yīng)用

文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Java 23功能介紹

    Java 23 包含全新和更新的 Java 語(yǔ)言功能、核心 API 以及 JVM,同時(shí)適合新的 Java 開(kāi)發(fā)者和高級(jí)開(kāi)發(fā)者。從?IntelliJ IDEA 2024.2?開(kāi)始已支持 Java
    的頭像 發(fā)表于 12-04 10:02 ?358次閱讀
    <b class='flag-5'>Java</b> 23功能介紹

    Java集合API的改進(jìn)介紹

    解答這些問(wèn)題。 我們將逐步學(xué)習(xí) Java 集合類(lèi)的優(yōu)化過(guò)程,并按版本逐一對(duì)比分析。主要討論的焦點(diǎn)將包括 JDK 1.0、1.2、1.4、1.5、1.6、1.8、9、10、11 和 21 版本的 Java 集合功能 Java 集合
    的頭像 發(fā)表于 11-22 11:12 ?257次閱讀
    <b class='flag-5'>Java</b>集合API的改進(jìn)介紹

    對(duì)比Python與Java編程語(yǔ)言

    Python與Java都是目前非常流行的編程語(yǔ)言,它們各有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。以下是對(duì)這兩種編程語(yǔ)言的對(duì)比: 一、語(yǔ)法和易用性 Python 語(yǔ)法簡(jiǎn)潔,代碼更易讀,非常適合初學(xué)者。 動(dòng)態(tài)類(lèi)型系統(tǒng)
    的頭像 發(fā)表于 11-15 09:31 ?439次閱讀

    基于Java的工具Power Stage Designer

    電子發(fā)燒友網(wǎng)站提供《基于Java的工具Power Stage Designer.pdf》資料免費(fèi)下載
    發(fā)表于 11-14 16:01 ?2次下載
    基于<b class='flag-5'>Java</b>的工具Power Stage Designer

    Android 16發(fā)布計(jì)劃曝光,谷歌將同步更新AOSP與Pixel設(shè)備

     據(jù)外媒最新報(bào)道,谷歌計(jì)劃在2025年6月3日邁出安卓系統(tǒng)更新的一大步,屆時(shí)將正式將Android 16推送至Android開(kāi)放源代碼項(xiàng)目(AOSP),并同步為Pixel設(shè)備帶來(lái)這一全新系統(tǒng)的更新
    的頭像 發(fā)表于 11-06 17:05 ?1104次閱讀

    Java中時(shí)間戳的使用

    Java中時(shí)間戳的使用
    的頭像 發(fā)表于 11-06 16:04 ?271次閱讀
    <b class='flag-5'>Java</b>中時(shí)間戳的使用

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C語(yǔ)言和Java語(yǔ)言進(jìn)行詳細(xì)對(duì)比。
    的頭像 發(fā)表于 10-29 17:31 ?433次閱讀

    深入解析:純凈IP如何重構(gòu)互聯(lián)網(wǎng)環(huán)境

    純凈IP作為互聯(lián)網(wǎng)環(huán)境中的一個(gè)重要概念,正在逐步重構(gòu)整個(gè)網(wǎng)絡(luò)環(huán)境的面貌。
    的頭像 發(fā)表于 10-25 07:36 ?278次閱讀

    java反編譯能拿到源碼嗎

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回Java源代碼的過(guò)程。雖然反編譯可以幫助理解代碼的邏輯和結(jié)構(gòu),但它并不總是能完美地還原原始源代碼。反編譯工具通常會(huì)產(chǎn)生與原始代碼
    的頭像 發(fā)表于 09-02 11:03 ?1192次閱讀

    重構(gòu):改善既有代碼的設(shè)計(jì)」實(shí)戰(zhàn)篇

    背景 在軟件開(kāi)發(fā)的世界里,代碼重構(gòu)是提升項(xiàng)目質(zhì)量、適應(yīng)業(yè)務(wù)變化的關(guān)鍵步驟。最近,我重新翻閱了《重構(gòu):改善既有代碼的設(shè)計(jì) 第二版》,這本書(shū)不僅重新點(diǎn)燃了我對(duì)重構(gòu)的熱情,還深化了我的理解:重構(gòu)
    的頭像 發(fā)表于 08-14 10:42 ?325次閱讀
    「<b class='flag-5'>重構(gòu)</b>:改善既有代碼的設(shè)計(jì)」實(shí)戰(zhàn)篇

    代碼靜態(tài)測(cè)試工具Klocwork 2024.2新發(fā)布

    Klocwork 2024.2 為現(xiàn)代?C/C++?分析引擎引入了顯著的準(zhǔn)確性和性能改進(jìn)。此版本還包括增強(qiáng)的安全性和身份驗(yàn)證功能以及改進(jìn)的用戶體驗(yàn),以及?MISRA??和?CERT?規(guī)則集改進(jìn)、Java?語(yǔ)言增強(qiáng)功能以及?Kotlin?的新?CWE?映射。
    的頭像 發(fā)表于 08-06 12:16 ?327次閱讀
    代碼靜態(tài)測(cè)試工具Klocwork 2024.2新發(fā)布

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    Java Web和Java是兩個(gè)不同的概念,它們?cè)诠δ堋⒂猛竞蛯?shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種編程語(yǔ)言,它提供了一種用于開(kāi)發(fā)各種應(yīng)用程序
    的頭像 發(fā)表于 07-16 13:35 ?903次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別

    已經(jīng)安裝了Java,且依然提示安裝Java是為什么?

    我已經(jīng)在機(jī)器上安裝了最新版的 Java 10,打開(kāi) Cube 卻得到要求安裝 Java 1.7.0_45 的提示。何解?Eclipse CDT 依賴 Java,不可卸載重裝。
    發(fā)表于 04-26 06:23

    微信WCDB最新開(kāi)源版本發(fā)布,優(yōu)化數(shù)據(jù)庫(kù)接口及核心邏輯,新增多項(xiàng)功能

    如今,微信已經(jīng)發(fā)布此項(xiàng)重大技術(shù)升級(jí)的新版本 WCDB,以及其更為豐富的開(kāi)發(fā)語(yǔ)言支持,如新增 C++以及對(duì) JavaKotlin 語(yǔ)言的 ORM 提供完整支援,覆蓋越發(fā)廣泛的終端平臺(tái);更強(qiáng)大的 SQL 表達(dá)能力,通過(guò)對(duì) Winq 的重新書(shū)寫(xiě)和強(qiáng)化體現(xiàn)出來(lái);
    的頭像 發(fā)表于 04-09 15:59 ?746次閱讀

    java實(shí)現(xiàn)多線程的幾種方式

    Java實(shí)現(xiàn)多線程的幾種方式 多線程是指程序中包含了兩個(gè)或以上的線程,每個(gè)線程都可以并行執(zhí)行不同的任務(wù)或操作。Java中的多線程可以提高程序的效率和性能,使得程序可以同時(shí)處理多個(gè)任務(wù)。 Java提供
    的頭像 發(fā)表于 03-14 16:55 ?782次閱讀
    主站蜘蛛池模板: 女bbbbxxxx毛片视频0 | 午夜在线视频国产 | 啪啪亚洲 | 欧美又黄又嫩大片a级 | 亚洲天天做日日做天天欢毛片 | 性色在线播放 | 海外毛片| 国产内地激情精品毛片在线一 | 能在线观看的一区二区三区 | 亚洲精品乱码久久久久久蜜桃图片 | 天天干天天弄 | 俄罗斯美女69xxxxxx | aa黄色大片 | 永久网站色视频在线观看免费 | 天天碰视频 | 8050午夜网 | 四虎在线最新永久免费播放 | 羞涩妩媚玉腿呻吟嗯啊销魂迎合 | 欧美日韩国产乱了伦 | 日本不卡视频在线视频观看 | 精品国产麻豆免费人成网站 | 五月天丁香婷婷开心激情五月 | 黄色在线播放网站 | 免费在线看片网站 | 国模无水印一区二区三区 | 免费色黄网站 | 免费欧美黄色网址 | 自拍偷拍福利视频 | 免费人成在线观看网站品爱网日本 | 免费观看理论片毛片 | 婷婷综合久久狠狠色99h | 一区二区三区www | 欧美zooz人禽交免费 | 中国高清色视频www 中国高清性色生活片 | 五月天伦理| 五月丁五月丁开行停停乱 | 美女扒开尿口给男人爽的视频 | 久久精品免费视频观看 | 日本国产中文字幕 | 午夜免费看片 | 久久香蕉综合精品国产 |