scala学习

先看如下:

scala 安装

直接在idea中下载,然后配置 pom.xml 文件

配置 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>scala_study</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>2.11.12</version></dependency><dependency><groupId>org.scala-lang</groupId><artifactId>scala-compiler</artifactId><version>2.11.12</version></dependency><dependency><groupId>org.scala-lang</groupId><artifactId>scala-reflect</artifactId><version>2.11.12</version></dependency></dependencies><build><plugins><!-- Java Compiler --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><!-- Scala Compiler --><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><version>2.15.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin></plugins></build>
</project>

学习一门语言,当然提前写hello,world

* object:可以理解为一个单例对象,相当于java给方法增加静态关键字
*
* main 函数需要放在object中才能直接运行
*
* def:scala中定义方法的关键字
* main:方法名
* args:Array[String]:方法的参数
* args:参数名
* Array[String]: 参数类型
* [String]:泛型
* Unit:相当于java中的void
package com.wt
/*** @author WangTao* @date 2022/7/7 18:42*//*** object:可以理解为一个单例对象,相当于java给方法增加静态关键字** main 函数需要放在object中才能直接运行** def:scala中定义方法的关键字* main:方法名* args:Array[String]:方法的参数* args:参数名* Array[String]: 参数类型* [String]:泛型* Unit:相当于java中的void**/
object Demo1HelloWorld {def main(arg: Array[String]):Unit = {println("hello,world")}
}

scala基础

