scala 01 概述 优缺点 环境搭建

语言分类

 编译型: C、C++、Pascal、Object-C 

优点 :编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

解释型 JavaScript、Python、Erlang、PHP、Perl、Ruby

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

JAVA  混合型,先编译字节码  后解释执行

混合型  C# Java Scala

既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行

scala 和JAVA类似也属于先编译 后解释执行,并且执行字节码也是在JVM

Scala 官网

https://www.scala-lang.org/

Scala优点

1 scala 运行在JVM上,意味着他可以和JAVA无缝对接,直接调用JVM的字节码方法类等

2 让类型为你服务 ,不再有复杂的类型,可以var a=3 var a='3' var a ="3" 能够自行推断类型

3 高并发 分布式 

4 JAVA中类只能集成一个类  scala 通过traits能多继承

5 switch 在case时 可以穿入一个数字  case是可以判断数字类型为int

6 函数是第一类对象 可以作为参数传给任何其他的东西 

scala idea环境搭建

安装插件

安装sdk

添加后 Libraries 中会出现添加的版本sdk

JDK

新建scala工程

新建一个scala类 ,如果没有Scala Class 去检查一下Libraries中是否有scala SDK

package com.csg
//object 更像一个static 类 里面的属性会先执行
object scala01  {
  println("1")
  private  val aa =new scala01()
  def main(args: Array[String]): Unit = {
    println("5")
    aa.test()
  }
  println("4")
}
class scala01{
  var a=6
  println("2")
  def test ():Unit ={
    println(s"a = $a ...")
  }
  println("3")
}

点击运行按钮,如果没有运行按钮,等右下面的下载进度条更新完才会出现

类型

构造方法

package com.csg
//object 更像一个static 类 里面的属性会先执行
object scala02  {
  var a:Int = 7
  println("1")
  private  var scala01 =new scala02("lisi")
  def main(args: Array[String]): Unit = {
    println("5")
    scala01.test()
  }
  println("4")
}

class scala02(){
  //相当于final 不可变
  val name1 ="张三"
  var a=6
  println("2")
  def test ():Unit ={
    //s 表示字符串衔接  里面可以使用$符号进行变量拼接 类似于shell
    println(s"a = $a ...")
    //当coject 和class重名,使用名称.属性的时候会使用object的属性 并且object不需要new
    println(s"a = ${scala02.a} ...")
  }
  println("3")
//构造函数使用this 并且必须有参构造必须调用无参构造函数
  def this(name:String){
    this()
    println("8")
  }
}

有参数构造方法另一种初始化赋值方式

package com.csg
//object 更像一个static 类 里面的属性会先执行
object scala03  {
  var a:Int = 7
  println("1")
  private  var scala01 =new scala03("lisi")
  def main(args: Array[String]): Unit = {
    println("5")
    scala01.test(1)
  }
  println("4")
}
//类名后面接参数 相当于构造方法 并且name2 默认为val
// 默认的参数传递都是val的,方法中的参数只能是val 不能修改 不能赋值
class scala03( val name2 :String){
  //相当于final 不可变
  val name1 ="张三"
  var a=6
  println("2")
  def test ( value :Int):Unit ={
    // 错误 不能赋值 因为方法参数为val
   // value =5
    //s 表示字符串衔接  里面可以使用$符号进行变量拼接 类似于shell
    println(s"a = $a ...")
    //当coject 和class重名,使用名称.属性的时候会使用object的属性 并且object不需要new
    println(s"a = ${scala03.a} ...")
    println(s"name2 = $name2 ...")
  }
  println("3")

}

个性化构造

package com.csg
  object scala04{
    var a:Int = 7
    println("1")
    private  var scala01 =new scala04(1)
    def main(args: Array[String]): Unit = {
    println("5")
    scala01.test(1)
    }
  println("4")
  }
//类名后面接参数 相当于构造方法 并且name2 默认为val
// 默认的参数传递都是val的,方法中的参数只能是val 不能修改 不能赋值
class scala04(val name2 :String){
  //相当于final 不可变
  val name1 ="张三"
  var a=6
  println("2")
  def test ( value :Int):Unit ={
    // 错误 不能赋值 因为方法参数为val
   // value =5
    //s 表示字符串衔接  里面可以使用$符号进行变量拼接 类似于shell
    println(s"a = $a ...")
    //当coject 和class重名,使用名称.属性的时候会使用object的属性 并且object不需要new
    println(s"a = ${scala04.a} ...")
    println(s"name2 = $name2 ...")
  }
  println("3")
  //个性化构造器 必须传入参数给nam2 ,不然name2将没有赋值的机会...
  //构造器参数类型不能跟类的参数相同
  def this(age :Int){
    this("wangwu")

  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值