Kotlin 基礎教程一

?

Kotlin?基本數據類型

Java? ? ? ? ? ?|? ? Kotlin

byte? ? ? ? ? ? ? ? ?Byte

short? ? ? ? ? ? ? ? ?Short

int? ? ? ? ? ? ? ? ? ?Int

long? ? ? ? ? ? ? ? Long

float? ? ? ? ? ? ? ? Float

double? ? ? ? ? ? ? ? Double

boolean? ? ? ? ? ? ? ? Boolean? ? ? ?

char? ? ? ? ? ? ? ? Char

數據類型之間可以相互轉化?比如

var index = 10? ? ? ?index.toLong,index.toDouble ...等

聲明變量一般為? var?賦值變量? val?表示常量

可以顯示聲明類型:

var name : String = "Csdn"

也可以隱式聲明:

var name = "Csdn"

val?修飾的一般為常量?不可改變? 例如:

val name = "Android"

name = "Hello"?就會報錯

修飾方法?一般為fun?例如:

fun getNumber(index : Int) : Int?

getNumber(Index : Int)?代表傳入一個Int的值?而函數中 :?后面的則為返回類型

無返回類型一般不用寫,也可以寫Unit

繼承和實現:

Java?繼承是extends? 而Kotlin就是? :?

比如:?class A extnds B ,Kotlin則是class A : B ()

實現 Java是implements?而Kotlin? 則是?直接實現的類的方法或者其他的屬性

Kotlin特性之空安全

比如:private var name : String?這樣寫是報錯的?因為沒有初始化?為Null

如果可能需要為null或者避免檢驗? 可以這樣寫: private var name : String? = null

Java避免空屬性可以用注解 @NonNull @Nullable

kotlin中如果聲明可為空?也就是 var name : String? = null?調用時會報錯?

如果強行調用?有兩種方式:

安全調用value?.xxx?用?安全調用?為空則不調用

value!!.xxx強行調用,可能會報空指針

(變量后面有感嘆號!代表非Kotlin聲明的?比如是Java?等)

延遲初始化之 lateinit

lateinit?修飾的不能有初始值

比如 val lateinit name : String

類型判斷

如果不確定數據類型?java中則是 instanceof?而Kotlin中則是 is

強制類型轉換:

java中則是? A a = (A) value ,kotlin則是 as??

獲取class

java獲取class?比如Main.class, value.getClass

kotlin獲取為? Main::class ,獲取Java的class? 則是 Main::class.java?

創建實例:

java中?通過new?創建?調用有參或者無參構造

kotlin中則是直接?類名()?參數? 比如Intent,?java:new Intent(xx,xx);kotlin Intent(xx,xx)

get/set

kotlin?聲明屬性時候默認會創建get/set?例如 :

var name : String? = null

? ? ? ? get(){

return field

}set(){

? ? ? ?field = name

}

構造器

constructor?函數?分為無參數:

constructor(){

}

有參數:

constructor(name : String){

}

@JvmField

如果成員變量中使用@JvmField則生成一個public的成員變量?不會生成get set

類的繼承

java?所有的類?默認繼承Object

Kotlin?默認?Any (更精簡)

java void?對應kotlin Unit

構造器相互調用

單參數調用多參數?使用this(參數1,參數2...)

constructor(context : Context) this(context,null)

數組:

java中通過 []聲明一維和二維?比如 int [] xx

kotlin則是?通過 arrayOf?比如 val numberList = arrayOf(1,2,3)?這種寫法會自動裝箱,造成不必要的內存開支,基本數據類型?比如int? 可以使用intArrayOf?比如?val intArr : IntArray = intArrayOf(1,2)

intArrayOf? FloatArrayOf?等

數組長度表示:在Java中?數組[ ]?長度表示為length? 而Kotlin?則是 size

靜態函數

java使用 static

kotlin : 1?定義在函數?比如?fun getMax()?通過導入包調用函數?稱為頂級函數?類似于Java XXX.getMax()

object

kotlin?可以通過object?聲明一個類,這個類中的變量和函數會變成全局的

并不是靜態函數,而是自動創建這個類的單例對象,然后通過單例對象訪問這個類

如 object V {}?這里面聲明的函數是靜態的?可以V.xxx調用,如果在Java中調用v的函數

則需要V.INSTANCE.getXXX()

companion object?靜態變量修飾

類中的單利對象?比如 class Rock : A {

companion object{

? ? ? ? private lateinit var index : Value?

? ? ? ? fun getValue() : Value{

? ? ? ? ? ? ? ? return value

????????}

}

fun setValue (value : Value){

? ? ? ? value = this;

}

}

可以在object聲明的函數方法中加入@JvmStatic?聲明為靜態函數

@file

例如在類的開頭:@file:JvmName("xxx")?作用對象為文件

$

