Scala学习3——注释和变量类型

1.注释

Scala注释和java完全一致

  • // 单行
  • /* */ 多行
  • /** */ 文档,方法或者类前面,便于scaladoc生成文档。
  //单行注释

  /*
  多行注释
   */

  /*
  * 文档注释
  *
  *
  * */

2.代码规范

  • 使用tab操作实现缩进,默认整体向右移动;shift+tab整体左移
  • 使用ctrl+alt+L进行格式化
  • 运算符两边习惯性各加一个空格,例如:2 + 4 * 5
  • 一行最多不超过80个字符,超过可以换行展示

3.变量和常量

常量:在程序执行的过程中,其值不会改变的变量

1)基本语法

var 变量名 [:变量类型] = 初始值  var i : Int = 10

val 常量名 [:常量类型] = 初始值  val j : Int = 20

注意:能用常量的地方不用变量

  • 声明变量时,类型可以省略,编译器会自动推导。
  • 静态类型,类型经过给定或推导确定后就不能修改。
  • 变量和常量声明时,必须有初始值。
  • 变量可变,常量不可变。
  • 引用类型常量,不能改变常量指向的对象,可以改变对象的字段。
  • 不以;作为语句结尾,scala编译器自动识别语句结尾。

val自身不可变,但它其中的属性可以改变

class Student(name:String, var age:Int) {
  def printInfo() : Unit = {
    println(name + " " + age + " " + Student.school)
  }
}
    val bob = new Student("bob",23)
    bob.age = 24
    bob.printInfo()
//    bob = new Student("bob",24)

2)练习代码

package chapter02

import chapter01.Student

object Test02_Variable {
  def main(args: Array[String]): Unit = {
    //声明一个变量的通用语法
    var a : Int = 10

    //(1)声明变量时,类型可以省略,编译器自动推导,即类型推导
    var a1 = 10
    val b1 = 23

    //(2)类型确定后,就不行修改,说明Scala是强数据类型的语言,和js等弱数据类型语言是有区别的
    val a2 = 15
//    a2 = "hello"

    //(3)变量声明时,必须要有初始值
//    var a3 : Int

    //(4)在声明|定义一个变量时,可以使用var或者val来修饰,var修饰的变量可以改变,val修饰的变量不可改
    a1 = 12
//    b1 = 30

    var alice = new Student("alice",20)
    alice = new Student("Alice",20)
    alice = null
    val bob = new Student("bob",23)
    bob.age = 24
    bob.printInfo()
//    bob = new Student("bob",24)
  }
}

4.标识符的命名规范

1)规则

Scala中的标识符声明,基本和java一致但在细节上有所变化,有以下三种规则:

(1)以字母或者下划线开头,后接字母、数字、下划线,和Java一样

(2)以操作符开头,且只包含操作符(+ - * / # !)

(3)用反引号`......`包括的任意字符串,即使是Scala关键字(39个)也可以

    //(1)以字母或者下划线开头,后街字母、数字、下划线
    val hello : String = ""
    var Hello123 = ""
    val _abc = 123

//    val h-b = ""
//    val 123abc = 234

    //(2)以操作符开头,且只包含操作符( + - * / # ! 等)
    val -+*% = "hello"
    println(-+*%)

    //(3)用反引号`......`包括的任意字符串,即使是Scala关键字(39个)也可以
    val `if` = "if"
    println(`if`)

2)Scala关键字

  • package import class obejct trait extends with type for
  • private protected abstract sealed final implicit lazy override
  • try catch finlly throw
  • if else match case do while for return yield
  • def var val
  • this super
  • new
  • true false null
  • 其中Java没有的关键字:object trait with implicit match yield def val var

5.字符串输出

1)基本语法

(1)字符串,通过+号连接

(2)printf用法:字符串,通过%传值,类似C语言

(3)字符串模板(插值字符串):通过$获取变量值

2)练习代码

package chapter02

import java.util.function.DoubleBinaryOperator

