Scala(一)——基本类型
Scala语言快速入门(基本类型)
(参考视频:av39126512,韩顺平281集scala精讲)
一、Linux和Windows环境安装
这部分跳过,直接使用IDEA进行搭建,和其他编程语言配置差不多
二、HelloWorld
- 1.object表示一个伴生对象(相当于一个对象)
- 2.HelloWorld是对象的名字
- 3.def表示声明一个方法
- 4.main表示程序入口
- 5.args:Array[String] 表示形参,和go语言差不多,把参数写前面,类型写在后面
- 6.Unit表示返回值为空(类似Java中的void)
object HelloWorld {
def main(args: Array[String]): Unit = {
print("Hello World")
}
}
科普:反编译的helloworld的执行过程
/**
* jd-gui
* 这个工具可用进行反编译成java
* 我们通过对源文件的反编译,得到一个java的源文件
* 如果我们使用Java的描述来看,执行流程
*
* 1.我们使用object Hello.scala会生成2个.class文件,分别是Hello.class
* 和Hello$.class
* 2.调用HelloScala$类的方法 Hello$.MoDULE$.main
* 3.执行主函数
*/
public class HelloWorld {
public static void main(String[] args) {
HelloWorld$.MODULE$.main(args);
}
}
final class HelloWorld${
public static final HelloWorld$ MODULE$;
static{
MODULE$=new HelloWorld$();
}
public void main(String[] args) {
System.out.println("HelloWorld");
}
}
三、注释(和Java一样)
1.单行注释
//
2.多行注释
/**/
3.文档注释
/**
*@Param:
*@Return:
*/
四、变量
4.1.变量的基本使用
object VarDemo {
def main(args: Array[String]): Unit = {
var a:Int = 10
var b:String = "hello"
var c:Boolean = false
var d:Double = 10.0
var f:Float = 10.1f
println(s"${a}${b}")
}
}
现代编译器,都是动态的,很多编译器都会进行自由化的逃逸分析
注意事项:
1.声明变量时,类型可以省略,编译器会自动推导,比如var a:Int = 10可以把:Int简写,这样做,自己本身还是会自动转为强类型,类似
println(a.isInstanceOf[Int])
2.声明变量我们有2种方式,var或者val,var修饰的变量可以改变,val修饰的变量不可以改变,如果不需要改变,我们推荐使用val,因为线程安全,效率高
var a=10
a=""//可以
val b=10
b=""//不可以
3.不能不给初始值
var a //不可以
五、程序运算符
1.程序+的使用
(1)、左右都是数值,做加法
(2)、左右有一方是字符串,做拼接运算
六、数据类型
1.在Scala中,数据类型都是对象
2.Scala数据类型分为AnyVal(值类型)和AnyRef(引用类型)
无论值类型,和引用类型,都是对象
科普源码:
在scala中,使用Any作为总根
AnyVal是一个分支:Double,Float,Long,Int,Short,Byte,Boolean,Char,StringOps,Unit
AnyRef是一个分支:里面有Scala集合,所有Java类,Null,Nothing和其他Scala类
整型
1.Scala整型不受OS影响,保证可移植性
2.常量/字面量默认Int型,声明Long型必须加l或者L
3.Scala程序中变量常声明为Int型,除非不足以表示大数,才是用Long
记忆:
Byte Short Int Long分别1,2,4,8字节,和Java一样
浮点型
1.浮点型有固定的范围和长度,不受OS影响
2.默认Double型,声明Float必须加L
3.浮点型可直接表示也可科学计数法
4.通常情况下Double比Float更精确,小数点约后7位
字符型
1.Char字符是2个字节
2.允许转义符号,转化为常量
3.可以直接赋值一个整数
4.Char类型可以运算,因为是Unicode编码
Boolean
true & false
Unit & Null & Nothing重点
1.我们把Unit进行返回打印,进行测试,打印()
def main(args: Array[String]): Unit = {
var res=sayHello()
println(res)
}
def sayHello():Unit={
}
输出:()
2.关于Null
val dog:Dog=null
val ch:Char=null
比较上述两句代码,我们发现,只有Dog不报错,证明,只有AnyRef分支的是可以用null修饰
3.关于Nothing
Nothing是Scala类层级的最低端,是任何其他类型的子类型,当一个函数没有确定返回值,可以返回Nothing
Question&Answer
1.在Scala REPL(read->evaluteion->print->loop)中,计算3的平方根,然后对该值求平方,求与3相差多少?
提示:在scala.math中找
2.Scala环境变量配置及其作用
使我们在任何地方能访问到scala
3.Scala程序编写编译,运行步骤是什么?能否一步执行。
编写文件HelloWorld
scalac HelloWorld.scala
scala HelloWorld
4.Scala程序编写的规则。
几乎和Java相同,仅仅后面不加分号
5.Scala语言的SDK是什么?
开发工具包(software development kit)
6.简述,配置环境,编译,运行各个步骤中常见的错误
搭建一下,如果缺少lib包,可以yum upgrade一下,如果还报错,就yum update
7.如何检测一个变量是val还是var?
如果能修改则是val,不能修改是var
8.Scala允许你用数字乘一个字符串,去REPL中试一下“crazy"。如何在scaladoc中找到
9.10 max 2是什么操作? max定义在什么类中
找到最大值 10 max 2 max 20 ,是返回20
10.用Right计算2的1024次方
提示:在BigInt找
11.在Scala中如何获取“Hello”的首字符和尾字符?
提示:在String中找
Scala(一)——基本类型的更多相关文章
- 第54讲:Scala中复合类型实战详解
今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...
- 第53讲:Scala中结构类型实战详解
今天学习了scala的结构类型,让我们看看代码 class Structural {def open() = print("A class interface opened") } ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala的Option类型
Scala的Option类型 为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型.在没有值的时候,使用No ...
- 【scala】基础类型
基础类型 位数 Boolean - Byte ...
- scala如何解决类型强转问题
scala如何解决类型强转问题 scala属于强类型语言,在指定变量类型时必须确定数据类型,即便scala拥有引以为傲的隐式推到,这某些场合也有些有心无力. 例如: java同属强类型语言,但java ...
- Scala的Higher-Kinded类型
Scala的Higher-Kinded类型 Higher-Kinded从字面意思上看是更高级的分类,也就是更高一级的抽象.我们先看个例子. 如果我们要在scala中实现一个对Seq[Int]的sum方 ...
- Scala的存在类型
Scala的存在类型 存在类型也叫existential type,是对类型做抽象的一种方法.可以在你不知道具体类型的情况下,就断言该类型存在. 存在类型用_来表示,你可以把它看成java中的?. 下 ...
- Scala的自定义类型标记
Scala的自定义类型标记 Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry martini-好像黑夜中的萤火虫,那么耀眼,那么出众. 好了言归正传,这一篇文章我们会讲一下S ...
随机推荐
- window 安装指定的node版本
有时候不同的项目需要不同的node版本,window切换node版本命令很不管用,甚至需要卸载后重新装,同事分享了一下他的做法,很便利. 1.打开node官网 https://nodejs.org/e ...
- 英特尔携手中国游戏开发者登陆 Unite Shanghai 2019 推动游戏产业创新
2019 年 5 月 10 日-12 日,Unite Shanghai 2019 在上海召开.除了展示 Unity 的最新技术成就,以及出众的 Made with Unity 游戏与行业应用之外,大会 ...
- 【AMAD】django-countries -- 为Django app的form提供country选项,为model提供CountryField
动机 简介 个人评分 动机 有时候看一些数据库设计,国家数据会存在一个单独的表里面.这种方式读取数据库无疑又要加上一层join,很不划算. 简介 [django-countries]1解决的是: 不用 ...
- BiGAN的复现
数据集是10000个样本,前8000个训练集,后面的用来测试.每个样本是1*144(重构成12*12的矩阵),将原始BiGAN有编码器.判别器和生成器,将里面的全连接层全部替换成了卷积. from _ ...
- 第六周&java实验报告四
实验报告: 一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:rad ...
- LeetCode之链表总结
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度.作为一种常用的数据结构,链表内置在很多高级编程语言里面.既比数组复杂又比树简单,所以链表经常被面试官 ...
- Linux安装redis logstash
一.安装redis tar -zxvf redis-3.2.8.tar.gz cd redis-3.2.8 make && make install PREFIX=/usr/loca ...
- python报错及处理 -- 不断总结
ModuleNotFoundError: No module named 'PIL' 解决方法: 运行命令:pip install Pillow IndentationError: expected ...
- 【LOJ】#3043. 「ZJOI2019」线段树
LOJ#3043. 「ZJOI2019」线段树 计数转期望的一道好题-- 每个点设两个变量\(p,q\)表示这个点有\(p\)的概率有标记,有\(q\)的概率到祖先的路径上有个标记 被覆盖的点$0.5 ...
- Tomcat: has been normalized to [null] which is not valid
环境 tomcat 8.5 原因 在使用相对路径加载配置文件时,如果相对路径超出了 tomcat 容器的根目录,那么 tomcat 会提示 xxx has been normalized to [nu ...