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

scala-idea环境搭建及使用

环境搭建

创建一个新项目,选择maven工程

点击next,写入项目名,然后finish

注意:默认下,maven不支持scala的开发,需要引入scala框架,右键项目点击-》add framework

pport....,在下图选择Scala

注意:如果是第一次引入框架,use libary看不到,需要配置,配置就是选择你的scala 安装目录,然后工具就会自动识别,就会显示use libary。

创建项目的源文件目录

步骤:右键main目录创建一个diretory,写个名字比如scala,右键scala目录,mark diretory,选择source root即可

在scala包下,创建包com.某某某.scala-1包名,并创建Object

编写输出Hello scala案例

scala程序基本架构

class scala_one {

  定义变量:

  val/var 变量名:变量类型 = 变量值

  val a: Int = 1

  定义方法:

  def 函数名(参数名:参数类型):返回值类型={方法体}

  def hello(arg: String): Unit = {

    println(arg)

  }

}


object scala_one {

  Scala程序的入口

  def main(args: Array[String]): Unit = {

    println("hello,scala") }

  完全面向对象:scala完全面向对象,故scala去掉了java中非面向对象的元素,如static关键字,void类型

  1.static

  scala无static关键字,由object实现类似静态方法的功能(类名.方法名),object关键字和class的关键字定义方式相同,但作用不同。class关键字和java中的class关键字作用相同,用来定义一个类;object的作用是声明一个单例对象,object后的“类名”可以理解为该单例对象的变量名。

  2.void

  对于无返回值的函数,scala定义其返回值类型为Unit类

}

Scala程序反编译

object在底层会生成两个类 scala_one, scala_one$

scala_one中有个main函数,调用 scala_one$ 类的一个静态对象 MODULES$

scala_one$.MODULE$. 对象时静态的,通过该对象调用Hello$的main函数

可以理解我们在main中写的代码在放在scala_one$的main,在底层执行Scala编译器做了一个包装

下面我们说明一下Scala程序的执行流程:

scala_one源码

objscala_one {

def main(args: Array[String]): Unit = {

  //4. 可以理解我们在main中写的代码在放在Hello$的main,在底层执行scala编译器做了一个包装

 println("hello,scala") }}

scala_one.class类

//1. object在底层会生成两个类 Hello , Hello$

//2. Hello中有个main函数,调用 Hello$ 类的一个静态对象 MODULES$

public final class scala_one{

    public static void main(String[] paramArrayOfString) {

    scala_one$.MODULE$.main(paramArrayOfString); }}

scala_one$.class

public final class scala_one${

    public static final  MODULE$;

static { new ();  }

public void main(String[] args) {

  //3. scala_one$.MODULE$. 对象是静态的,通过该对象调用scala_one$的main函数

       Predef..MODULE$.println("hello,scala");}

    private scala_one$(){

       MODULE$ = this;}}

解释:

scala中如果使用object关键字声明类,在编译时,会同时产生两个类:当前类和当前类$。

使用当前类$的目的在于模拟静态语法,可以通过类名直接访问方法。

scala将当前类$这个对象称之为伴生对象,伴随着类所产生的对象,这个对象中的方法可以直接使用。

开发注意事项:

Scala源文件以“.scala" 为扩展名。

Scala程序的执行入口是object main()函数。

Scala语言严格区分大小写。

Scala方法由一条条语句构成,每个语句后不需要分号,

Scala语言会在每行后自动加分号)。(至简原则)

如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号。

官方编程指南

        查看scala-docs-2.11.8文档,可以获得Scala的API操作

        

变量和数据类型

用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。

注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

1)基本语法

(1)单行注释://

(2)多行注释:/* */

(3)文档注释:/**

*

    */

代码规范

使用一次tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移。

或者使用ctrl + alt + L来进行格式化。

运算符两边习惯性各加一个空格。比如:2 + 4 * 5。

一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅。

标识符的命名规范

Scala对各种变量方法函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。

命名规则

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

以字母或者下划线开头,后接字母、数字、下划线

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

第一种和第二种拼接,第一种在前,二者以下划线分隔

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

scala关键字(39个)

  • package, import, class, object, trait, extends, with, type, for
  • private, protected, abstract, sealed, final, implicit, lazy, override
  • try, catch, finally, throw
  • if, else, match, case, do, while, for, return, yield
  • def, val, var
  • this, super
  • new
  • true, false, null

变量

        基本语法

var | val 变量名 [: 变量类型] = 变量值

说明:在Scala中声明一个变量时,可以不指定类型,编译器根据值确定

        案例实操

声明变量时,类型可以省略(编译器自动推导,即类型推导)

      类型确定后,就不能修改,说明Scala是强数据类型语言。

变量声明时,需要初始值。

在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改

val修饰的变量在编译后,等同于加上final通过反编译看下底层代码

通过反编译软件,得到对应的底层的.class是

public final class TestVar${

    public static final MODULE$;

    private int num1;

    private final int num2;

var修饰的对象引用可以改变,val修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)

字符串输出

基本语法

字符串,通过+号连接。

printf用法:字符串,通过%传值。

字符串,通过$引用。

案列实操

相关文章:

  • 扩展wordpress回收站功能
  • SpringBoot SpringMVC (详解)
  • 《数据结构学习笔记---第三篇》---单链表具体实现
  • 提升JavaScript代码质量的最佳实践
  • 2024最新华为OD机试试题库全 -【幼儿园圆桶的取出顺序】- C卷
  • LNMP架构之mysql数据库实战
  • easyExcel大数据量导出oom
  • [BT]BUUCTF刷题第9天(3.27)
  • 整数的反转
  • 离线数仓(八)【DWD 层开发】
  • 芯片工程系列(5)2.5D 3D封装
  • 13 Games101 - 笔记 - 光线追踪(Whitted-Style光线追踪原理详解及实现细节)
  • docker日志大小设置(doker logs)
  • Spring_MVC
  • IP如何异地共享文件?
  • 【mysql】环境安装、服务启动、密码设置
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • HashMap ConcurrentHashMap
  • js ES6 求数组的交集,并集,还有差集
  • js操作时间(持续更新)
  • JS基础之数据类型、对象、原型、原型链、继承
  • Material Design
  • React-redux的原理以及使用
  • Shell编程
  • uva 10370 Above Average
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何在 Tornado 中实现 Middleware
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 优化 Vue 项目编译文件大小
  • 走向全栈之MongoDB的使用
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #define、const、typedef的差别
  • ${factoryList }后面有空格不影响
  • (11)MATLAB PCA+SVM 人脸识别
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (python)数据结构---字典
  • (二十三)Flask之高频面试点
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (一)基于IDEA的JAVA基础10
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .md即markdown文件的基本常用编写语法
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net和jar包windows服务部署
  • .NET开源快速、强大、免费的电子表格组件
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [C/C++随笔] char与unsigned char区别
  • [C++]STL之map
  • [C++基础]-初识模板
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解