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. oracle:rman恢复----通过时间set until time

    试验计划:先做一个0级备份,再创建一个表,插入几条数据,最后删除表,然后通过rman把该表的数据恢复. 试验环境:在归档模式,oracle10.2.0.1 开始试验: 1.rman level 0备份 ...

  2. https证书/即SSL数字证书申请途径和流程

    国际CA机构GlobalSign中国 数字证书颁发中心网站:http://cn.globalsign.com    https证书即SSL数字证书,是广泛用 于网站通讯加密传输的解决方案,是提供通信保 ...

  3. Getting Started with the Intel Media SDK

    By Gael Hofemeier on March 19, 2015 Follow Gael on Twitter: @GaelHof Media SDK Developer’s Guide Med ...

  4. 【NOIP2016】 组合数问题

    [题目链接] 点击打开链接 [算法] 杨辉三角 + 二维前缀和 O(1)计算答案 [代码] #include<bits/stdc++.h> using namespace std; #de ...

  5. python-----删除列表中某个元素的3种方法

    python中关于删除list中的某个元素,一般有三种方法:remove.pop.del: 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除举例说明: >>> st ...

  6. Centos6.5 6.6 (均可) 重置密码或强行破解root密码 简单操作

    centos忘记root密码怎么重置root密码? 使用Linux系统的时候root密码是十分关键的安全机制. 但是假设那天丢失了root密码的话问题就严重了. 百牛信息技术bainiu.ltd整理发 ...

  7. bzoj 3697: 采药人的路径【点分治】

    点分治,设当前处理的块的重心为rt,预处理出每个子树中f[v][0/1]表示组合出.没组合出一对值v的链数(从当前儿子出发的链),能组合出一对v值就是可以有一个休息点 然后对于rt,经过rt且合法的路 ...

  8. IT兄弟连 JavaWeb教程 Servlet API

    Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类. Servlet可以使用javax.servlet和javax.servlet.http包创建 ...

  9. springcloud(一) 服务拆分

    一般我们的项目如果需要从单应用服务升级到微服务,必须要将原来的服务做拆分,我这边的拆分也是基于将之前spb-demo的springboot单应用做拆分,拆分出三个应用,spb-brian-query- ...

  10. python 导入.py

    转自: https://blog.csdn.net/winycg/article/details/78512300 在同一个文件夹下调用函数:A.py文件: def add(x,y): print(' ...