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中的voidAnyVal子类。用于方法返回值的位置,表示方法无返回值,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 学习总结相关推荐

  1. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  2. Scala学习第五天数组

    2019独角兽企业重金招聘Python工程师标准>>> package com.learn.scalaimport scala.collection.mutable.ArrayBuf ...

  3. Scala 学习笔记

    Scala 学习笔记 1 object func_exp { 2 println("Welcome to the Scala worksheet") //> Welcome ...

  4. Scala学习笔记-环境搭建以及简单语法

    关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first impo ...

  5. Scala学习笔记04:内建控制结构

    Scala学习笔记04:内建控制结构 scala提供的控制结构并不算多,因为在函数式编程中,可以自己开发出各种功能的控制结构,所以scala提供的原生控制结构仅仅够用为止. 1.if - 判断 if是 ...

  6. Scala学习笔记03:操作符

    Scala学习笔记03:操作符 一.scala中操作符与方法的等价性 scala中操作符即方法.方法即操作符.scala中操作符其实是普通方法调用的另一种表现形式,运算符的使用其实就是隐含地调用对应的 ...

  7. Scala学习笔记02:数据类型、常量与变量

    Scala学习笔记02:数据类型.常量与变量 一.数据类型 1.基本数据类型 Byte 字节型 Short 短整型 Int 整型 Long 长整型 Char 字符型 String 字符串 Float ...

  8. scala学习-scala读取Hbase表中数据并且做join连接查询

    1.业务需求:sparkSQL on hbase ,sparkSQL直接读取Hbase中的两个表,进行连接查询. 2.图示 绿色的线 上图中绿色的线是做过测试的,直接在hive中建表,然后load数据 ...

  9. Scala学习--《Scala编程》

    2019独角兽企业重金招聘Python工程师标准>>> Scala学习手册--可伸缩的语言(随着使用者的需求而成长)  第一章:基本概念 Scala=FP+OO.静态语言 兼容性.简 ...

  10. Scala学习笔记总结

    Scala学习网站:https://www.runoob.com/scala/scala-intro.html scala总结: Scala编程语言学习总结_hjy1821的博客-CSDN博客_sca ...

最新文章

  1. 如何在Ubuntu 20.04上设置Python虚拟环境
  2. java常见证书类型和密钥库类型
  3. 【百战GAN】自动增强图像对比度和颜色美感,GAN如何做?
  4. CSRF, XSS, Sql注入原理和处理方案
  5. Samba安装配置用于虚拟机共享文件_很详细
  6. std::string的split函数
  7. python二进制、字符编码及文件操作
  8. matlab数学实验结课作业答案,matlab数学实验第一次答案
  9. 软件测试中开发团队和测试团队的职责
  10. FFmpeg推流以后自动结束的方法
  11. 给mBlock添加扩展模块
  12. vue-事件修饰符-详解(.prevent .stop .once .capture .self)
  13. ONOS 南向抽象层分析
  14. django相关报错知识整理
  15. 团队协作工具调研笔记
  16. facebook第三方登录前后端分离
  17. [Unity3d]刀斧武器砍击的攻击碰撞判定
  18. 虚拟动力数字人技术亮相第六届文创产业大会,探见元宇宙 驱动新文创
  19. 2019ubc转学分计算机科学gpa,吐血整理2019年本科转学分申请UBC
  20. python苹果支付(服务端)自动订阅版

热门文章

  1. R语言查看某个R包版本号
  2. Ubuntu下ADSL配置
  3. 电机学感应电动机重点知识总结(现有题目中反映的)
  4. 锐起无盘服务器陈列设置,原创]锐起无盘安装全图文设置,含SCII设置在内
  5. wxwindows编译
  6. 抓包测试:车牌识别抓拍一体机数据平台读取不到的问题
  7. 嵌入式C高质量编程培训心得笔记
  8. css环形进度条clip,clip实现圆环进度条
  9. BIM族库下载——常用Revit结构砌体机械族30套
  10. java导出excel超出255,快逸报表页面超过255列导出excel