Scala(一)基本类型

news2024/9/25 13:16:44

Scala语言快速入门(基本类型)

一、Linux和Windows环境安装

这部分跳过,直接使用IDEA进行搭建,和其他编程语言配置差不多

二、HelloWorld

  • 1.object表示一个伴生对象(相当于一个对象)
  • 2.HelloWorld是对象的名字
  • 3.def表示声明一个方法
  • 4.main表示程序入口
  • 5.args:Array[String] 表示形参,和go语言差不多,把参数写前面,类型写在后面
  • 6.Unit表示返回值为空(类似Java中的void)
object HelloWorld {
 def main(args: Array[String]): Unit = {
    print("Hello World")
  }
}
科普:反编译的helloworld的执行过程
/**
  * jd-gui
  * 这个工具可用进行反编译成java
  * 我们通过对源文件的反编译,得到一个java的源文件
  * 如果我们使用Java的描述来看,执行流程
  *
  * 1.我们使用object Hello.scala会生成2个.class文件,分别是Hello.class
  * 和Hello$.class
  * 2.调用HelloScala$类的方法 Hello$.MoDULE$.main
  * 3.执行主函数
  */
  
public class HelloWorld {
    public static void main(String[] args) {
        HelloWorld$.MODULE$.main(args);
    }
}
final class HelloWorld${
    public static final HelloWorld$ MODULE$;

    static{
        MODULE$=new HelloWorld$();
    }

    public void main(String[] args) {
        System.out.println("HelloWorld");
    }
}

三、注释(和Java一样)

1.单行注释
//
2.多行注释
/**/
3.文档注释
/**
 *@Param:
 *@Return:
 */

四、变量

4.1.变量的基本使用

object VarDemo {
  def main(args: Array[String]): Unit = {
    var a:Int = 10
    var b:String = "hello"
    var c:Boolean = false
    var d:Double = 10.0
    var f:Float = 10.1f
    println(s"${a}${b}")
  }
}

现代编译器,都是动态的,很多编译器都会进行自由化的逃逸分析

注意事项

1.声明变量时,类型可以省略,编译器会自动推导,比如var a:Int = 10可以把:Int简写,这样做,自己本身还是会自动转为强类型,类似

println(a.isInstanceOf[Int])

2.声明变量我们有2种方式,var或者val,var修饰的变量可以改变,val修饰的变量不可以改变,如果不需要改变,我们推荐使用val,因为线程安全,效率高

var a=10
a=""//可以
val b=10
b=""//不可以

3.不能不给初始值

var a //不可以

五、程序运算符

1.程序+的使用

(1)、左右都是数值,做加法
(2)、左右有一方是字符串,做拼接运算

六、数据类型

1.在Scala中,数据类型都是对象

2.Scala数据类型分为AnyVal(值类型)和AnyRef(引用类型)

无论值类型,和引用类型,都是对象

科普源码:
在scala中,使用Any作为总根
AnyVal是一个分支:Double,Float,Long,Int,Short,Byte,Boolean,Char,StringOps,Unit
AnyRef是一个分支:里面有Scala集合,所有Java类,Null,Nothing和其他Scala类

整型

1.Scala整型不受OS影响,保证可移植性

2.常量/字面量默认Int型,声明Long型必须加l或者L

3.Scala程序中变量常声明为Int型,除非不足以表示大数,才是用Long

记忆:
Byte Short Int Long分别1,2,4,8字节,和Java一样

浮点型

1.浮点型有固定的范围和长度,不受OS影响

2.默认Double型,声明Float必须加L

3.浮点型可直接表示也可科学计数法

4.通常情况下Double比Float更精确,小数点约后7位

字符型

1.Char字符是2个字节

2.允许转义符号,转化为常量

3.可以直接赋值一个整数

4.Char类型可以运算,因为是Unicode编码

Boolean

true & false

Unit & Null & Nothing重点

1.我们把Unit进行返回打印,进行测试,打印()

  def main(args: Array[String]): Unit = {
    var res=sayHello()
    println(res)
  }
  def sayHello():Unit={
  }
  
  输出:()