package com.wt
import java.util.Scanner/*** @author WangTao* @date 2022/7/7 18:59*/
object Demo2base {def main(args: Array[String]): Unit = {/*** 1.变量* 可变:var* 不可变:val** scala会进行类型推断* 变量类型会自动通过等号右边的值推断出来*///类型自动推断//val是值不可变的类型val a = 100println(a)println(a.getClass)val b = "scala"println(b)println(b.getClass)//var是可变的变量//可变:变量的引用可以再指向其他的变量var c = "1234"println(c)c = "7878"println(c)println("=" * 100)/*** 2.字符串* scala中的字符串和java中的字符串是同一个,java中字符串所有的方法scala中都有** scala和java兼容:java中的类在scala中可以使用,scala中的类在java中也可以使用* scala和java的语法不一样* */val str: String = "java,spark,hadoop"//split:通过分隔符切分字符串val array: Array[String] = str.split(",")//mkString:通过一个分割符将序列拼接成一个字符串和split相反println(array.mkString("_"))/*** 字符串的拼接* 1.使用+,性能较差,会占用额外的内存空间* 2.StringBuffer,StringBuilder* 3.scala中的方法(推荐使用)**///1.使用+val str1: String = "java" +","+ "hadoop" +","+ "spark"println(str1)//2.StringBuilderval builder = new StringBuilderbuilder.append("java")builder.append(",")builder.append("flink")builder.append(",")builder.append("linux")println(builder.toString())//3.scala中的方法val s1 = "java"val s2 = 1000val s3 = 3.14//底层也是StringBuilder,只是scala中的一种简写val value: String = s"${s1},${s2},${s3}"println(value)println("=" * 100)/*** 数组*/val ints: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)//通过下标获取元素println(ints(1))//打印数组中的元素println(ints.mkString("-"))//通过下标修改数据ints(1) = 999println(ints(1))println("=" * 100)/*** 算数运算符**/val i2 = 100val i3 = 3println(i2 + i3)println(i2 - i3)println(i2 * i3)println(i2 / i3)println(i2 % i3)println("=" * 100)/*** 流程控制*///if...else...val scanner = new Scanner(System.in)val age: Int = scanner.nextInt()if(age > 18){println("成年")}else{println("未成年")}println("=" * 100)/*** while 循环* for 循环*///whileval array1: Array[Int] = Array(3, 4, 5, 6, 7, 8)println(array1.length)var j = 0while(j < array1.length) {println(array1(j))j += 1}//增强for循环for (elem:Int <- array1) {println(elem)}}
}

scala的IO读写

package com.wtimport java.io.{BufferedReader, FileReader, FileWriter}
import scala.io.{BufferedSource, Source}/*** @author WangTao* @date 2022/7/7 20:11*/
object Demo3Io {def main(args: Array[String]): Unit = {/*** 读取文件* 1.可以使用java中的方法* 2.在scala中有source*///使用java中的IO流val bufferedReader = new BufferedReader(new FileReader("D:\\Softwore_java\\projects\\bigdata17_xiaoge\\scala_study\\src\\main\\java\\com\\data\\test.txt"))//读取第一行var line: String = bufferedReader.readLine//判断下一行是否为空while(line != null){println(line)//每次循环读取下一行line = bufferedReader.readLine()}bufferedReader.close()println("=" * 100)//scala 的方式val source: BufferedSource = Source.fromFile("D:\\Softwore_java\\projects\\bigdata17_xiaoge\\scala_study\\src\\main\\java\\com\\data\\test.txt")//读取所有行,得到一个迭代器val iterator: Iterator[String] = source.getLines()for (elem  <- iterator) {println(elem)}source.close()//写文件val fileWriter = new  FileWriter("D:\\Softwore_java\\projects\\bigdata17_xiaoge\\scala_study\\src\\main\\java\\com\\data\\out.txt")fileWriter.write("java")fileWriter.write(",")fileWriter.write("look")fileWriter.write(",")fileWriter.write("sqoop")fileWriter.write(",")fileWriter.write("hello")fileWriter.close()}
}

scala 的函数

package com.wt
import scala.language.postfixOps
/*** @author WangTao* @date 2022/7/7 20:40*/
object Demo4Fun {def main(args: Array[String]): Unit = {/*** 函数的定义 -- 函数可以在任何位置定义* 1.函数可以定义在object中,object中的函数可以直接调用* 2.可以在方法或者函数内部定义函数*/println(add1(100, 200))println(add2(99))println(add3(20, 200))println(add4(66, 22))prprintln(plus(99, 99))def plus(i: Int,j: Int): Int = {i + j}/*** 函数的调用*///使用object名称调用println(Demo4Fun.add1(2, 2))//方法调用的简写val str = "java,hadoop,sqoop"val strings: Array[String] = str.split(",")//简写val strings1:Array[String] =  str split ","}/*** def:关键字* add:函数名* (x: Int,y: Int) 参数列表* Int:返回值类型* {} 函数体*/def add1(x: Int,y: Int): Int = {x+y}/*** 函数的简写* 1.如果最后一行作为返回值,return可以省略* 2.如果函数的代码逻辑之后一行,{} 可以省略* 3.如果参数列表为空,()可以不写,如果定义没有括号,调用时也不能有括号*/def add2(x:Int): Int ={x + x}def add3(x:Int,y:Int): Int = x +ydef add4(x:Int,y: Int) = x + ydef pr: Unit = println("scala")
}

scala 的递归

package com.wt/*** @author WangTao* @date 2022/7/7 21:16*/
object Demo5Fun {def main(args: Array[String]): Unit = {println(jieCheng(20))}//阶乘,递归def jieCheng(i: Long): Long = {if(i == 1){1}else{i * jieCheng(i-1)}}
}

scala 的异常

package com.wt
import java.io.FileReader
/*** @author WangTao* @date 2022/7/7 21:24*/
object Demo6Exaction {def main(args: Array[String]): Unit = {/*** scala 的异常和java原理一样* scala 默认将异常抛出*/try {val reader = new FileReader("data/meiyou.txt")val i = 100 / 0Class.forName("com.shujia.Test")//抛出异常throw new RuntimeException("异常")}catch {case e : ArithmeticException =>println("0不能为除数异常")case e : ClassNotFoundException =>println("类找不到异常")case e : Exception =>println("其他异常")}finally (println("代码结束了")}}
}

scala 的方法

package com.wt
/*** @author WangTao* @date 2022/7/7 21:41*/
object Demo7scala {def main(args: Array[String]): Unit = {val student = new Student("1001","a_tao")student.print()val student1 = new Student("1002","lisi",20)student1.print()//多态:父类的引用指向子类的对象val obj: Object = new Student("1003", "wangwu", 22)println(obj.toString)}
}
/*在类中可以定义,属性,方法,构造函数默认构造函数:{} 是scala默认构造函数的代码块,默认构造函数可以有参数scala的类同样是object的子类*/
class Student(id: String,name: String){println("默认的构造函数")/*** 类的属性*/val _id: String = idval _name: String = name//下划线代码的占位符,相当于给了一个默认值var _age: Int = _/*** 重载构造函数* 在重载构造函数的第一行需要手动调用默认的构造函数*/def this(id: String,name: String,age:Int) {//调用默认的构造函数this(id,name)//给属性赋值this._age = age}/*** 在类中定义方法**/def print():Unit = {println(s"编号:${_id},姓名:${_name},年龄:${_age}")}/*** 重写父类的方法**/override def toString: String = s"编号:${_id},姓名:${_name},年龄:${_age}"
}

scala 样例类

package com.wt
/*** @author WangTao* @date 2022/7/7 22:26*/
object Demo8CaseClass {def main(args: Array[String]): Unit = {val user = new User("001", "阿彬少年",18)//直接通过属性获取值println(user.id)println(user)//样例类可以不使用new创建对象val user1: User = User("002", "倒拔垂杨柳")println(user1)//修改属性,需要在被改变的属性上增加varuser1.name = "鲁智深"println(user1)}
}/*** 样例类* scala在编译的时候给样例类动态增加新的方法,属性,toString,序列化** age:Int  = 0 :默认参数*/
case class User(id: String ,var name: String,age: Int = 0)

scala 伴生对象

package com.wt
/*** @author WangTao* @date 2022/7/7 22:51*/
object Demo9Apply {def main(args: Array[String]): Unit = {//调用对象的apply方法println(Score.apply("哈哈哈", 99))//apply方法可以直接使用对象名调用//Score()val score: Score = Score("001", 200)println(score)}
}
/*** Score object 是Score class 的伴生对象*/
object Score {/*** apply:是object中的一个特殊方法,可以直接使用object的名称调度*/def apply(sid: String , sco: Int): Score = {new Score(sid, sco)}
}
class Score(sid: String, sco: Int){override def toString: String = s"Score($sid,$sco)"
}

scala_day01_安装_基础_IO_函数_递归_异常_方法_样例类_伴生对象相关推荐