簡化字符串模板可以省略拼接字符串+?比如 var name : String = "Key$name"

object : params?等同于創建一個內部類

in

在xx?區間?

在Java中表示 if (number >?200 &&?number < 600)

kotlin if (number in 200..600)?區間范圍

when

類似于java的swith?同時支持表達式?比如 if xx else if xx else if xx

可以用when (code )? in 200 -> { } in 300 ->{} else ->{}

接口

也是用interface?定義?

抽象

也是用abstract定義,構造器調用父類使用 : super(xxx)?

枚舉

使用 enum class?定義 (繼承Annotation)

使用enum進行定義enum class Type{ A {} abstract fun type()}

fun

用于修飾方法

編譯期常量 const

在 companion object{

? ? ? ? const val NAME = "name"

}

引用外部對象屬性

java?通常是類名.this.變量名

kotlin this@外部類類名.成員以及變量

創建集合?

java? new ArrayList

kotlin : ArrayList?也可以用 arrayListOf創建?或者 MutableList

?

listOf / List 不支持修改 MutableList支持修改 -----Map?HashMap/MutableMap同理

遍歷:

foreach?

java : for ()

kotlin in? for (value : Value in list)

靜態內部類

internal?可進行修飾符,當前模塊可見

inner?修飾內部類?但是不能存在compaion? object?此對象

kotlin? ?在普通類和方法中默認是final?修飾的?否則需要用abstract / open /override?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/34914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/34914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一 、個性化電商廣告推薦系統介紹

一 個性化電商廣告推薦系統介紹 1.1 數據集介紹 Ali_Display_Ad_Click是阿里巴巴提供的一個淘寶展示廣告點擊率預估數據集 數據集來源&#xff1a;天池競賽 原始樣本骨架raw_sample 淘寶網站中隨機抽樣了114萬用戶8天內的廣告展示/點擊日志&#xff08;2600萬條記錄&#xff…

LangChain-ChatGLM在WIndows10下的部署

LangChain-ChatGLM在WIndows10下的部署 參考資料 1、LangChain ChatGLM2-6B 搭建個人專屬知識庫中的LangChain ChatGLM2-6B 構建知識庫這一節&#xff1a;基本的邏輯和步驟是對的&#xff0c;但要根據Windows和現狀做很多調整。 2、沒有動過model_config.py中的“LORA_MOD…

validation之自定義注解@Constraint

前言&#xff1a; 首先&#xff0c;接口參數校驗應該都不陌生&#xff0c;大部分應該都會借助javax.validation進行快捷校驗&#xff0c;一般都是在入參字段上添加NotNull、NotEmpty等&#xff0c;對于一些特殊的入參校驗邏輯&#xff0c;可能不是很適用&#xff0c;現在介紹一…

【ECMAScript】ES6-ES11學習筆記

文章目錄 注意事項1.聲明變量2.定義常量3.解構賦值4.模板字符串5.簡化對象寫法6.箭頭函數7.參數默認值8.rest參數9.擴展運算符10.Symbol11.生成器函數12.Promise基本語法13.集合set14.Map15.類class16.數值擴展17.對象私有屬性18.對象方法擴展19.js文件模塊化20.async和await21…

數據庫操作不再困難,MyBatis動態Sql標簽解析

系列文章目錄 MyBatis緩存原理 Mybatis的CachingExecutor與二級緩存 Mybatis plugin 的使用及原理 MyBatis四大組件Executor、StatementHandler、ParameterHandler、ResultSetHandler 詳解 MyBatisSpringboot 啟動到SQL執行全流程 數據庫操作不再困難&#xff0c;MyBatis動態S…

Neo4j之MATCH基礎

1】基本匹配和返回&#xff1a;查找所有節點和關系&#xff0c;返回節點的標簽和屬性。 MATCH (n) RETURN n;2】條件篩選&#xff1a;查找所有名為 "Alice" 的人物節點。 MATCH (person:Person {name: Alice}) RETURN person;3】關系查詢&#xff1a;查找所有和 &q…

Centos7.6 安裝mysql過程全記錄

在centos 7.6上 離線安裝mysql 的步驟&#xff0c;可參考下文&#xff1a; 一、查看當前MySQL的安裝情況并卸載 1. 查看當前MySQL的安裝情況 查找之前是否安裝了MySQL rpm -qa|grep -i mysql 2.卸載mysql 如果已經安裝mysql&#xff0c;則需要先停止MySQL&#xff0c;再刪除…

YOLOv5、YOLOv8改進:MobileViT:輕量通用且適合移動端的視覺Transformer

MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer 論文&#xff1a;https://arxiv.org/abs/2110.02178 1簡介 MobileviT是一個用于移動設備的輕量級通用可視化Transformer&#xff0c;據作者介紹&#xff0c;這是第一次基于輕量級CNN網絡性…

LeetCode150道面試經典題--單詞規律(簡單)

