类,字段和方法

类是对象的蓝图,能够通过new来创建对象。在类的定义里能够有字段和方法。统称member

val还是var都是指向对象的变量(var定义的字段可又一次赋值),def定义方法,包括可运行代码

class ScalaSingleton {
var sum = 0;
}

这里定义类之后创建对象使用了。虽然这里是val,可是对象的变量是能够又一次赋值的

def main(args: Array[String]) {
val singleton = new ScalaSingleton()
println(singleton.sum)
singleton.sum = 5;
println(singleton.sum)
}

1,scala默认是public级别

2,scala的參数都是val类型,因此不可再方法体内又一次赋值

3。简洁性

先来个计算的 V1.0版的代码

class ScalaSingleton {
private var sum = 0; def add(b: Byte): Unit = {
sum += b
} def checksum(): Int = {
return ~(sum &0xff) + 1
}
}

1,在scala中假设没有不论什么显示的返回语句。将返回方法中最后一次计算得到的值

2,假如某个方法仅计算单个结果表达式,能够去掉花括号,如是scala代码就变成了这样

class ScalaSingleton {
private var sum = 0;
def add(b: Byte): Unit = sum += b
def checksum(): Int = return ~(sum &0xff) + 1
}

看起来仅占用了一行。另外

def add(b: Byte): Unit = sum += b

事实上能够去掉返回类型Unit 与等号 写成

def add(b: Byte) { sum += b}

这里来看看以下几个写法

def gUnit():Unit = {"Unit"}
println("gUnit():Unit = {\"Unit\"}:"+gUnit)
def gUnit1() {"Unit1"}
println("gUnit1() {\"Unit1\"}: " + gUnit1)
def gStr() = {"String"}
println("gStr() = {\"String\"}: "+gStr)

执行后返回值是这样子的

gUnit():Unit = {"Unit"}:()
gUnit1() {"Unit1"}: ()
gStr() = {"String"}: String

这里有一点就是:带有花括号的,可是无等号的会被专程Unit类型,从而得不到我们想要的返回类型,因此想要得到想要的返回 类型“=”等号是不能少的

分号判断

多行语句中,分毫是必须的,通常行尾能够觉得是一个分号,操作符通常应该是在行尾,而不能是行头

singleton

Scala中不能定义静态成员。取而代之定义单例对象

class 定义,注意包名差别

package com.luyee.scala.classpkg
class ScalaSingleton {
private var sum = 0;
def add(b: Byte): Unit = sum += b
def checksum(): Int = return ~(sum &0xff) + 1
}

Obj定义

package com.luyee.scala

import scala.collection.mutable.Map

object ScalaSingleton {

  private val cache = Map[String, Int]()
def calculate(s: String):Int =
if(cache.contains(s)){
cache(s)
println("contains"+ cache)
cache(s)
}else{
println("else"+ cache)
val singleton = new com.luyee.scala.classpkg.ScalaSingleton()
for(c <- s)
singleton.add(c.toByte)
val cs = singleton.checksum()
cache += (s -> cs)
cs
} def main(args: Array[String]) {
ScalaSingleton.calculate("2")
ScalaSingleton.calculate("2")
ScalaSingleton.calculate("2")
ScalaSingleton.calculate("2")
}
}

最后的输出结果:

not contains: Map()
contains: Map(2 -> -50)
contains: Map(2 -> -50)
contains: Map(2 -> -50)

scala编程笔记(三)类,字段和方法的更多相关文章

  1. Scala编程 笔记

    date: 2019-08-07 11:15:00 updated: 2019-11-25 20:00:00 Scala编程 笔记 1. makeRDD 和 parallelize 生成 RDD de ...

  2. 响应式编程笔记三:一个简单的HTTP服务器

    # 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...

  3. Scala 编程(三)基本类型和操作

    一些基本类型 值类型 范围 Byte 8位有符号补码整数(-27-27-1) Short 16位有符号补码整数(-215-215-1) Int 32位有符号补码整数(-231-231-1) Long ...

  4. [Scala]Scala学习笔记四 类

    1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...

  5. C#-类 字段 属性 方法 特性

    方法的签名 包括参数个数.参数类型.方法返回值 base和this关键字 1.使用base关键字,就可以使用父类中的字段.属性.方法 2.一旦父类中存在有参数的构造函数,那么子类就必须使用base来覆 ...

  6. Scala学习笔记三

    scala变量理解: package com.cxy.scala object Hello { def main(args: Array[String]): Unit = { println(&quo ...

  7. Java学习笔记-File类的基本方法

    要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...

  8. Java SE学习笔记 --->高级类特性 ---> toString() 方法

    概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...

  9. CLR via C# 读书笔记---常量、字段、方法和参数

    常量 常量是值从不变化的符号.定义常量符号时,它的值必须能在编译时确定.确定后,编译器将唱两只保存在程序集元数据中.使用const关键字声明常量.由于常量值从不变化,所以常量总是被视为类型定义的一部分 ...

随机推荐

  1. Unity3D连接真机调试教程,可抓断点

    源地址:http://www.unity蛮牛.com/thread-19586-1-1.html <ignore_js_op> 未标题-1.jpg (52.33 KB, 下载次数: 0) ...

  2. 为什么Nagios会那么吵?你又能做些什么呢?(1)

    如果你受困于 Nagios 的告警洪潮中不能自拔,那么这两篇连载博客就是为你而生的.让我们来详细的阐述下这个问题! 运维人员都有着独立的监控工具,因此会经常受到 Nagios 告警吵闹的影响.很多运维 ...

  3. php数组遍历 使用while循环

    while() 通常和 list(),each()配合使用. $colors= array('red','blue','green','yellow'); while(list($key,$val)= ...

  4. 利用动软代码生成器 自动生成LINQ需要用的数据实体类 (转)

    首先先建立一个模板 名称随意 我起的“生成数据实体.cmt” 代码如下: <#@ template language="c#" HostSpecific="True ...

  5. ANDROID_MARS学习笔记_S01原始版_007_Handler及线程的简单使用

    一.运行结果 一.代码1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.c ...

  6. 知识总结: Activity的四种启动模式

    通常情况下,一个应用有一个Task,这个Task就是为了完成某个工作的一系列Activity的集合.而这些Activity又被组织成了堆栈的形式.当一个Activity启动时,就会把它压入该Task的 ...

  7. MySQL can’t specify target table for update in FROM clause

    翻译:MySQL不能指定更新的目标表在FROM子句 源SQL语句: delete from t_official_sys_user where USER_NAME IN(SELECT USER_NAM ...

  8. vs2012布局问题

    问题背景: 北大青鸟ASP.Net视频中,老师提到可以通过更改属性PageLayout的值,来实现页面布局由默认的FlowLayout(流式布局)而成为GridLayout(网格布局),即系统控件安排 ...

  9. 屏幕尺寸,屏幕分辨率,屏幕密度,各种长宽单位(px,sp,dp,in.pt,mm)

    常见长宽单位表 名称 单位缩写 单位全拼 介绍 屏幕尺寸 '' 或 in inch 屏幕的大小,通常用屏幕对角线的长度表示.单位是寸 屏幕分辨率 px pixels 整个屏幕的像素数,一般用屏幕的像素 ...

  10. Import data from SQLServer with Sqoop

    author: luciuz date: 2013/11/15 -------------------------------------------------------------------- ...