Kotlin学习记录(二)—— Kotlin的变量、属性、类、构造函数、继承、方法

Kotlin入门精要
本文介绍了Kotlin的基础概念,如变量声明与使用、类及构造函数的定义、属性的简化处理,以及方法的定义方式。文章通过对比Java,突出了Kotlin在语法上的简洁性和强大的特性。


接上篇:搭建环境到输出Hello World!


变量和属性:

对于Kotlin来说,一切都是对象。听起来和Java一样啊,万物皆对象!不,不,不,是一切都是对象,包括原始基本类型。

当然,基本类型还是存在的,而且他们的使用方式和名字和Java都差别不大,但是都是作为一个对象存在的,而且还是有一些不同之处需要注意的,比如:数字类型不能自动转换,需要做明确的类型转换。

例:

	val i:Int=100
	val d:Double=i.toDouble()	
	


变量的声明:


Kotlin中变量的声明,通过关键字:var / val。两者是有区别的,var就和Java中正常的声明变量是一样的,变量的值可以被更改。val就是相当与final了,断子绝孙咯~

需要说的是,尽可能的使用val,因为val是线程安全的,因为无法改变,也不需要去定义访问控制,所有线程访问到的对象都是同一个。


语法:var/val  变量名:类型 = 值

	val a:Any = 666	//any相当于Java的Object

当然Kotlin的变量声明是可以自主识别类型的,比如:

	val i=123   //Int类型
	val s="abcdef"  //String类型
	val f=2.2F //Float类型
	val context=this    //上下文文本
         ...


属性:


这点和Java是相同的,但是更强大、简洁。

Java中一个实体是这样的:

public class entity {
    private String s;
    public String getS() {
        return s;
    }
    public void setS(String s) {
        this.s = s;
    }
}

Kotlin对应的代码是这样的:

public class Entity {
    var s:String=""
}

没啦,就这样就完事了,使用的时候是这样的:

val entity =Entity()
val ss= entity.s
entity.s="abcdef"

是不是简洁到没朋友。


类、构造函数、类继承:


类的定义,需要用到class关键字

	class Xixili() {

	}

class的属性修饰符有:

final:标示类不可被继承,默认属性

abstract:抽象类标示

enum:标示类为枚举

open:类可继承

annotation:注解类


如果需要构造函数是这样的:

	class Xixili(name: String , age: Int) {

	}

构造函数的函数体在这里写:

	class Xixili(name: String , age: Int) {
   	   init {
  	      //函数体
   	    }
	}
 
类的继承,通过“:”。 

默认所有的类都是继承Any(和Java中的Object类相似)的。而且类默认的修饰符是final,不可继承的。所有,如果我们想要让别的类继承,就需要声明类为open或者abstract。例:

	open class Father(gender: String)
	class Sun(gender: String , name: String) : Father(gender)
我们需要在sun中指定Father需要的参数gender,相当于Java中的super。


方法:

可以使用“fun”关键字定义:

	fun methodTest(params: String){
    
	}
这是一个没有返回值,含有一个String类型的params参数的方法。会返回Unit,与Java中的void类似,但是Unit是一个真正的对象。当然也是可以指定其他任何类型的返回值:

	fun methodTest(params: String) : Any {
    	    return params
	}
而且如果返回的结果可以直接给出的话,可以不使用括号,直接使用等号:

	fun methodTest(params: String) : Any = params+"abcdef"

方法中参数体也是可以这样写的:

	fun myToast(message: String , code: Int = Toast.LENGTH_SHORT){
   	    Toast.makeText(this,message,code).show()
	}

使用的时候,第二个参数就变成了可选择的:

	myToast("lalala")
	myToast("lalala",Toast.LENGTH_LONG)

简单的东西就说这些啦,很多东西后续的文章再详细描述。


Kotlin学习记录(三)—— 子线程获取数据,实现简单ListView

 
 
 
 
 
 
 
 
 
 

### Kotlin 构造方法初始化变量Kotlin 中,可以通过主构造函数和次构造函数来实现变量的初始化。以下是关于这两种方式的具体说明以及示例。 #### 主构造函数初始化 主构造函数头部的一部分,在声明的同时即可完成属性的初始化。如果需要对传入的参数进一步处理,则可以在 `init` 块中进行逻辑操作[^2]。 ```kotlin class Person(val name: String, val age: Int) fun main() { val person = Person("Alice", 25) println("${person.name}, ${person.age}") } ``` 在此示例中,`Person` 通过主构造函数接收两个参数并将其直接作为属性。这种方式简洁明了,适用于不需要复杂初始化逻辑的情况[^3]。 #### 次构造函数初始化 当需要多个不同的初始化路径或者更复杂的初始化过程时,可以使用次构造函数。次构造函数必须显式调用主构造函数或其他次构造函数以完成对象创建[^2]。 ```kotlin class Employee private constructor( var id: Int, var department: String ) { constructor(id: Int) : this(id, "Default Department") {} init { require(department.isNotEmpty()) { "Department cannot be empty." } } fun displayInfo() { println("Employee ID: $id, Department: $department") } } fun main() { val employee1 = Employee(101) employee1.displayInfo() val employee2 = Employee(102, "HR") employee2.displayInfo() } ``` 在这个例子中展示了两种创建 `Employee` 对象的方式:一种只提供员工编号,默认分配到某个部门;另一种则允许指定具体所属部门。注意这还加入了校验逻辑确保数据有效性[^2]。 #### 结合临时变量与成员属性 有时为了提高代码可读性和灵活性,会先定义一些仅用于赋值操作而不对外暴露的临时变量[^3]。 ```kotlin class Student(_firstName: String, _lastName: String, _grade: Double) { val firstName = _firstName.capitalize() val lastName = _lastName.capitalize() val gradeFormatted = String.format("%.2f", _grade) override fun toString(): String { return "$firstName $lastName has a grade of $gradeFormatted" } } fun main() { val student = Student("john", "doe", 97.8) println(student) } ``` 此片段 `_firstName`, `_lastName`, 和 `_grade` 都只是用来帮助构建最终公开使用的标准化版本的数据[^3]。 ### 总结 以上介绍了三种不同场景下的构造器应用模式——简单直接型、多重入口型还有加工转换型。每种都有其适用场合,请依据实际需求选取最合适的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值