1.題目 給定一種規律 pattern 和一個字符串 s &#xff0c;判斷 s 是否遵循相同的規律。 這里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每個字母和字符串 s 中的每個非空單詞之間存在著雙向連接的對應規律。 2.示例 pattern"abba" s "c…

SpingBoot-Vue前后端——實現CRUD

目錄??????? 一、實例需求 ? 二、代碼實現 &#x1f3cc; 數據庫 &#x1f440; 后端實現 &#x1f4eb; 前端實現 &#x1f331; 三、源碼下載 &#x1f44b; 一、實例需求 ? 實現一個簡單的CRUD&#xff0c;包含前后端交互。 二、代碼實現 &#x1f3cc; 數…

[樹莓派]ImportError: libcblas.so.3: cannot open shared object file

嘗試在樹莓派4b安裝opencv-python,出現以下錯誤,ImportError: libcblas.so.3: cannot open shared object file: No such file or directory 解決方法&#xff0c;安裝依賴 sudo apt install libatlas-base-dev 再次import cv2就不會報這個錯誤。

約束綜合中的邏輯互斥時鐘(Logically Exclusive Clocks)

注&#xff1a;本文翻譯自Constraining Logically Exclusive Clocks in Synthesis 邏輯互斥時鐘的定義 邏輯互斥時鐘是指設計中活躍&#xff08;activate&#xff09;但不彼此影響的時鐘。常見的情況是&#xff0c;兩個時鐘作為一個多路選擇器的輸入&#xff0c;并根據sel信號…

八、解析應用程序——分析應用程序(1)

文章目錄 一、確定用戶輸入入口點1.1 URL文件路徑1.2 請求參數1.3 HTTP消息頭1.4 帶外通道 二、確定服務端技術2.1 提取版本信息2.2 HTTP指紋識別2.3 文件拓展名2.4 目錄名稱2.5 會話令牌2.6 第三方代碼組件 小結 枚舉盡可能多的應用程序內容只是解析過程的一個方面。分析應用程…

小龜帶你敲排序之冒泡排序

冒泡排序 一. 定義二.題目三. 思路分析&#xff08;圖文結合&#xff09;四. 代碼演示 一. 定義 冒泡排序&#xff08;Bubble Sort&#xff0c;臺灣譯為&#xff1a;泡沫排序或氣泡排序&#xff09;是一種簡單的排序算法。它重復地走訪過要排序的數列&#xff0c;一次比較兩個元…

【深度學習】再談向量化

前言 向量化是一種思想&#xff0c;不僅體現在可以將任意實體用向量來表示&#xff0c;更為突出的表現了人工智能的發展脈絡。向量的演進過程其實都是人工智能向前發展的時代縮影。 1.為什么人工智能需要向量化 電腦如何理解一門語言&#xff1f;電腦的底層是二進制也就是0和1&…

Arduino+esp32學習筆記

學習目標&#xff1a; 使用Arduino配置好藍牙或者wifi模塊 學習使用python配置好藍牙或者wifi模塊 學習內容&#xff08;筆記&#xff09;&#xff1a; 一、 Arduino語法基礎 Arduino語法是基于C的語法,C又是c基礎上增加了面向對象思想等進階語言。那就只記錄沒見過的。 單多…

全國各城市-貨物進出口總額和利用外資-外商直接投資額實際使用額(1999-2020年)

最新數據顯示&#xff0c;全國各城市外商直接投資額實際使用額在過去一年中呈現了穩步增長的趨勢。這一數據為研究者提供了對中國外商投資活動的全面了解&#xff0c;并對未來投資趨勢和政策制定提供了重要參考。 首先&#xff0c;這一數據反映了中國各城市作為外商投資的熱門目…

Effective Java筆記(31)利用有限制通配符來提升 API 的靈活性

參數化類型是不變的&#xff08; invariant &#xff09; 。 換句話說&#xff0c;對于任何兩個截然不同的類型 Typel 和 Type2 而言&#xff0c; List<Type1 &#xff1e;既不是 List<Type 2 &#xff1e; 的子類型&#xff0c;也不是它的超類型 。雖然 L ist<String…

Oracle自定義函數生成MySQL表結構的DDL語句

1. 自定義函數fnc_table_to_mysql create or replace function fnc_table_to_mysql ( i_owner in string, i_table_name in string, i_number_default_type in string : decimal, i_auto_incretment_column_name in stri…

Linux 文件查看命令

一、cat命令 1.cat文件名&#xff0c;查看文件內容&#xff1a; 例如&#xff0c;查看main.c文件的內容&#xff1a; 2.cat < 文件名&#xff0c;往文件中寫入數據&#xff0c; Ctrld是結束輸入 例如&#xff0c;向文件a.txt中寫入數據&#xff1a; 查看剛剛寫入a.txt的…