object Test04_String {
  def main(args: Array[String]): Unit = {
    //(1)字符串,通过+号连接
    val name : String = "alice"
    val age : Int = 18
    println(age + "岁的" + name)

    // *用于将一个字符串复制多次并拼接
    println(name * 3)

    //(2)printf用法:字符串,通过%传值
    printf("%d岁的%s", age, name)
    println()

    //(3)字符串模板(插值字符串):通过$获取变量值
    println(s"${age}岁的${name}")


    val num:Double = 2.3456
    println(f"The num is ${num}%2.2f")   //f""格式化模板字符串
    println(raw"The num is ${num}%2.2f")    //raw""原始输出

    //三引号表示字符串,保持多行字符串的原格式输出
    val sql =
      s"""
        |select *
        |from
        |   student
        |where
        |   name = ${name}
        |and
        |   age = ${age}
        |""".stripMargin
    println(sql)
  }
}

 

6.键盘输入

在编程中,需要接收用户输入的数据,就可以用键盘输入语句来获取

1)基本语法

StdIn.readLine()、StdIn.readShort()、StdIn.readDouble()

 

 2)练习代码

package chapter02

import scala.io.StdIn

object Test05_StdIn {
  def main(args: Array[String]): Unit = {
    //输入信息
    println("请输入您的姓名:")
    val name: String = StdIn.readLine()
    println("请输入您的年龄:")
    val age: Int = StdIn.readInt()

    //控制台打印输出
    println(s"欢迎${age}岁的${name}")
  }
}

 

7.文件的输入输出

package chapter02

import java.io.{File, PrintWriter}
import scala.io.Source

object Test06_FileIO {
  def main(args: Array[String]): Unit = {
    //1.从文件中读取数据
    Source.fromFile("src/main/resources/test.txt").foreach(print)

    //2.将数据写入文件
    val writer = new PrintWriter(new File("src/main/resources/output.txt"))
    writer.write("hello scala from java")
    writer.close()
  }
}

 

 

 

 

8.数据类型

1)数据类型

  • java基本类型char byte short int long float double boolean
  • java基本类型对应包装类型:Charater Byte Short Integer Long Float Double Boolean
  • java中不是纯粹的面向对象。
  • Scala吸取了这一点,所有数据都是对象,都是Any的子类。
  • Any有两个子类:AnyVal值类型 AnyRef引用类型。
  • 数值类型都是AnyVal子类,和Java数值包装类型都一样,只有整数在scala中是Int、字符是Char有点区别。
  • StringOps是java中String类增强,AnyVal子类。
  • Unit对应java中的voidAnyVal子类。用于方法返回值的位置,表示方法无返回值,Unit是一个类型,只有一个单例的对象,转成字符串打印出来为()
  • Void不是数据类型,只是一个关键字。
  • Null是一个类型,只有一个单例对象null就是空引用,所有引用类型AnyRef的子类,这个类型主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。
  • Nothing所有类型的子类型,也称为底部类型。它常见的用途是发出终止信号,例如抛出异常、程序退出或无限循环。

 

2)整数类型

都是有符号整数,标准补码表示

  • Byte 1字节
  • Short 2字节
  • Int 4字节
  • Long 8字节
  • 整数赋初值超出表示范围报错。
  • 自动类型推断,整数字面值默认类型Int,长整型字面值必须加L后缀表示。
  • 直接向下转换会失败,需要使用强制类型转换,(a + 10).toByte

3)浮点类型

  • Float IEEE 754 32位浮点数
  • Double IEEE 754 64位浮点数
  • 字面值默认Double

4)字符类型

  • 同java的Character,2字节,UTF-16编码的字符。
  • 字符常量:''
  • 类型Char
  • 转义:\t \n \r \\ \" \'etc

5)布尔类型

  布尔类型:true false

6)空类型

  • Unit 空值,只有一个实例,用于函数返回值。
  • Null 空引用,只有一个实例null
  • Nothing 既没有值也没有引用,什么也没有,只知道空但不确定是值空还是引用类型空。确定没有正常的返回值,可以用Nothing来指定返回值类型。好像意思是抛异常时返回Nothing,不是特别懂。

Unit

    //空值Unit
    def m1(): Unit = {
      println("函数m1被调用执行!")
    }

    val a: Unit = m1()
    println("a: " + a)

 

 可以看到Unit空指就是一个括号

Null

    //空引用Null
//    val n: Int = null   //error
    var student: Student = new Student("alice",20)
    student = null
    println(student)

 

 不能直接定义为Null类型

可以空引用,null

Nothing

    //Nothing
    def m2(n: Int): Nothing = {
      throw new NullPointerException
    }

    val b = m2(0)
    println(b)

 

 