  1. cocos2d-x中为什么要用sharedXX()函数创建单例类的static对象

    如果在需要用到单例类对象时直接使用static成员对象,那么由于编译器对于不同的编译单元的编译顺序的不确定性,有可能在用到该static对象的时候该对象还没有初始化,而用函数sharedXX()创建单 ...

  2. mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...

    点击查看请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!具体信息 答:include "stdio.h" int fac(int k) { if(k==1) ...

  3. python入门之函数调用内置函数_第九篇 python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 二 为何使用函数 背景提要 三 函数和过程 四 函数参数 五 局部变量和全局变量 六 前向引用之'函数即变量' 七 嵌套函数和作用域 八 递归调用 ...

  4. 第七篇 python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 二 为何使用函数 背景提要 三 函数和过程 四 函数参数 五 局部变量和全局变量 六 前向引用之'函数即变量' 七 嵌套函数和作用域 八 递归调用 ...

  5. 在python中用递归的方法编程_python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量, ...

  6. 下列选项中不属于python循环语句的是哪一项_下列选项中,不属于字典操作的方法是哪一项?_学小易找答案...

    [简答题]字符串有哪几种表现形式? [简答题]简述Python程序的执行过程. [单选题]Python 语句x='char';y=2,print(x+y)输出的结果是哪一项?() [编程题]输入三角形 ...

  7. java 反射 单例类_利用反射机制破坏单例模式

    简介 利用反射机制破坏了单例模式,这里以懒汉单例模式为例子进行操作. 之前利用反射也是改变了类中的private变量. 类中的private变量真的private么? 正常的单例模式的实现 这里采用了 ...

  8. Spark 基础 —— class与object,面向对象、类与伴生对象(companion object)

    0. scala 中的面向对象 静态方法与静态字段: scala 中没有 static 关键字,但可使用 object 关键字加类名的语法结构实现: 通过 object + 类名,可以实现: 工具类: ...

  9. [Scala基础]-- 伴生类和伴生对象

    Scala比 Java 更面向对象的一个方面是 Scala 没有静态成员.替代品是,Scala 有: 单例对象:singleton object. 除了用 object 关键字替换了 class 关键 ...

  10. c语言函数调用数组_第七讲:C语言基础之函数,第二节,实现汉诺塔

    本文约2200字,主要讲了C语言基础之函数,递归,数组作为函数参数以及案例.练习题等. 带你进入C语言的世界,入门C语言,后边将持续更新.可以收藏学习.想了解C语言基础之函数,函数的基本概述,函数的调 ...

最新文章

  1. SAP 外币金额 汇率 转换
  2. 2018百度之星度度熊学队列
  3. Linux中拷贝和移动文件
  4. 519. 随机翻转矩阵
  5. 《高性能路由器 设计与实现》高性能路由器新型体系结构 小记
  6. JQueryDOM之修改节点
  7. python调用按键精灵插件_按键精灵必须掌握的命令之插件命令
  8. 云计算就业方向有哪些 未来的发展前景怎么样
  9. 计算机发展前沿技术——医学领域的人工智能
  10. FRP内网穿透访问家中的NAS和路由器后台
  11. 随笔小记--微博手动扩容来解决因新热搜“鹿晗关晓彤恋情”引起的down机
  12. 前缀编码是什么?哈夫曼编码是什么?
  13. 16天记住英语7000个单词,300个句子
  14. 如何在Win10日历便签中设置添加定时提醒和活动
  15. XCODe运行yueyu设置
  16. 无法启动此程序因为计算机中丢失msvcr110,程序因为计算机中丢失msvcr110无法启动的解决方法...
  17. python之某年不同上公司不同财务指标比较
  18. Mocha Pro:Track 模块
  19. wordpress加入站长统计功能
  20. 总监和总监不一样,看管理人数

热门文章

  1. Unable to connect to the server: x509: certificate is valid for问题解决
  2. SpringBoot整合oracle报错异常信息(java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.isValid(I))
  3. 使用layUI弹出输入框并收集输入框信息
  4. 全国最佳医院排名,为家人留一份
  5. 【华为2019年校园招聘】2019-5-8 软件题
  6. uniapp iOS打包
  7. html导航栏所有页面通用,在所有页面中包含HTML导航栏
  8. 椭圆函数与模函数(2012.10出版)(2013-01-16 09:34:57)
  9. WIN10笔记本任务栏无反应(卡住)有效解决方法
  10. QT设置背景图片的3种方式 区别——设置样式表styleSheet