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. ZOJ3469 Food Delivery —— 区间DP

    题目链接:https://vjudge.net/problem/ZOJ-3469 Food Delivery Time Limit: 2 Seconds      Memory Limit: 6553 ...

  2. java如何判断字符串是否为空(小知识)

    方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: 比较字符串长度, 效率高, 是我知道的最好一个方 ...

  3. codeforces 667B B. Coat of Anticubism(水题)

    题目链接: B. Coat of Anticubism time limit per test 1 second memory limit per test 256 megabytes input s ...

  4. BZOJ_3049_[Usaco2013 Jan]Island Travels _状压DP+BFS

    BZOJ_3049_[Usaco2013 Jan]Island Travels _状压DP+BFS Description Farmer John has taken the cows to a va ...

  5. Brackets(区间dp)

    Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8017   Accepted: 4257 Descript ...

  6. appium九宫格解锁错误提示:The coordinates provided to an interactions operation are invalid解决办法

    原文地址:http://blog.csdn.net/qqtMJK/article/details/77838814 今天做自动化解锁9宫格,发现swipe不能满足需求,于是用TouchAction去实 ...

  7. 1. jsp中<base target='' />标签用法

    用于页面跳转后,页面最后跳转到哪个iframe.例子如下: index.jsp :首页 <head> <base href="<%=basePath %>&qu ...

  8. poj1015【DP.......无奈了】

    首先,读题,真是一窍不通.后来看完程序的意思,才明白吧.. 题意: n个人中选m个,条件是取sum|D-P|最小,当有|D-P|相同的时候取|D+P|最大的.然后输出那些m个人的sumD,sumP,最 ...

  9. POJ1270【拓扑排序+DFS】

    题意: 先给你一个字符串,让你给他们排序: 再给你一行,在这一行,每两个就是第一个需要在第二个前面: 思路: //DFS写多了感觉好有啊,就是排序过程中可能会有多种情况. //我们考虑一下怎么排好一个 ...

  10. python 高阶函数一 概念

    一.2个概念: 1.变量可以指向函数本身 >>> abs <built-in function abs> >>> f = abs >>> ...