当前位置: 首页 > news >正文

scala基础语法(二)

1.标识符

大体上与Java一致。

特殊点:

1.Scala标识符中不允许出现$ 
2.反引号`` 可以将关键字等一些特殊字符使用反引号引起来,这样就变成了一个合法的标识符。


eg:

return class val there is="jthbh"

2.关键字

Scala中的关键字基本上与Java一致。但存在个别Java关键字在Scala中不是关键字的特例。

eg:

break

第一天学习过程中认识到的关键字:


class val var object def trait  type return this  super private protected
Byte Short Int Long Char Float Double Boolean Unit Array  extends with abstract  

3.操作符

算数运算符 逻辑运算符 位运算符 ....等 与Java使用一致。

注意:

1.scala中本质上没有操作符,都是方法的调用。   
2. Scala中 == 与 equals 一致,都是比较值
   eq与ne比较的是地址。

  stu1.eq(stu2)
  1 + 2
  1.+(2)
  1 to 10  
  1.to(10)

4.注释

//单行注释
/*多行注释 */ 
/**文档注释  */

5.控制结构(重点讲解)

5.1 块语句/表达式

val info={
  val b=0;
  val a=9;
  val sum=a+b;
  println(sum);
}

5.2 if表达式

val info=if(3>5){
  1.3
}else{
  0 
} 
val info=if(3<5){0.8}

5.3 输入输出

注意:一个scala源码中默认导入3个包

Console.println
print
printf 

scala.io.StdIn.readLine
readInt


5.4 循环

while  do  for

for推导

格式:

for(发生器){循环体}

eg:

      for(elem <- 1 to 10){...}
 

if守卫

格式:

for(发生器 if守卫){循环体}

eg:

      for(elem <- 1 to 10 if i%2==0 if i%3==0){...}
      for(elem <- 1 to 10 if i%2==0&&i%3==0){...}
 

for嵌套

格式:

for(发生器1;发生器2;...){...}

eg:

      for(i <- 1 to 9;j <- 1 to 9){....}
 

for嵌套+if守卫

格式:

for(发生器1 if守卫;发生器2;... if守卫 if守卫 if守卫){...}

eg:

      for(i <- 1 to 10;j<- 1 to 9; if i%2==0 if j%3==0){...}
      for(i <- 1 to 10 if i%2==0;j<- 1 to 9 if j%3==0){...}
  

for yield 返回新的集合

格式:

for(发生器) yield {循环体}

eg:

      val newCollection=for(i < 1 to 10) yield {i+2}

注意:

除了for yield之外的其他for循环都是一个过程,即没有返回值。

5.5 函数:

现阶段不具体区分方法和函数,因此与day1方法讲解的一致。

5.6 异常

  Scala中的异常有三种处理办法:
  

1.try catch finally

格式:

      try{}catch{}
      try{}catch{}finally{}
      try{}finally{}
   

注意:

      1.支持上边这三种格式,注意最后一种在Java中是不支持的。
      2.catch代码块中没有了所谓了参数列表。
      3.catch代码块中使用case语句去匹配异常信息。
   

eg:

      try{
        //可能会发生异常的代码
      }catch{
        // e,x 只是一个变量,被val修饰的变量。因此,可以自己设置成符合Scala标识符规范的变量名即可。
        case e:IOException => 
          println(e.getMessage)
        case x:NullPointerException =>
          //...........
          //...........
      }
  

2.Option None Some (后期文章中分享)

3.Try Success Failure (后期文章中分享)

5.7 其他语句

  scala不推荐使用return语句。
  
  break/continue在C++中非常常见的控制结构语句,但在Scala中是不必要的,可以使用布尔值类型的量通过IF语句进行控制

  

注意:

scala中没有break关键字,如果想要结束多层循环,可以使用如下代码:

    import  scala.util.control.Breaks._
    breakable{
      for (i<- 1 to 10){
        if (i==5)
          break
      }
    }   

包与引用

1.包对象

每个包都可以有一个包对象,你需要在父包中定义它,且名称与子包一样。

格式:

  package object 包名{
  }


在其他地方,这个常量可以用com.horstmann.impatient.people.defaultName访问到。
包对象被编译成带有静态方法和字段的JVM类,名为package.class,位于相应的包下。
对源文件使用相同的命名规则是好习惯,可以把包对象放到文件com/horstmann/impatient/people/package.scala。这样一来,任何想要对包增加函数或变量的话,都可以很容易地找到对应的包对象。

2.默认导包

import java.lang._
import scala._
import scala.Predef._
//注意:区分先后顺序

3.包引入重命名

//全部导入
import scala.collection.mutable._ 
//重命名
import java.util.{ HashMap => JavaHashMap } 
//将HashMap之外全部导入
import java.util.{ HashMap => _,_}

4.包的作用范围

与变量的作用范围一致,不可以在引用范围之外使用该包内的类,对象。

相关文章:

  • python subprocess
  • linux笔记4.0
  • Oracle毙掉JavaOne
  • node入门
  • HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版
  • 拓展jquery js动态添加html代码 初始化数据
  • 几种编码格式
  • “Head First 设计模式“ :适配器模式
  • 一个披萨电影夜,你到底泄露了多少个人数据?
  • web项目中web.xml的作用
  • 【特征选择】过滤式特征选择法
  • 学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • Git工程实践(一)巧用commit message
  • 使用渲染纹理的制作摄像头
  • 0x05 Python数据分析,Anaconda八斩刀
  • ECMAScript入门(七)--Module语法
  • HTTP 简介
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS笔记四:作用域、变量(函数)提升
  • learning koa2.x
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • OSS Web直传 (文件图片)
  • rc-form之最单纯情况
  • SpringBoot 实战 (三) | 配置文件详解
  • vue 个人积累(使用工具,组件)
  • 阿里云前端周刊 - 第 26 期
  • 简单数学运算程序(不定期更新)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信公众号开发小记——5.python微信红包
  • 微信支付JSAPI,实测!终极方案
  •  一套莫尔斯电报听写、翻译系统
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • (07)Hive——窗口函数详解
  • (33)STM32——485实验笔记
  • (4)STL算法之比较
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (python)数据结构---字典
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (一)RocketMQ初步认识
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)一些感悟
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ***通过什么方式***网吧
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net core控制台应用程序初识
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net经典笔试题
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET性能优化(文摘)
  • .NET值类型变量“活”在哪?
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .net中应用SQL缓存(实例使用)