import java.util.Scanner; Scanner scanner=new Scanner(); char sex=scanner.next().charAt(0);
为了能够和Java语言进行交互,使用单例对象来取代static关键字的语义,伴生类的静态声明都可放在伴生对象中。...Scala 中 obj(arg)的语句实际是在调用该对象的 apply 方法,即 obj.apply(arg)。用以统一面向对象编程和函数式编程的风格。...Scala底层对于伴生对象的apply方法进行了优化,调用时可以省略方法名,直接使用单例对象的名称+调用apply方法的参数 当使用 new 关键字构建对象时,调用的其实是类的构造方法,当直接使用类名构建对象时...trait 特质名 { // 代码块 } Scala 语言中,采用特质 trait(特征)来代替接口的概念 多个类具有相同的特征时,就可以将这个特征提取出来,用继承的方式来复用 Scala 中的 trait...一个类或者特征指定了自身类型的话,它的对象和子类对象就会拥有这个自身类型中的所有属性和方法。 是将一个类或者特征插入到另一个类或者特征中,属性和方法都就像直接复制插入过来一样,能直接使用。
1) Any 是所有类的根类型,即所有类的父类(基类) 2) 在 Scala中类分为两个大的类型分支(AnyVal [值类型,即可以理解成就是 java 的基本数据类型],AnyRef 类型)...8) 在 Scala中,Unit 类型比较特殊,这个类型也只有一个实例 () Scala数据类型列表 数据类型 描述 Byte 8位有符号补码整数。...这种函数我们称之为惰性函数,在 Java 的某些框架代码中称之为懒加载(延迟加载),Java中没有原生方法。...trait 名 特质名 { trait 体 体 } 1) trait 命名 一般首字母大写. 2) 在 scala 中,java 中的接口可以当做特质使用 trait使用 scala #没有父类 class...即:访问方式:外部类名别名.属性名 【外部类名.this 等价 外部类名别名】 scala class AAA{ myOuter=> class InnerAAA{ //使用别名的方式来访问外部类的属性和方法
中包的用法 导包 语法: import 包.*/ import 包.类名 位置: 必须处于java源文件中,声明包(package)之后,类(class) 之前 声明包 scala中包的用法...import java.util.{ArrayList,HashMap,LinkedList} 取别名 import 包名.{类名=>别名,...}...) private var name:String="" 在 class 中定义属性的时候使用 var 修饰的属性可以使用_赋予初始值 class Person{ private var name...规范中,应该对属性定义 get/set 方法,在scala中也有默认 get/set 方法。...scala中,在class中的代码不是属性或函数, 它会统一放到主构造器中执行。
scala 中,java 中的所有接口可以当做特质使用。...2、特质中没有实现的方法就是抽象方法。类通过 extends 继承特质,通过 with 可以继承多个特质。 3、所有的 java 接口都可以当做 Scala 特质使用。...:在 java 中,内部类只和类型相关。 ... test 的 正确和错误的原因: // 1、Java 中的内部类从属于外部类,因此在 java中 inner1.test(inner2) 就可以,因为是按类型来匹配的。...2、当对象调用所在类中不存在的方法或成员时,编译器会自动将对象进行隐式转换(根据类型)。 3、即:当对象调用所在类中存在的方法或成员时,编译器不会将对象进行隐式转换。
Spark Core&Spark SQL API dataframe与dataset统一,dataframe只是dataset[Row]的类型别名 SparkSession:统一SQLContext和HiveContext...mesos粗粒度模式下,支持启动多个executor 支持kryo 3.0版本 使用scala 2.11替代了scala 2.10 移除的功能 bagel模块 对hadoop 2.1以及之前版本的支持...变化的机制 要求基于scala 2.11版本进行开发,而不是scala 2.10版本 SQL中的浮点类型,使用decimal类型来表示,而不是double类型 kryo版本升级到了3.0 java的flatMap...和mapPartitions方法,从iterable类型转变为iterator类型 java的countByKey返回类型,而不是类型 写parquet文件时,summary...文件默认不会写了,需要开启参数来启用 spark mllib中,基于dataframe的api完全依赖于自己,不再依赖mllib包 过期的API mesos的细粒度模式 java 7支持标识为过期,可能
_,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。如果想要引入包中的几个成员,可以使用selector(选取器):import java.awt....在scala是可以对数字等基础类型调用方法的,即数字也是一个对象,不是一个字面量。...Null类是null引用对象的类型,它是每个引用类(继承自AnyRef的类)的子类。Null不兼容值类型。变量在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量。...在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。...构造器的执行顺序:调用超类的构造器;特征构造器在超类构造器之后、类构造器之前执行;特征由左到右被构造;每个特征当中,父特征先被构造;如果多个特征共有一个父特征,父特征不会被重复构造所有特征被构造完毕,子类被构造
这篇文章在类的继承基础上进一步分析Python和Scala是如何处理类和对象,实现一个纯的面向对象的语言。...下面分析参考《Programming In Scala》 Scala的每个类都继承自Any类,在Any中定义的方法在所有类都可以使用,例如toString方法。 Any类的方法有==,!...Float AnyRef是所有引用类的父类,例如来自Java的类,List,String,自定义Scala类等类,是java.lang.object类的别名。...除了继承关系外,Scala的数值类型一般情况下都是直接映射在内存上,而需要的时候,会调用相应的类操作,例如Int在使用toString操作的是java.lang.Integer类(自动装箱)。...这一点与Python使用名字空间的方式截然不同。 除了值类和引用类之外还存在一种特殊的类,被称为底类型。有两种底类型,分别是scala.Null和scala.Nothing。
package 子包中的类可以直接访问父包中的内容,而无需导包 包对象 定义包对象: package object 包名{ // 代码块 } Scala 中可以为每个包定义一个同名的包对象,定义在包对象中的成员...{ArrayList=>JL} 引入util下的ArrayList类起别名为JL import java.util..../ 定义方法 [修饰符] 方法名(args: ArgsType): RetType = { } } 在Java里面,声明类需要使用public进行修饰,类名和文件名必须保持一致...成员需要Java Bean规范的getter和setter方法的话可以加@BeanProperty相当于自动创建,不需要显式写出。 给成员属性赋初始值使用_,值类型的值0,引用则是null。...Scala 中的属性和方法都是动态绑定的。 Scala中属性也可以被重写,使用override关键字。
类 图片展示了Scala的类层次结构。每一个类都继承自scala.Any,Any的子类可以划分为两个主要的范畴:值类型,继承自scala.AnyVal;引用类型,继承scala.AnyRef。...每一种Java的基本数据类型对应于值类型,通过预定义的类型别名进行映射,而AnyRef则对应于Java环境中的根类:java.lang.Object。...Nothing是所有其它类型的子类,这个类没有任何实例,但是它可以作为类型参数体现价值,比如Nil就是List[Nothing]的实例,而Scala中List是协变的,从而对于所有的类型T,Nil 都是...extends Person val lst: List[Person] = List[Student](new Student) //程序没有问题,可以说明List是协变的 关于==,equals,eq:在Scala...中,==相当于是equals的别名,用于比较值是否相等,而eq 用于比较引用是否相等: val a = List(1, 2, 3) val b: List[Int] = List(1, 2, 3)
scala 是一个强类型的语言,但是在编程时可以省略对象的类型. java中对象类型(type)与类(class)信息 jdk1.5 前 类型与类是一一映射,类一致类型就一致. 1.5 后引入了泛型,jvm...和 List 完全不相同. scala中类型 scala 没有用java自己的类型接口,使用 scala.reflect.runtime.universe.Type 接口 类获得类型或类信息...B b1: a1.B = A$B@156aba9a scala> val b2 = new a2.B b2: a2.B = A$B@3829edd5 在java 中 内部类创建的对象是相同的,但是scala...父类型 在Java泛型里表示某个类型是Test类型的父类型,使用super关键字: //或用通配符的形式: 类型 逆变 : A 是 B 的子类型, List[B] 是 List[A] 的子类型 在java中引用类型的数组类型是支持协变的, 即 String[] 类型是 Object
Java的脚本语言版 可以直接写Scala的脚本,也可以在.sh直接使用Scala。 代替Java。 scala希望提供一种简洁的语言。...Scala的语言特征 除了Java的语言特征外,Scala还提供了一下主要特征。...类型推测(typing inference) 这个特征C#也有。建议大家尽量使用这个特点。也就是说 避免定义变量的数据类型 一个好处是类型发生变化的时候,改动的代码会相对较少。...发现类型不匹配,或者正在调用一个对象不存在的函数时, Scala compiler就会去implicit function list中找一个匹配的函数。...==方法相当于Java中的equals方法。 建议使用##和==,因为Scala针对value类型实现额外的功能。
在Apache Spark 里面DF 优于RDD,但也包含了RDD的特性。RDD和DataFrame的共同特征是不可性、内存运行、弹性、分布式计算能力。它允许用户将结构强加到分布式数据集合上。...例如结构化数据文件、Hive中的表、外部数据库或现有的RDDs。DataFrame的应用程序编程接口(api)可以在各种语言中使用。示例包括Scala、Java、Python和R。...在Scala和Java中,我们都将DataFrame表示为行数据集。在Scala API中,DataFrames是Dataset[Row]的类型别名。...在Java API中,用户使用数据集来表示数据流。 3. 为什么要用 DataFrame? DataFrame优于RDD,因为它提供了内存管理和优化的执行计划。...每个阶段使用不同类型的树节点; Catalyst包括用于表达式、数据类型以及逻辑和物理运算符的节点库。 这些阶段如下所示: ? 5.
六,字符串String Scala的字符串是一种有序且不可变的基本数据类型,直接使用的Java中定义好的java.lang.String。 1,创建字符串 ? 2,字符串常用操作 ? ? ?...九,集合 集合是一种不可变的类型,并且是无顺序的,适合查找某个元素是否在集合中。 ? ? 十,映射Map 映射和Python中的字典很像,但是Scala中的Map是一种不可变类型。...Scala有3中定义类的风格,java风格,简写风格,和case类风格。 简写风格可以在类声明的参数前加上val即表示为类的属性,省去属性的绑定。...二十四,继承和特征 Scala可以通过extends关键字指定从某个超类(父类)进行继承。 只有子类的主构造器可以调用超类的主构造器。 子类可以使用super引用超类的某个属性和方法。...为了逼近这个目标,scala设计的默认数据结构绝大部分是不可变的。 并且在一个良好风格的scala程序中,只需要使用val不可变变量而无需使用var可变变量。
Type Alias type关键字 scala里的类型,除了在定义class,trait,object时会产生类型,还可以通过type关键字来声明类型。...type相当于声明一个类型别名: object TestMatrix extends App{ type IntList = List[Int] //接下来就可以这样使用它: type...,使得参数类型不再拘泥于某个已命名的类型,只要参数中包含结构中声明的方法或值即可。...举例来说,java里对所有定义了close方法的抽象了一个Closable接口,然后再用Closable类型约束参数,而scala里可以不要求参数必须继承自Closable接口只需要包含close方法;...跟结构类型类似,可以在一个方法里声明类型参数时使用复合类型: scala> trait X1; trait X2; scala> def test(x: X1 with X2) = {println(
在jdk1.7之前,Java的 switch 关键字只可以处理原生类型(int 、short 、byte 、char)和枚举类型。在jdk1.7以后,switch新增了对String类型的处理。...如果上述代码使用Java来改写的话,需要不断地使用instanceof来做判断类型。..."Scala","Kotlin","Groovy")) | println(i) Java Scala Kotlin Groovy 变量绑定,相当于给Scala设置别名index scala...") | } 9527 scala 4.3 异常处理中使用 Scala 抛出异常的语法和 Java 中的抛出异常语法是一致的。...既然是一个集合,那么可以对它使用map、foreach或者filter等方法。 总结 模式匹配是 Scala 区别于 Java 的重要特征。
5、在Scala中程序必须从object对象的main方法开始。 第七章:包和引入 1、包和Java中的包类似,只是Scala中定义包的方式更多,可以使用{},可以文件顶部标记。...3、测试某个对象属于哪个类使用isInstanceOf方法,当对象是该类或者子类的对象时返回True. 4、Scala中也有protected修饰符,与java中的一样 5、子类的辅助构造器不能调用父类的构造器只能通过子类的主构造器进行调用形式如下...3、特质中可以有具体实现的方法,java中的接口在Scala中可以当做特质来使用,也可以在new对象时继承特质:val acct=new Peolpe with Logger。...比如map的get方法在java中可能返回为null而导致出现NullPointerException异常,而Scala中返回的是一个Option[T]类型当值不存在时为None,存在时返回Some(T...3、类型别名:可以使用type关键字创建一个复杂类型的简单别名,例如: class Book{ import scala.collection.mutable._ type Index
Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。 与接口不同的是,它还可以定义属性和方法的实现。...子类继承特征可以实现未被实现的方法。所以其实 Scala Trait(特征)更像 Java 的抽象类。...$ scala Test false true true ---- 特征构造顺序 特征也可以有构造器,由字段的初始化和其他特征体中的语句构成。...这些语句在任何混入该特征的对象在构造时都会被执行。...构造器的执行顺序: 调用超类的构造器; 特征构造器在超类构造器之后、类构造器之前执行; 特征由左到右被构造; 每个特征当中,父特征先被构造; 如果多个特征共有一个父特征,父特征不会被重复构造 所有特征被构造完毕
当你第一次翻开一本scala书籍,看到类似var (1,”1”)-元组这样的写法,就基本认为scala属于动态语言,但其实Scala跟Java一样是个强类型语言。...当你看到类似不同地点的下划线、一个变量没有定义就直接使用时,就开始怀疑自己的智商 在百度上搜索“scala 难 放弃 ”等类似字眼,内容很多。...,事实上,非常有可能把scala编写成没有分号结尾的java --MARTIN ORDERSKY(scala的创造者为《scala函数式编程》中的序言部分) 语法 scala语言,从词法上就与Java语言不同...还可以在赋值语句中直接使用,并且与for关键字配合使用 隐式系统 scala语言比较特有的特征,只是简简单单的一个implicit关键字 三个基本的语义,隐式值、隐式视图、隐式类,隐式传递 隐式值与隐式视图的组合...面向对象编程-中级(包,抽象,封装,继承,抽象类,匿名子类) scala 中包存在的意义,灵活性使用跟Python一样,包对象存在的意义跟底层。面向对象的几个特征,抽象-封装-继承-多态。
领取专属 10元无门槛券
手把手带您无忧上云