1. 相对于java,scala的值修饰用val,变量修饰用var.值相当于java的final 修饰了。

package demo

object ScalaBase extends App {
println(1)
println(1 + 1)
println("Hello!")
println("Hello," + " World!")
/**
* val 是值得修饰符,相当于java的final int x;
* scala 可以不指名类型
*/
val x = 1 + 1
println(x)
///x =2 //不编译的
//指明类型可以如下写
val x1 : Int = 1 + 1
println(x1) /**
* var 是变量修饰符,相当于java int x2,不加final修饰
*/
var x2 = 1 + 1
x2 = 3
println(x2 * x2) /**
* scala 是个万能表达式语言,比如可以通过{}组合表达式
*/
println({
val x = 1 + 1
x + 1
})
println({
val x = "test " + "scala "
x + "demo!"
}) /**
* scala相对于java 方法定义,分为函数和方法
* 函数是带参数的表达式,也就是相对于java8的匿名方法()->{}
* (int x, int y) ->{}
* 左边是参数,右边是表达式
*/
(x: Int) => x + 1
val addOne = (x: Int) => x + 1
println(addOne(1)) val add = (x: Int,y: Int) => x + y
println(add(1,2))
val getTheAnswer = () => 42
println(getTheAnswer()) /**
* def 是方法关键字
* def 后面是方法名
* 与java不同的是,scala的返回类型是写在: Int
* =后面就是方法体
* 类似于java的 public int addMethod(int x, int y) {return x + y}
* 注意:scala虽然有return保留字,一般都不用,scala用最后一行进行返回
* @param x
* @param y
* @return
*/
def addMethod (x: Int, y: Int): Int = x + y
println(addMethod(1, 2))
/**
* 方法可以有多个参数
* 相对于java,scala有多个参数类别,不用定义在同一()里面,比较明显表明表达式结构
*/
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = {
(x + y) * multiplier
} /**
* 当然scala也可以没有参数
*/
def name: String = System.getProperty("name")
println("Hello, " + name + "!")
/**
* scala 可以用{}使用多行表达式
*/
def getSquareString(input: Double): String = {
val square = input * input
square.toString
} println(getSquareString(2.22)) /**
* 类跟Java一样都是用class 关键字
* 不同的是scala的参数可以定义在()里面
* 类似于Java的构造函数
* 相对于java用void表示没有返回值,scala用 Unit
*/
class Greeter(prefix: String, suffix: String) {
def greet(name: String): Unit = println(prefix + name + suffix)
} /**
* scala 同样使用new 作为创建实例的关键字
*/
val greeter = new Greeter("Hello,","!")
greeter.greet("Scala developer") /**
* case class 是一个非常特殊的类,它可以用于模式匹配
* case class 可以不用new关键字
* 它是一个public类
* 它自动生成hashCode 、equals
*/
case class Point(x: Int,y: Int)
val point = Point(1, 2)
val anotherPoint = Point(1, 2)
val yetAnotherPoint = Point(2, 2)
if (point == anotherPoint) {
println(point + " and " + anotherPoint + " are the same.")
} else {
println(point + " and " + anotherPoint + " are different.")
}
// Point(1,2) and Point(1,2) are the same. if (point == yetAnotherPoint) {
println(point + " and " + yetAnotherPoint + " are the same.")
} else {
println(point + " and " + yetAnotherPoint + " are different.")
} /**
* Objects 是一个单例,不能用new
* 就像Java定义单例模式一样,它只有一个
*/
object IdFactory {
private var counter = 0
def create(): Int = {
counter += 1
counter
}
} val newId: Int = IdFactory.create()
println(newId)
val newerId: Int = IdFactory.create()
println(newerId) /**
* Traits 类似于Java的Interface,只不过Traits可以部分实现
* Java 只能通过default 进行部分实现,实现包内访问
* trait 只用extends修饰,到不用实现
*/
trait GreeterTrait {
def greet(name: String): Unit
def greetDefault(name: String): Unit =
println("Hello, " + name + "!")
} class DefaultGreeterTrait extends GreeterTrait {
override def greet(name: String): Unit = {
println()
}
} class CustomizableGreeter(prefix: String, postfix: String) extends GreeterTrait {
override def greet(name: String): Unit = {
println(prefix + name + postfix)
}
} val greeterTrait = new DefaultGreeterTrait()
greeterTrait.greet("Scala developer")
val customizableGreeter = new CustomizableGreeter("How are you","?")
customizableGreeter.greet("Scala developer") /**
* scala 是运行与jvm,因此也需要一个主要方法main,main也是一个字符串数组
*/
} object ScalaMain {
def main(args: Array[String]): Unit =
println("Hello, Scala developer!")
}

Scala 学习记录(一)的更多相关文章

  1. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  2. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  3. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  4. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  5. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  6. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  7. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  8. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  9. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

随机推荐

  1. 关于树论【动态树问题(LCT)】

    搬运:看一道caioj1439 题目描述 一开始给你一棵n个点n-1条边的树,每个点有一个权值wi. 三种操作: op=1 u v :在点u和点v之间建一条边. op=2 u v:摧毁点u到点v之间的 ...

  2. HDU3507 Print Article —— 斜率优化DP

    题目链接:https://vjudge.net/problem/HDU-3507 Print Article Time Limit: 9000/3000 MS (Java/Others)    Mem ...

  3. Oracle基础:表空间名称大小写问题

    现场环境:  操作系统:windows            Oracle版本:10g 今天在通过imp导入数据时,日志提示TS_W5_D表空间不存在.感觉很奇怪,导入用户的表空间是ts_w5_d,并 ...

  4. android按压背景

    android:background="?android:actionBarItemBackground"

  5. 探索Oracle11gR2 之 DataGuard 三种保护模式

    Oracle的DataGuard技术有三种实现模式,分别是max performance.max availability.maxprotection这三种模式. 以下是来自Oracle文档的摘要信息 ...

  6. Servlet的HelloWorld

    设置好TOMCAT环境变量(如何设置?)后在命令行输入startup可以启动Tomcat,输入shutdown可以关闭Tomcat. /WEB-INF/web.xml是称为部署描述器的配置文件,Jav ...

  7. 「LuoguP2014」 选课

    Description 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学 ...

  8. [laravel]请求处理

    请求进入 public/index.php 文件. bootstrap/start.php 文件创建应用程序对象并检测环境. 内部的 framework/start.php 文件配置相关设置并加载服务 ...

  9. cmake官方文档

    https://cmake.org/cmake/help/v3.0/genindex.html

  10. Code:log4

    ylbtech-Code:log4 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 0. http://logging.apache.org/log4net/ 0 ...