2.关于Null

val dog:Dog=null
val ch:Char=null

比较上述两句代码,我们发现,只有Dog不报错,证明,只有AnyRef分支的是可以用null修饰

3.关于Nothing

Nothing是Scala类层级的最低端,是任何其他类型的子类型,当一个函数没有确定返回值,可以返回Nothing

Question&Answer

1.在Scala REPL(read->evaluteion->print->loop)中,计算3的平方根,然后对该值求平方,求与3相差多少?

提示:在scala.math中找

2.Scala环境变量配置及其作用
使我们在任何地方能访问到scala

3.Scala程序编写编译,运行步骤是什么?能否一步执行。

编写文件HelloWorld
scalac HelloWorld.scala
scala HelloWorld

4.Scala程序编写的规则。
几乎和Java相同,仅仅后面不加分号

5.Scala语言的SDK是什么?
开发工具包(software development kit)

6.简述,配置环境,编译,运行各个步骤中常见的错误
搭建一下,如果缺少lib包,可以yum upgrade一下,如果还报错,就yum update

7.如何检测一个变量是val还是var?

如果能修改则是val,不能修改是var
8.Scala允许你用数字乘一个字符串,去REPL中试一下“crazy"。如何在scaladoc中找到

9.10 max 2是什么操作? max定义在什么类中

找到最大值 10 max 2 max 20 ,是返回20

10.用Right计算2的1024次方

提示:在BigInt找

11.在Scala中如何获取“Hello”的首字符和尾字符?

提示:在String中找

9.10 max 2是什么操作? max定义在什么类中

找到最大值 10 max 2 max 20 ,是返回20

10.用Right计算2的1024次方

提示:在BigInt找

[外链图片转存中…(img-bJlGrXnF-1703492299893)]

11.在Scala中如何获取“Hello”的首字符和尾字符?

提示:在String中找

[外链图片转存中…(img-ZP9bqFPG-1703492299894)]

(参考视频:av39126512,参考文档:发群里了那个文档)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1334695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目-瑞吉外卖项目优化Day2

读写分离Linux配置 如果只有一台数据库,会导致数据库压力过大,也可能出现磁盘损坏数据丢失的情况。所以考虑借助mysql数据库的主从复制解决以上两个问题。 mysql主从复制的原理 实现主从复制的操作 注意此处的master_log_file的值和master_log_pos的值要…

渗透测试——1.1初认识kali