明天继续学习

推荐这些文章:

Scala语言 学习记录(三)

1、Scala中的空类型
  Unit、null、Nothing

package com.demo3

import com.demo1.Student

/**
* @author June
* @date 2022/1/26 8:52
*/
object Test3_1 {
def main(args: Array[String]): Unit = {
//空类型
// 空值Unit
def m1():Unit = {
println("m1 被调用执行")
}

val a: Unit = m1()
printl...

java学习--一个标准类

public class Student {

private String name;
private int age;
private boolean male;

public Student() {
System.out.println("无参数构成方法执行了");
}

public Student(String name, int age, boolean male) {
System.out.println("有参数构成方法执行了");
this.name = name;
...

scala学习

1.安装后Exception in thread “main” java.lang.NullPointerException问题
打开环境变量

 
 在系统变量中删除CLASSHOME,然后重新运行scala,此时可以解决。

 
 2.scala和java区别在于Scala 语句末尾的分号 ; 是可选的。
class可用object代替
Scala 中的方法跟 Java 的类似,方法是组成类的一部分。
Scala 中的函数则是一个完整的对象,Scala 中的函数其实就是继承了 Trait 的类的对象。
Scala 中使用 val ...

scala简单学习

为啥学scala
因为简单,清晰,在windows下可以很直观的表现
安装JDK 

 安装Scala(一直下一步就行)
windows下安装  不会的看这篇文章    windows下scala安装

 linux下安装
 
 
 
 解包:tar -zxvf scala-2.11.8.tgz   配置环境变量   vim  /etc/profile       ...

Scala语言 学习记录(一)

1、scala项目结构

 
2、hello world第一个程序

object HelloWorld {
def main(args: Array[String]): Unit = {
println("hello world")
System.out.println("aaaa")
}
}

3、与Java程序对比

public class Student {
private String stuname;
private String stupwd;
private static String school="aiaaiai...

Scala语言 学习记录(二)

1、字符串
关键字:

package import class obejct trait extends with type for

private protected abstract sealed final implicit lazy override

try catch finlly throw

if else match case do while for return yield

def var val

this super

new

true false null

其中Java没有的关键字:object trait with implicit ...

Scala 学习记录

基础内容

Scala开发环境配置

MAVEN+SCALA+IDEA

GRADLE+SCALA+IDEA

 
 
 
问题记录

Akka启动时,报错:java.lang.NoClassDefFoundError: scala/Product$class

IDEA 控制台中文输出乱码

Akka启动报错:Exception in thread "main" java.lang.ClassNotFoundException: akka.remote.RemoteActorRefProvider

 

...

寒假学习3-scala简介与基础1

Scala----Java++Scala更适合大数据的处理 spark的底层用Scala编写 spark对集合类型数据处理有非常好的支持————————————————————————————————————————————————————————————
创建Scala文件之前需要先添加框架创建Scala静态类object打入main再输入table键就能够自动补全
package C01
/* object:关键字,声明一个单例对象(伴生对象) */
object HelloWorld { /* main 方法:从外部可以直接调用执行的方法 def 方法名称(参数名称:参数类型...

Spark学习进度2——Scala基础

一、Scala介绍
1、Scala 是一门多范式(multi-paradigm)的编程语言,集成面向对象编程和函数式编程的各种特性。
2、特征:
java和scala可以混编

运行在jvm之上,可以和java混编;

scala可以调用java的包或类,Java也可以调用Scala的包或类

类型推断

scala中用val(表示常量)/var(表示变量)来表示变量类型,不需要显式的定义变量的是数据类型,可以自动推测出来,但不是说是弱语言类型。

并发和分布式

使用Actor作为其并发模型。Actor是一种类似于线程的实体

Trait(特性)

类似于java中 interfa...

大三寒假学习 spark学习 Scala面向对编程 类(getter和setter方法)

class counter {
var value =0//注意这里没有private修饰符,从而让这个变量对外部可见def increment(step: Int): unit= { value +=step}
def current(): Int= {value}
object MyCounter{
def main(args :Array[string]){
val mycounter = new counter
println(mycounter.value)//不是用getxxx获取字段的值mycounter.value =3//不是用setxxx设置字段的值
mycounter...

文章标题:Scala学习3——注释和变量类型
文章链接:https://www.dianjilingqu.com/3903.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>