一、程序入口
/**
* Kotlin主程序入口
* 面向对象编程
*/
fun main(args:Array<String>){
var kotlin = Kotlin("name");
kotlin.Hello();
//extend
var son = Son();
son.say();
//abstract
var man = Man("wjx");
man.say();
//interface
var wjx = Wjx;
wjx.handsome();
//被wjx代理
var aaa = AAA();
aaa.handsome();
//enum
var e =Enum.SATURDAY;
println(e.ordinal);
//sealed
var luo =horse.luo();
//is 关键字
if(luo is horse.luo){
luo.say();
}
//抽象是本质,接口是能力
}
class Kotlin(var name:String){
var n=name;
fun Hello(){
println("Hello Kotlin");
}
}
二、抽象
abstract class Human(var str:String) {
abstract fun say();
}
class Man(str:String) : Human(str) {
override fun say() {
println("${str} Man");
}
}
三、基础
fun main(args: Array<String>) {
var a = "13";
var b = 13;
//字符串转数字
a.toInt();
println("a="+a);
//数字转字符串
b.toString();
println("b="+b);
//注意,字母和数字混合转换会异常
var c ="a3";
c.toInt();
println("c="+c);
}
fun fact(i:Int):Int{
if(i==1){
return 1;
}else{
return i* fact(i - 1);
}
}
tailrec fun sum(i:Int,result:Int):Int{
if(i==1){
return 1;
}else{
return sum(i - 1, result + i);
}
}
//带返回值
fun first(a: Int, b: Int): Int {
return a + b;
}
//不带返回值
fun second(a: Int, b: Int): Unit {
//支持EL表达式
println("${a}和${b}是整数");
}
//当方法体代码只有一行,可简写
fun third(a: Int, b: Int): Int = a + b;
//String的比较
fun string(s1: String, s2: String) {
//与Java相同
println(s1.equals(s2))
//第二个参数表示是否忽略大小写
s1.equals(s2, true);
//与Java不同,Java比较的是两个数的内存地址
println(s1 == s2)
}
//空值处理,?号代表参数可为空,否则不为空
fun Null(str: String?) {
println(str);
}
//默认参数(a)与具名参数(b,具体在main)
fun Name(a: Int = 1, b: Int) {
println("${a},${b}")
}
fun main(args: Array<String>) {
second(1, 2);
//函数表达式,接收两个参数,返回相加结果
var i = { a: Int, b: Int -> a + b }
println(i);
var j: (Int, Int) -> Int = { x, y -> x + y }
println(j);
//具名参数
Name(b = 2);
}
//List
fun list(){
var lists = listOf<String>("apple","peach","watermenlon");
for((i,e) in lists.withIndex()){
print("${i},${e}");
}
println();
}
//Map
fun map(){
var maps =TreeMap<String,String>();
maps["好"]="good";
maps["学"]="study";
println(maps["好"]);
}
fun main(args: Array<String>) {
var num1Str = readLine();
//!!代表不可为空
var num1 =num1Str!!.toInt();
var num2Str = readLine();
var num2 =num2Str!!.toInt();
println("${num1}+${num2}=${num1.plus(num2)}");
}
//推断为Int
var i =18;
//推断为Long
var j=99999999999;
//推断为String
var s="hello"
/**
* Var变量不赋值时,需要声明变量类型
*/
fun main(args: Array<String>) {
var c:Int
//数据类型的取值范围,其余同理
val aByte:Byte= Byte.MAX_VALUE;
val bByte:Byte= Byte.MIN_VALUE;
println("max:"+aByte);
println("min:"+bByte);
}
fun main(args: Array<String>) {
//变量的声明与使用
var name:String="张三";
println(name);
name="李四";
println(name);
//常量的声明与使用
val pass:String;
pass="pass";
println(pass);
}
//When关键字用法
fun When(score:Int){
when(score){
10 -> println("10分");
9 -> println("9分");
8 -> println("8分");
else -> println("继续加油");
}
}
//区间和遍历的表示
fun sum(){
//数组【1,100】
var nums=1 .. 100;
var result = 0;
//遍历
for(num in nums){
result+=num;
}
println("结果是:"+result);
}
fun sum2(){
//数组【1,100)
var nums=1 until 100;
var result = 0;
//遍历
for(num in nums){
result+=num;
}
println("结果是:"+result);
}
//step用法
fun sum3(){
var nums= 1 .. 16;
for(num in nums step 2){
print("${num}"+" ");
}
println();
}
//reversed用法
fun sum4(){
var nums =1..16;
var nums2=nums.reversed();
for(num in nums2){
print("${num}"+" ");
}
println();
}
四、枚举
enum class Enum {
MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}
五、继承
//open关键字,可被继承
open class Father {
private var age:Int=50;
//open,允许被覆盖
open fun say(){
println("Father");
}
}
: 代表 extends ,() 代表 constructer(构造方法)
class Son : Father(){
override fun say() {
println("Son");
}
}
六、接口
//接口
interface IMan {
fun handsome();
}
//by 接口代理关键字, Wjx 代理 AAA
class AAA :IMan by Wjx {
}
//object 单例关键字
object Wjx : IMan {
override fun handsome() {
println("wjx is handsome");
}
}
七、印章
/**
* 印章/密封类
* 没有构造方法
* 限定子类构造(luo 、lv)
*/
sealed class horse {
fun say() {
println("hello");
}
class luo : horse() {
//horse子类
}
class lv : horse() {
//horse子类
}
}
网友评论