Android --- Kotlin学习之路:基础语法学习笔记
------>可读可写变量
var name: String = "Hello World";
------>只读变量
val name: String = "Hello World"
------>类型推断
val name: String = "Hello World" 可以写成 val name = "Hello World"
------>基本数据类型
1.String,Double,Int,Float,Long,Short,Byte,Char,Boolean
2.Kotlin对于小数的默认推断是Double类型,默认6位
3.and(bits),or(bits), inv()
------>编译时常量
const val PI = 3.1415 需要定义在全局变量范围内,不能定义到函数内部,这才叫编译时常量
------>range 表达式
val number = 148if (number in 0 .. 59) {println("不及格")} else if (number in 60 .. 100) {println("及格")} else if (number !in 0 .. 100) {println("成绩无效")}
------>when 表达式
val month = "January"val result = when(month) {"January" -> "一月""February" -> "二月""March" -> "三月""April" -> "四月""May" -> "五月""June" -> "六月""July" -> "七月""August" -> "八月""September" -> "九月""October" -> "十月""November" -> "十一月""Devember" -> "十二月"else -> "错误的月份"}println(result)
------>String 模板
val isLogin = trueprintln("server respose result : ${if (isLogin) "登录成功" else "登录失败"}")
------>具名函数参数
具名函数的意义是:假如一个函数有多个参数,传递参数的时候为了避免一个一个对,可以直接用名字赋值
loginAction(name = "Derr", age =90)private fun loginAction(name: String, age: Int) {println("name is : ${name}, age is : ${age}")}
------>Nothing 类型会终止程序
TODO("not implement")
------>双等号相当于Java中的equals(),三哥等号是引用的比较,也就是地址的比较
------>类型转换相关
val number1 : Int? = "666.6".toIntOrNull() // 能转换成功就转换,不成功就返回Null
val r = "%3.f".format(65.38344) // r 的类型是String
println(65.683.roundToInt()) // 会四舍五入,结果是66
------>apply 内置函数
apply 函数会返回对象本身
val file = File("D:\\a.txt")
// 普通写法
file.setExecutable(true)
file.setReadable(true)
println(file.readLines())//apply写法
file.apply {setExecutable(true) // 这里面会有this引用,可以省略不写
}.apply {setReadable(true)
}.apply {println(readLines())
}.ll
------>let 内置函数
fun main() {println(getMethod(null))
}
fun getMethod(value: String?): String {// 判空用法,当value为空的时候将不会执行闭包里面的逻辑return value?.let {"值是非空的"} ?: "值是空的"
}
------->run 扩展函数
最后一行当作函数的返回值,在run函数中可以直接访问实例的公有属性和方法
fun main() {println(testRun(Jump()))
}class Jump {fun test():String {return "111"}
}
fun testRun(jump: Jump) : String {jump.run {test() // 直接调用return jump.test()}
}
------>数组的创建
val array: Array<Any> = arrayOf(1, 2, 3, 4)println(array[0])val arrayOfNulls = arrayOfNulls<Any>(5)arrayOfNulls[0] = "1"arrayOfNulls[1] = 'A'arrayOfNulls[2] = 1arrayOfNulls.forEachIndexed(action = {index, item ->println("$index:$item")})
------>可变的集合,不可变的集合
// 可变集合val array = mutableListOf<Any>()array.add("1")array.add(2)// 不可变集合val arrayInt = listOf(1,2,3)// 可变Mapval arrayMap = mutableMapOf<String, Int>()arrayMap["1"] = 1arrayMap["2"] = 1// 不可变Map,通过Pair指定集合里面的元素val arrayMap2 = mapOf<String, Int>(Pair("1",1))for (item in arrayMap2) {println(item)}
------>类
Person().test()
Person.test2()
println(NumUtil.double(4))// 普通类
class Person {fun test() {println("猪头")}// 半生类companion object{fun test2() {println("半生类")}}
}// 静态类
object NumUtil {fun double(num: Int): Int {return num * num}
}
------>泛型类和泛型接口
fun main() {val drinkFruits = DrinkFruits()drinkFruits.drinks("apple juice")val eat = EatEgg("blue")eat.prints()
}
// 泛型接口
interface Drink<T> {fun drinks(t: T)
}
class DrinkFruits: Drink<String> {override fun drinks(t: String) {println("Drink:$t")}
}
// 泛型类
abstract class Eat<T> {abstract fun prints()
}class EatEgg(val color: String) : Eat<String>() {override fun prints() {println("eat:${color}'s egg")}
}
------->扩展方法
扩展方法在什么时候使用呢?
当一个jar包中的方法不满足我们的需求时,
我们可以给jar包中的某个类添加方法,因为jar包中的那个方法本身是不可以修改的
fun main() {println(Jump().doubleJump())
}class Jump {
}fun Jump.doubleJump(): String {val result = "此方法为扩展方法"return result
}
----------->延迟初始化
private lateinit var _binding: FragmentFirstBinding
-----------------------------------------基础知识学习完之后训练的例子-------------------------------------------------
package com.example.kotlindemo// 一次2位数四则运算
fun main() {while(true) {// 控制台输入println("请输入一个2位数的加减乘除")val input = readLine()input?.let {val result = calculate(input)println(result)println("是否继续使用程序,继续使用请输入Y,不使用请输入N")val inputContinue = readLine()inputContinue?.let {if (it != "Y") {System.exit(-1)}}}}}fun calculate(input: String): String {if (input.contains("+")) {val strings = input.trim().split("+")return operate(strings[0].toDouble(), strings[1].toDouble(), "+").toString()} else if (input.contains("-")) {val strings = input.trim().split("-")return operate(strings[0].toDouble(), strings[1].toDouble(), "-").toString()} else if (input.contains("*")) {val strings = input.trim().split("*")return operate(strings[0].toDouble(), strings[1].toDouble(), "*").toString()} else if (input.contains("/")) {val strings = input.trim().split("/")return operate(strings[0].toDouble(), strings[1].toDouble(), "/").toString()} else {return "you input is error!"}
}fun operate(num1: Double, num2: Double, operateChar: String): Double {return when(operateChar) {"+" -> num1 + num2"-" -> num1 - num2"*" -> num1 * num2"/" -> num1 / num2else -> 0.0}
}
相关文章:
Android --- Kotlin学习之路:基础语法学习笔记
------>可读可写变量 var name: String "Hello World";------>只读变量 val name: String "Hello World"------>类型推断 val name: String "Hello World" 可以写成 val name "Hello World"------>基本数据类型 1…...
嵌入式智能手表项目实现分享
简介 这是一个基于STM32F411CUE6和FreeRTOS和LVGL的低成本的超多功能的STM32智能手表~ 推荐 如果觉得这个手表的硬件难做,又想学习相关的东西,可以试下这个新出的开发板,功能和例程demo更多!FriPi炸鸡派STM32F411开发板: 【STM32开发板】 FryPi炸鸡派 - 嘉立创EDA开源硬件平…...
`nmap`模块是一个用于与Nmap安全扫描器交互的库
在Python中,nmap模块是一个用于与Nmap安全扫描器交互的库。Nmap(Network Mapper)是一个开源工具,用于发现网络上的设备和服务。虽然Python的nmap模块可能不是官方的Nmap库(因为Nmap本身是用C/C编写的)&…...
JVM系列 | 对象的创建与存储
JVM系列 | 对象的生命周期1 对象的创建与存储 文章目录 前言对象的创建过程内存空间的分配方式方式1 | 指针碰撞方式2 | 空闲列表 线程安全问题 | 避免空间冲突的方式方式1 | 同步处理(加锁)方式2 | 本地线程分配缓存 对象的内存布局Part1 | 对象头Mark Word类型指针…...
【JavaScript 算法】快速排序:高效的排序算法
🔥 个人主页:空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 快速排序(Quick Sort)是一种高效的排序算法,通过分治法将数组分为较小的子数组,递归地排序子数组。快速排序通常…...
Excel如何才能忽略隐藏行进行复制粘贴?
你有没有遇到这样的情况:数据很多,将一些数据隐藏后,进行复制粘贴,结果发现粘贴后的内容仍然将整个数据都显示出来了!那么,Excel如何才能忽略隐藏行进行复制粘贴? 打开你的Excel表格 Excel如何…...
行人越界检测 越线 越界区域 多边形IOU越界判断
行人越界判断 越界判断方式:(1)bbox中心点越界(或自定义)(2)交并比IoU判断 越界类型:(1)越线 (2)越界区域 1.越线判断 bbox中心点xc、…...
「UCD」浅谈蓝湖Figma交互设计对齐
在现代数字产品的设计和开发过程中,选择合适的工具对于提高团队效率和保证产品质量至关重要。本文将从开发和设计两个不同的角度,探讨蓝湖和Figma两款流行工具的优势与不足,并提出结论和建议。 开发研发视角:蓝湖 优点: 清晰的设计规范:蓝湖为开发工程师提供了清晰的设计…...
VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)
1、下载webrtc-streamer,下载的最新window版本 Releases mpromonet/webrtc-streamer GitHub 2、解压下载包 3、webrtc-streamer.exe启动服务 (注意:这里可以通过当前文件夹下用cmd命令webrtc-streamer.exe -o这样占用cpu会很少,…...
[PaddlePaddle飞桨] PaddleOCR-光学字符识别-小模型部署
PaddleOCR的GitHub项目地址 推荐环境: PaddlePaddle > 2.1.2 Python > 3.7 CUDA > 10.1 CUDNN > 7.6pip下载指令: python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddleocr2.7…...
Python应用开发——30天学习Streamlit Python包进行APP的构建(15):优化性能并为应用程序添加状态
Caching and state 优化性能并为应用程序添加状态! Caching 缓存 Streamlit 为数据和全局资源提供了强大的缓存原语。即使从网络加载数据、处理大型数据集或执行昂贵的计算,它们也能让您的应用程序保持高性能。 本页仅包含有关 st.cache_data API 的信息。如需深入了解缓…...
python实现openssl的EVP_BytesToKey及AES_256_CBC加解密算法
python实现openssl EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), NULL, pass, passlen, 1, key, iv); 并实现AES 256 CBC加解密. # encoding:utf-8import base64 from Crypto.Cipher import AES from Crypto import Random from hashlib import md5def EVP_BytesToKey(passw…...
基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现
注:每个学校每个老师对论文的格式要求不一样,故本论文只供参考,本论文页数达到60页以上,字数在6000及以上。 基于SpringBootVueJS微信小程序技术的图书森林共享小程序设计与实现 目录 基于SpringBootVueJS微信小程序技术的图书森…...
【css】image 使用 transform:scale 放大后显示不全的问题
css 可以用 transform: scale(1.2) 实现图片放大 1.2 倍显示的功能,在此基础上可以修改 transform-origin 为用户点击的坐标值优化体验。问题在于 origin 位于图片下方时,图片放大后出现滚动条,而滚动条的高度会忽略放大显示的图片的上半部分…...
损失函数简介
损失函数(Loss Function)是机器学习中用来衡量模型预测值与真实值之间差异的函数。在训练过程中,通过最小化损失函数来优化模型的参数,以提高模型的预测准确性。 以下是损失函数的主要用途和一些常用的损失函数类型: 损失函数的用途: 评估模型性能:损失函数提供了一个…...
2023睿抗CAIP-编程技能赛-本科组省赛(c++)
RC-u1 亚运奖牌榜 模拟 AC: #include<iostream> using namespace std; struct nation{int j,y,t; }a[2]; int main(){int n;cin>>n;for(int i1;i<n;i){int x,y;cin>>x>>y;if(y1) a[x].j;if(y2) a[x].y;if(y3) a[x].t;}cout<<a[0].j<<&…...
现在国内的ddos攻击趋势怎么样?想了解现在ddos的情况该去哪看?
目前,国内的DDoS攻击趋势显示出以下几个特征: 攻击频次显著增加:根据《快快网络2024年DDoS攻击趋势白皮书》,2023年DDoS攻击活动有显著攀升,总攻击次数达到1246.61万次,比前一年增长了18.1%。 攻击强度和规…...
微服务到底是个什么东东?
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的…...
C++笔试强训5
文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 x1,先x,再x–,while判断永远为真,故死循环 选D。 sizeof会计算\0,strlen不包括\0,并且strlen只计算\0之前的。 所以sizeof是10,strken是4 …...
初学51单片机之UART串口通信
CSDN其他博主的博文(自用)嵌入式学习笔记9-51单片机UART串口通信_51uart串口通讯-CSDN博客 CSDN其他博主的博文写的蛮好,如果你想了解51单片机UART串口可以点进去看看: UART全称Universal Asynchronous Receiver/Transmitter即通…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
