那我们今天就总结一下今天学习的scala知识点
什么是Scala以我的了解来说,就是比java更加的体现出面向对象,众所周知,Java是一门面向对象的编程,但是Java中有些并没有真正意义上的面向对象,正是所谓"万物皆可为对象,想new几个是几个"嘿嘿,而scala还有一些函数式编程的概念
Scala概述
1.1、scala编译结果的反编译深入了解
使用 java HelloScala
无法编译,因为java中没有scala中的类库
java.lang.NoClassDefFoundError
使用反编译器发现,反编译后的scala文件实现了真正面向对象(万物皆对象) HelloScala类静态方法用对象来进行表示(单例设计模式)HelloScala认为是伴生对象的伴生类,HelloScala$为伴生类的伴生对象
如何使用java来编译scala文件呢?
java -cp %SCALA_HOME/lib/scala-library.jar; HelloScala
输入:C:UsersstuDesktop>java -cp %SCALA_HOME%/lib/scala-library.jar; HelloScala
输出Hello scala
配置环境其实跟java差不多,可以参考一下的视频进行安装:
点击观看尚硅谷视频(scala环境配置)
类库资源包的下载链接也给你们吧(我下的是2.12.11版本的):
类库资源包链接
下完之后再idea内配置一下就行
编写第一个scala文件(当然还是我们的老朋友HelloWorld)//编写含有静态变量的方法
class Student(name: String, age: Int) {
def PrintInfo(): Unit = {
println("学生姓名:" + name + ",学生年龄:" + age + ",院校:" + Student.school)
}
//重写父类的toString()方法
override def toString: String = {
val str: String = "学生姓名:" + name + ",学生年龄:" + age + ",院校:" + Student.school
return str
}
}
//Student的伴生对象
object Student {
// val school = "shujia"
val school: String = "数加学院"
}
object HelloWorld {
def main(args: Array[String]): Unit = {
println("hello world")
//定义一个Student对象
val stu = new Student("姚龙", 18)
stu.PrintInfo()
println(stu.toString)
}
}
标识符
object IdentifierDemo1 {
def main(agrs: Array[String]): Unit = {
//1、以字符或者下划线开头,后接字母、数字、下划线
val hello: String = ""
var Hello123: String = ""
val _abc = 123
//错误:not found: value -
// val h-b = ""
// val h-b = ""
// val 123abc = 123
// 以操作数开头,且只包含操作符(+-* /#!)
## 标题
val *# = "hello"
println(*#)
//3、用反引号'.....'包括的任意字符串,即便是Scala关键字也可以
//反引号 `...`
// var if = "if"
var `if` = "if"
println(`if`)
}
}
变量和常量的定义
class Student2(name: String, var age: Int) {
def printIofo(): Unit = {
println("学生姓名:" + name + ",学生年龄:" + age)
}
}
object VariableDemo1 {
def main(args: Array[String]): Unit = {
//定义一个变量
var num: Int = 20
println(num)
//定义一个常量
val num1: Int = 10;
println(num1)
// (1)声明变量时,可以不屑数据类型,编译器可以自动推导,即类型推导
var a = 10
val b = 20
// (2)类型确认后就不能更改,说明scala是一门强数据类型语言
//编译错误,类型不匹配
// a = "你好"
// (3)变量声明时,必须要有初始值
// var c: Int
// (4)用var修饰的变量可以更改,用val修饰的变量不能更改
a = 21
//被val修饰的变量为常量,不能被修改
// b = 21
val stu = new Student2("姚龙", 18)
// stu = new Student2("尚志恒",20)
// stu = null
stu.printIofo()
stu.age = 10
stu.printIofo()
// var stu = new Student2("姚龙",18)
// stu = new Student2("尚志恒",20)
}
}
字符串操作
object StringDemo {
def main(args: Array[String]): Unit = {
val name = "姚龙"
val age = 18
println(name + "在数加学习,今年" + age)
/
object ScannerDemo1 {
def main(args: Array[String]): Unit = {
println("请输入你的大名:")
val name = StdIn.readLine()
println("请输入你的年龄:")
val age = StdIn.readInt()
println(s"你的大名是${name},你的年龄是${age}")
}
}
文件的写入和读出
import java.io.{File, PrintWriter}
import scala.io.Source
object FileIODemo1 {
def main(args: Array[String]): Unit = {
//1、从文件中读取数据
//Source.fromFile文件的路径 将文件读出来
//再通过foreach将文件打印出来
//可以直接copy绝对路径,也可以编写相对路径,相对路径从src开始就行了
Source.fromFile("src/main/resources/FileIoDemo1.txt").foreach(print)
//2、将数据写入文件 java中拥有可以直接写入文件的方法,直接调用java的方法即可
val writer = new PrintWriter(new File("src/main/resources/output.txt"))
writer.write("hello scala from java writer")
writer.close()
}
}
数据类型
数据类型:
1、scala中一切数据都是对象,都是Any的子类
2、Scala中数据类型分为两大类:
数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象
3、Scala数据类型仍然遵守,低精度的值类型向高精度的值类型自动转换(隐式转换)
4、Scala中的StringOps是对Java中的String增强
5、Unit:对应Java中的void,用于方法返回值的位置,表示方法没有返回值,Unit是一个数据类型,只有一个对象
就是().Void不是数据类型,只是一个关键字
6、Null是一个类型,只有一个对象就是null,它是所有引用类型(AnyRef)的子类。



