【Scala专栏】数据类型、变量常量、类和对象
创始人
2024-02-23 23:24:24
0

本文内容主要分为3节,依次讲解:Scala的数据类型有哪些? 变量常量如何使用? 类和对象如何理解? 受限于博主的大脑容量,大概是无法做到事无巨细的,不过其实也没必要那么"细",抓住主要脉络,加上大量的练习,融会贯通只不过是时间的问题。

本文索引

  • 一、数据类型
  • 二、变量和常量
  • 三、类和对象
    • 3.1 类
    • 3.2 对象
    • 3.3 伴生类和伴生对象
    • 3.4 Scala的main函数只能写在object里
    • 总结

一、数据类型

在这里插入图片描述
简记: 所有基础类型基本与Java的包装类等同,唯一有不同的Int(Scala),Integer(Java),注意这个就好

Unit, Null, Nothing, Any, AnyRef, AnyVal,这几个除了Null乍一眼会有些陌生,不要怕,上总结:

首先是层级图:
在这里插入图片描述
然后是表格:
在这里插入图片描述
补丁: 记住Any是所有类型的超类,也就是父类; Nothing是所有类型的子类; Null就是Null; None用在Map类型的value值类型里

二、变量和常量

1.定义变量: var a = 10; 或 var a:Int = 10;
2.定义常量: val a = 10; 或 val a:Int = 10;

建议: scala的理念是简洁优先,一般不会写出返回类型,不过调试代码时我的习惯还是写出来,可以使用IDE自动生成

Scala会对每个变量属性自动生成类似Java中的getter/setter方法,对每个常量生成getter方法
1.变量的getter/setter:
point为一个我们创建的对象,现在要对他的x属性赋值,以及获取他的x属性

 // setter()point.x_=(200)// getter()println("x = " + point.x)

2.常量的getter: 同上
建议:也可以显示写出来getter/setter方法,相当于自定义方法,可能更符合习惯

三、类和对象

谨记:Scala中类还是我们熟悉的class,但是对象object有2个概念,一个是类的引用我们可以称之为类的对象;另一个是object对象,类似Java中的静态工具类,先这么记住,为避免混淆,下文在说对象时一律指Scala中特有的object,类生成的对象后文统一使用类的引用来指代

3.1 类

# 很传统的方式, 调用时直接: val person = new Person() 
或者 val person = new Persion  // 无参构造可以不用写小括号
class Person {val name = "Cry";val age = "77";
}# 带参数的类定义, 调用时: val person = new Person("Cry",777)
class Person(xName: String, xAge: Int) {val name = xNameval age = xAgevar gender = 'm'
}#自定义构造方法: 
class Person(xName: String, xAge: Int) {val name = xNameval age = xAgevar gender = 'm'def this(yName: String, yAge: Int, yGender: Char) {this(yName,yAge)gender = yGender}def sayName(): Unit = {println("Hello Scala..." + this.name)}
}

3.2 对象

object中不可以传参,当创建一个object时,如果传入参数,那么会自动寻找object中的相应参数个数的apply方法。

object Person{var name = "Cry"def apply(name:String): Unit = {println("My name is " + name)}
}
# 调用: val person = Person("Cry777")

3.3 伴生类和伴生对象

在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

3.4 Scala的main函数只能写在object里

可以理解成main函数是静态的,所以推导而出的结论

object Lesson_ClassAndObj {def main(args: Array[String]): Unit = {val person = new Person("zhangsan", 18)val person2 = new Person("lisi", 18, 'f')Person("zhaoliu")}
}

总结

1.Scala object相当于java中的工具类, object中定义的全是静态的, object不可以传参,对象要传参,使用apply()方法
2.Scala中定义变量用var, 自定义常量用val, 变量可变, 常量不可变. 变量和常量类型可以忽略不写,会自动推断
3.Scala中每行后面都会有分好自动推断机制, 不用显式写出";"
4.建议在Scala中命名使用驼峰命名法
5.Scala类中可以传参, 传参一定要指定类型, 有了参数就有了默认的有参构造方法, 类中的属性默认有getter/setter方法
6.类中重写构造时, 构造中第一行必须先调用默认的构造. def this(…){…}
7.Scala中档new class时, 类中除了方法不执行【除了构造方法】, 其他语句都执行
8.在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

篇幅虽不长,内容也需仔细理解,我们下期再见!

相关内容

热门资讯

最高法院:既有虚假宣传,又有商... 最高法院:虚假宣传与商业诋毁构成竞合,如何处理? 经营者作虚假或者误导性宣传,同时损害竞争对手商誉的...
以色列与哈马斯均被指“消极拖延... 【环球时报驻美国特约记者 丁亮 环球时报特约记者 陈葭】美国阿克西奥斯新闻网援引白宫消息人士的话披露...
实现政策范围内分娩个人“无自付... 12月19日,省医保局发布消息,我省通过提高保障水平、优化经办服务,切实减轻参保职工生育医疗负担,2...
响应河南微短剧政策 大象新闻要... 你日常刷到的短剧,很可能不仅是“河南制造”,更是“大象出品”。 在短剧行业深耕两年多,大象新闻已悄然...
【追踪】河南方城县一民办小学1... 界面新闻记者 | 张旭 界面新闻编辑 | 刘海川 历经两次延期开庭,2025年12月19日上午,...
多件法律案将提请全国人大常委会... 12月19日,全国人大常委会法制工作委员会举行发言人记者会介绍,十四届全国人大常委会第十九次会议将于...
汇源再发声明:已提起诉讼,要求... 北京汇源食品饮料有限公司(以下简称“北京汇源”)重整一案,受到社会各界的广泛关注。重整方案实施以来,...
俄外交部发言人:日方不负责任的... 俄罗斯外交部发言人扎哈罗娃18日表示,俄方始终关注日方加速重新军国主义化的危险性,其国防开支急剧增长...
支持家庭适老化改造 政策再加力 央视网消息:近日,多部门联合出台《关于增强消费品供需适配性进一步促进消费的实施方案》,明确提出:“优...