一、kali的下载 官方地址:www.kali.org 下载后压缩就可用vmware打开即可(初始账号和密码都是kali) 二、三种网络配置 1、桥接模式:将虚拟机看成局域网中的独立主机 2、NAT模式:将物理机当做路由器(rout…

php一句话木马变形技巧

一、什么是一句话木马? 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令。 …

深度学习 | 基本循环神经网络

1、序列建模 1.1、序列数据 序列数据 —— 时间 不同时间上收集到的数据,描述现象随时间变化的情况。 序列数据 —— 文本 由一串有序的文本组成的序列,需要进行分词。 序列数据 —— 图像 有序图像组成的序列,后一帧图像可能会受前一帧的影响…

开源持续测试平台Linux MeterSphere本地部署与远程访问

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

C# 读取Word表格到DataSet

目录 功能需求 Office 数据源的一些映射关系 范例运行环境 配置Office DCOM 关键代码 组件库引入 ​核心代码 杀掉进程 总结 功能需求 在应用项目里,多数情况下我们会遇到导入 Excel 文件数据到数据库的功能需求,但某些情况下,也存…

算法中的数学一:判定质数和求约数相关

1.试除法求质数 质数就是大于1的整数中除了1和自身没有其他因数的数 1.1暴力求解 暴力求解的思路就是从2遍历到自身判断是否有被整除的数&#xff0c;时间复杂度为O(n)的 bool is_prime(int x) {if(x<2)return false;for(int i2;i<x;i){if(x%i0){return false;}}return…

LSTM和GRU vs 循环神经网络RNN

1、考虑下列三种情况下&#xff0c;对比一下普通RNN的表现和LSTM和GRU表现&#xff1a; &#xff08;1&#xff09;早期观测值对预测未来观测者具有非常重要的意义。 考虑一个极端情况&#xff0c;其中第一个观测值包含一个校验和&#xff0c; 目标是在序列的末尾辨别校验和是…

Scala安装

Scala安装使用 windows安装,配置环境变量 以下载Scala2.11为例&#xff0c;操作在Windows中安装Scala。 官网下载scala2.11&#xff1a;All Available Versions | The Scala Programming Language下载好后安装。双击msi包安装,记住安装的路径。配置环境变量&#xff08;和配…

精品Nodejs实现的微信小程序的校园跑腿系统-快递收取件

《[含文档PPT源码等]精品Nodejs实现的微信小程序的校园跑腿系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 操作系统&#xff1a;Windows 10、Windows 7、Windows 8 …

C++:list增删查改模拟实现

C:list增删查改模拟实现 前言一、list底层双链表验证、节点构造1.1 list底层数据结构1. 2 节点构造 二、迭代器封装实现&#xff08;重点、难点&#xff09;2.1 前置说明2.2 迭代器实现 三、list实现3.1 基本框架3.2 迭代器和const迭代器3.2 构造函数、析构函数、拷贝构造、赋值…

解决FTP传输慢的问题(ftp传输慢为什么)

在企业运营中&#xff0c;使用FTP进行文件或数据传输是相当普遍的做法。尽管FTP是一种传统的文件传输工具&#xff0c;但在实际应用中&#xff0c;我们可能会面临传输速度缓慢的问题&#xff0c;这不仅影响工作效率&#xff0c;还浪费时间。为了解决这一问题&#xff0c;我们可…

Vue中Render函数、_ref属性、_props配置的使用

Render函数 由于导入的vue为vue.runtime.xxx.js是运行版的vue.只包含&#xff1a;核心功能&#xff1a;没有模板解析器 完整版的Vue为vue.js包含&#xff1a;核心功能模板解析器 vue.runtime.esm.js中的esm为ES6的模块化 //导入的vue并非完整的vue&#xff0c;这样做的好处是…

实战:朴素贝叶斯文本分类器搭建与性能评估

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Druid源码阅读-DruidStatInterceptor实现

上次我们在druid-spring-boot-starter里面看到有一个DruidSpringAopConfiguration的配置类&#xff0c;然后引入了DruidStatInterceptor这样一个切面逻辑。今天我们就来看一下这个类的实现。 DruidStatInterceptor 这个类的包路径下入com.alibaba.druid.support.spring.stat。…

服务器代码上传到gitlab

服务器代码上传到gitlab 安装Git工具linux&#xff1a;安装Git&#xff0c;使用自带的源安装 yum install git生成密钥文件&#xff1a;使用ssh-keygen生成密钥文件.ssh/id_rsa.pub ssh-keygen 使用cat命令查看密钥&#xff0c;将下面的密钥复制一份 在gitlab上建立一个和…

2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题&#xff1a;Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion 全波形反演&#xff08;FWI&#xff09;是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准…

浅学JWT跨域认证

Json Web令牌简称JWT 由HeaderPayloadSignature组成 Header JWT头是一个描述JWT元数据的JSON对象&#xff0c;alg属性表示签名使用的算法&#xff0c;默认为HMAC SHA256&#xff08;写为HS256&#xff09;&#xff1b;typ属性表示令牌的类型&#xff0c;JWT令牌统一写为JWT。…

湘沪数字产业(上海)协同创新中心正式启动!

前言 随着全球化的加速和市场竞争的日益激烈&#xff0c;产业协作已成为推动科技创新和经济发展的重要手段。在创新驱动战略的推动下&#xff0c;全国形成了在科创核心城市建设科创中心的浪潮&#xff0c;旨在充分利用不同区域的产业优势&#xff0c;加强产业协作&#xff0c;…