Scala 学习总结
1、scala项目结构
2、"Hello World"第一个程序
object HelloWorld {def main(args: Array[String]): Unit = {println("hello world")System.out.println("aaaa")}
}
3、与Java程序对比
public class Student {private String stuname;private String stupwd;private static String school="aiaaiai";public Student(String stuname, String stupwd) {this.stuname = stuname;this.stupwd = stupwd;}public void printinfo(){System.out.println(this.stuname+" "+this.stupwd+" "+Student.school);}public static void main(String[] args) {Student nnn = new Student("nnn", "sss");Student iii = new Student("iii", "ooo");nnn.printinfo();iii.printinfo();}
}
4、变量、常量和数据类型
1、变量var、常量val:
package com.demo2import com.demo1.Student
/*** @author June* @date 2022/1/24 16:31*/
object Test2 {//声明一个变量的通用语法def main(args: Array[String]): Unit = {var a: Int = 3//声明变量时,类型可以省略,编译器自动推导、即——类型推导var a1 = 10 //Int类型:变量//类型一旦确定后,就不能修改、说明scala是强数据类型语言var a2 = 15 ////变量声明时必须要有初始值(Scala语言的特性之一)//错误定义方法 {:var a3:Int//在声明定义一个变量时,可以使用var或者val来修饰,// 1、var修饰的变量可改变、// 2、val修饰的变量不可改val a4 = 33//错误赋值: a4 = 83var ali = new Student("sds",3)ali.printinfo()ali = new Student("sssds",333)ali.printinfo()val alice = new Student("sds",3)alice.printinfo()alice.name = "ni"alice.age = 5alice.printinfo()}
}
2、声明变量时的部分规则:
package com.demo2/*** @author June* @date 2022/1/24 16:52*/
/*
* 变量定义、方法定义、关键字
* */
object Test3 {def main(args: Array[String]): Unit = {//以字母或者下划线开头、后接字母、数字、下划线val hello: String= "wmnfdfdj"var helloe = ""val _abst = 333/* 错误定义样例val h-b = ""val 2321sdf = 2432
*///以操作符开头、且只包含符(+ - * / # !等)val -+/ = "hello"println(-+/)//用反引号`....`包括任意的字符串、即使是Scala的关键字也可以val `id`:String = "isdfsd"println(`id`)}
}
3、笔记转载如下:
因为Scala的函数式编程要素,所以一个指导意见就是能用常量就不要用变量。
- 声明变量时,类型可以省略,编译器会自动推导。
- 静态类型,类型经过给定或推导确定后就不能修改。
- 变量和常量声明时,必须有初始值。
- 变量可变,常量不可变。
引用类型常量,不能改变常量指向的对象,可以改变对象的字段。
- 不以;作为语句结尾,scala编译器自动识别语句结尾。
- 标识符命名规范: 字母下划线开头,后跟字母数字下划线,和C/C++/Java一样。
- 操作符开头,且只包含(±*/#!等),也是有效的标识符。
- 用反引号包括的任意字符串,即使是同39个Scala关键字同名也可以。
5、字符串
- 类型:
String
+
号连接*
字符串乘法,复制一个字符串多次printf
格式化输出- 字符串插值:
s"xxx${varname}"
前缀s
模板字符串,前缀f
格式化模板字符串,通过$
获取变量值,%
后跟格式化字符串。 - 原始字符串:
raw"rawstringcontents${var}"
,不会考虑后跟的格式化字符串。 - 多行字符串:
""" """
。 - 输出:
print printf println ...
package com.demo2/*** @author June* @date 2022/1/25 9:12*/
object Test4 {def main(args: Array[String]): Unit = {//字符串输出//字符串的拼接、println()用法:通过:赋值//字符串拼接:通过+链接val name = "alice"val age = 33println(age+"岁的"+name+"在学习")//*用于将一个字符串复制多次拼接println(name*2)//println():字符串。通过%传值printf("%d岁的%s在学习",age,name)println()//字符串的差值(模板)(差值字符串)通过$获取变量值println(s"${age}岁的${name}在学习")val num: Float = 2.33333445fprintln(s"The num is ${num}") //格式化模板字符串sval nums: Double = 333232.33333445println(f"The num is ${nums}%.2f") //格式化模板字符串fprintln(raw"The num is ${nums}%.2f") //格式化模板字符串raw//三引号表示字符串、保持多行字符串的原格式输出val sql=s"""|select *|from| student|where| name = ${name}|and| age > ${age}|""".stripMarginprintln(sql)}
}
测试结果:
6、输入
StdIn.readLine()
StdIn.readShort() StdIn.readDouble
import scala.io.StdIn
package com.demo2import scala.io.StdIn/*** @author June* @date 2022/1/25 9:35*/
object Test5 {def main(args: Array[String]): Unit = {//信息地输入println("请输入您的大名:")val name = StdIn.readLine()println("请输入您的年龄:")val age = StdIn.readInt()//控制台的打印输出println(s"欢迎${age}岁的${name}")}
}
测试结果:
7、读取文件
package com.demo2import java.io.{File, PrintWriter}import scala.io.Source/*** @author June* @date 2022/1/25 9:40*/
object Test6 {def main(args: Array[String]): Unit = {//从文件种读取数据Source.fromFile("src/main/resources/test.txt").foreach(print)//将数据写入文件val writer = new PrintWriter(new File("src/main/resources/output1.txt"))writer.write("hello scala from ni")//关闭输出流writer.close()Source.fromFile("src/main/resources/output1.txt").foreach(print)}
}
8、数据类型
- java基本类型
char byte short int long float double boolean
。 - java基本类型对应包装类型:
Charater Byte Short Integer Long Float Double Boolean
。 - java中不是纯粹的面向对象。
- Scala吸取了这一点,所有数据都是对象,都是
Any
的子类。 Any
有两个子类:AnyVal
值类型AnyRef
引用类型。- 数值类型都是
AnyVal
子类,和Java数值包装类型都一样,只有整数在scala中是Int
、字符是Char
有点区别。 StringOps
是java中String
类增强,AnyVal
子类。Unit
对应java中的void
,AnyVal
子类。用于方法返回值的位置,表示方法无返回值,Unit
是一个类型,只有一个单例的对象,转成字符串打印出来为()
。Void
不是数据类型,只是一个关键字。Null
是一个类型,只有一个单例对象null
就是空引用,所有引用类型AnyRef
的子类,这个类型主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。Nothing
所有类型的子类型,也称为底部类型。它常见的用途是发出终止信号,例如抛出异常、程序退出或无限循环。
整数类型:都是有符号整数,标准补码表示。
Byte
1字节Short
2字节Int
4字节Long
8字节- 整数赋初值超出表示范围报错。
- 自动类型推断,整数字面值默认类型
Int
,长整型字面值必须加L
后缀表示。 - 直接向下转换会失败,需要使用强制类型转换,
(a + 10).toByte
。
浮点类型:
Float
IEEE 754 32位浮点数Double
IEEE 754 64位浮点数- 字面值默认
Double
字符类型:
- 同java的
Character
,2字节,UTF-16编码的字符。 - 字符常量:
''
- 类型
Char
- 转义:
\t \n \r \\ \" \'
etc
布尔类型:true false
空类型:
Unit
无值,只有一个实例,用于函数返回值。Null
只有一个实例null
,空引用。Nothing
确定没有正常的返回值,可以用Nothing来指定返回值类型。
package com.demo2/*** @author June* @date 2022/1/25 10:10*/
object Test7 {def main(args: Array[String]): Unit = {val a1: Byte = 127//错误定义:Byte 值范围 -128~127//val a2: Byte = 128val a2: Byte = -128//定义变量默认为整型val a3 = 12 //默认Intval a4: Long = 123444322222L //长整型数值定义//错误定义val b1: Byte = 10val b2: Byte = (3+29)println(b2)val b3: Byte = (b1+33).toByteprintln(b3)//浮点类型val f1: Float = 1.2243fval d1:Double = 3.223//字符类型val c1: Char = 'a'println(c1)val c2: Char = '9'println(c2)//特殊字符val c3: Char = '\t' //制表符val c4: Char = '\n' //换行符println("abc" + c3 + "def")println("abc" + c4 + "def")//转义字符val c5 = '\\' //表示\val c6 = '\"' //表示"println("abc" + c5 + "def")println("abc" + c6 + "def")val i1: Int = c1println("i1:" + i1)val i2: Int = c2println("i2:" + i2)val c7: Char = (i1+1).toCharprintln(c7)val c8: Char = (i2-1).toCharprintln(c8)}
}
测试结果:
本人学习视频源:尚硅谷大数据技术之Scala入门到精通教程
Scala 学习总结相关推荐
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- Scala学习第五天数组
2019独角兽企业重金招聘Python工程师标准>>> package com.learn.scalaimport scala.collection.mutable.ArrayBuf ...
- Scala 学习笔记
Scala 学习笔记 1 object func_exp { 2 println("Welcome to the Scala worksheet") //> Welcome ...
- Scala学习笔记-环境搭建以及简单语法
关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first impo ...
- Scala学习笔记04:内建控制结构
Scala学习笔记04:内建控制结构 scala提供的控制结构并不算多,因为在函数式编程中,可以自己开发出各种功能的控制结构,所以scala提供的原生控制结构仅仅够用为止. 1.if - 判断 if是 ...
- Scala学习笔记03:操作符
Scala学习笔记03:操作符 一.scala中操作符与方法的等价性 scala中操作符即方法.方法即操作符.scala中操作符其实是普通方法调用的另一种表现形式,运算符的使用其实就是隐含地调用对应的 ...
- Scala学习笔记02:数据类型、常量与变量
Scala学习笔记02:数据类型.常量与变量 一.数据类型 1.基本数据类型 Byte 字节型 Short 短整型 Int 整型 Long 长整型 Char 字符型 String 字符串 Float ...
- scala学习-scala读取Hbase表中数据并且做join连接查询
1.业务需求:sparkSQL on hbase ,sparkSQL直接读取Hbase中的两个表,进行连接查询. 2.图示 绿色的线 上图中绿色的线是做过测试的,直接在hive中建表,然后load数据 ...
- Scala学习--《Scala编程》
2019独角兽企业重金招聘Python工程师标准>>> Scala学习手册--可伸缩的语言(随着使用者的需求而成长) 第一章:基本概念 Scala=FP+OO.静态语言 兼容性.简 ...
- Scala学习笔记总结
Scala学习网站:https://www.runoob.com/scala/scala-intro.html scala总结: Scala编程语言学习总结_hjy1821的博客-CSDN博客_sca ...
最新文章
- 如何在Ubuntu 20.04上设置Python虚拟环境
- java常见证书类型和密钥库类型
- 【百战GAN】自动增强图像对比度和颜色美感,GAN如何做?
- CSRF, XSS, Sql注入原理和处理方案
- Samba安装配置用于虚拟机共享文件_很详细
- std::string的split函数
- python二进制、字符编码及文件操作
- matlab数学实验结课作业答案,matlab数学实验第一次答案
- 软件测试中开发团队和测试团队的职责
- FFmpeg推流以后自动结束的方法
- 给mBlock添加扩展模块
- vue-事件修饰符-详解(.prevent .stop .once .capture .self)
- ONOS 南向抽象层分析
- django相关报错知识整理
- 团队协作工具调研笔记
- facebook第三方登录前后端分离
- [Unity3d]刀斧武器砍击的攻击碰撞判定
- 虚拟动力数字人技术亮相第六届文创产业大会,探见元宇宙 驱动新文创
- 2019ubc转学分计算机科学gpa,吐血整理2019年本科转学分申请UBC
- python苹果支付(服务端)自动订阅版