用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。Nullnull 或空引用NothingNothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。...如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。...用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。...因为它只允许保护成员在定义了该成员的的类的子类(继承)中被访问。而在java中,用 protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。...add(1)(2) 实际上是依次调用两个普通函数(非柯里化函数),第一次调用使用一个参数 x,返回一个函数类型的值,第二次使用参数y调用这个函数类型的值。
问答题 语言特性类 这一部分可能会考察Scala语言特性、相关概念类的知识点,或者与其他语言的比较,考察的是对Scala语言宏观上的认知。...Scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中。...Scala中集合是不包括Array的,Array类型实际上是Java数组类型的一个包装器。Array中的第一个元素角标是0。 24 你知道迭代器吗?...抽象类是在普通类的基础上增加了abstract关键字,无法对其进行实例化,它是用来被子类继承的,抽象类中可以只定义字段和方法,具体的值和实现在其子类中实现,子类也可以进行重写。...当调用该函数或方法时,如果没有传该参数的值,Scala会尝试在变量作用域中找到一个与指定类型相匹配的使用implicit修饰的对象,即隐式值,注入到函数参数中函数体使用。
先分享Scala的官方网站:https://docs.scala-lang.org/。 大部分的学习资料都可以在这找到,语言支持切换中文,非常友好。...特质 在Scala中,类是单继承的,但是特质(trait)可以多继承。 这意味着,一个类只能继承一个父类,但可以继承多个特质。这样,从结果上看,就实现了多重继承。...由于方法 foo 接受一个隐式参数,因此编译器会尝试寻找一个隐式值来作为参数传入。在这个例子中,编译器找到了我们定义的隐式值 x 并将其作为参数传入方法 foo。...这使得我们能够编写更灵活、可复用且类型安全的代码。 内部类 在 Scala 中,内部类是一个定义在另一个类内部的类。内部类可以访问外部类的成员,并具有更紧密的关联性。...其中isDefinedAt 是一个方法,它用于检查偏应用函数是否在给定的输入值上定义。如果偏应用函数在给定的输入值上定义,那么 isDefinedAt 方法会返回 true,否则返回 false。
文章目录: 1、iterator迭代器 使用迭代器遍历集合 2、类和对象 创建类和对象 定义和访问成员变量 3、使用下划线初始化成员变量 4、定义成员方法 5、访问修饰符 6、类的构造器...示例 | 单例对象继承 12、override和super 1、iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator...类可以有自己的行为,scala中也可以通过定义成员方法来定义类的行为。...语法 class 类名(var/val 参数名:类型 = 默认值, var/val 参数名:类型 = 默认值){ // 构造代码块 } 主构造器的参数列表是直接定义在类名后面,添加了val/var...创建"张三"对象(姓名为张三,年龄为20),打印对象的姓名和年龄 4. 创建"空"对象,不给构造器传入任何的参数,打印对象的姓名和年龄 5.
先分享Scala的官方网站:https://docs.scala-lang.org/。大部分的学习资料都可以在这找到,语言支持切换中文,非常友好。...特质在Scala中,类是单继承的,但是特质(trait)可以多继承。这意味着,一个类只能继承一个父类,但可以继承多个特质。这样,从结果上看,就实现了多重继承。...由于方法 foo 接受一个隐式参数,因此编译器会尝试寻找一个隐式值来作为参数传入。在这个例子中,编译器找到了我们定义的隐式值 x 并将其作为参数传入方法 foo。...这使得我们能够编写更灵活、可复用且类型安全的代码。内部类在 Scala 中,内部类是一个定义在另一个类内部的类。内部类可以访问外部类的成员,并具有更紧密的关联性。...其中isDefinedAt 是一个方法,它用于检查偏应用函数是否在给定的输入值上定义。如果偏应用函数在给定的输入值上定义,那么 isDefinedAt 方法会返回 true,否则返回 false。
具体来说,一个类和它的伴生对象必须在同一个源文件中定义,并且它们的名称必须相同。 伴生类和伴生对象之间可以互相访问对方的私有成员。...也就是说,伴生对象可以访问伴生类的私有成员,伴生类也可以访问伴生对象的私有成员。 ...在Java中,null是一个关键字,不是⼀个对象,当开发者希望返回一个空对象时,却返回了了⼀个关键字,为了解决这个问题,Scala建议开发者返回值是空值时,使⽤Option类型,在Scala中null是...Option有两个子类型,Some和None(空值) 19、yield如何工作? ...yield⽤于循环迭代中生成新值,yield是comprehensions的一部分,是多个操作(foreach, map, flatMap, filter or withFilter)的composition
以及一个成员方法 eat() //需要注意的是:scala中变量(var)声明时需要指定初始值, private var name = “” private var age = 0 def...而直接写在类的体中的既不是类的成员变量也不是成员函数的部分,会自动收集为构造函数的体。 scala声明主构造的形式是在类右侧声明,如果不声明,Scala也提供了默认构造器。...以及一个成员方法 eat() //需要注意的是:scala中变量(var)声明时需要指定初始值, private var name = v1 private var age = v2 /...4)但是如已经使用了extends显示的继承了父类,再向混入特质就要用with关键字了。 一个类的声明中只能有一个extends,但是可以有多个with。 ...val arr = Array[String](); 上一篇:Scala中的集合类型
元组 在scala 中元组可以容纳不同类型元素的类,元组是不可变的,用于函数返回多个值....同时不同长度的tuple,类似Tuple2,Tuple3 并没有继承一个公共的抽象父类. 但是Tuple继承了Product特质,在Product提供了一个productIterator的迭代器....Scala的类 immutable.TreeSet 使用红黑树实现,它在维护元素顺序的同时,也会保证二叉树的平衡,即叶节点的深度差最多为1 先创建排序规则 val myOrdering = Ordering.fromLessThan...位集合的另一个优点是它的 contains 方法(成员测试)、+= 运算(添加元素)、-= 运算(删除元素)都非常的高效。...最终,它返回ListBuffer类里的start成员,这个start是一个 :: 类型(List的子类)
中,trait可以继承class类,特质会将class中的成员都继承下来 //class 类A{ //成员变量 //成员方法 //} //trait B extends A{...一般用于保存数据(类似java中的pojo类) case class 样例类名([val/var] 成员变量名1:类型1,成员变量名2:类型2,成员变量名3:类型3) 如果不写,则变量的默认修饰符是val...如:val arr2 = arr.sorted 元组 元组一般用来存储多个不同类型的值。例如同时存储姓名,年龄,性别,出生年月这些数据, 就要用到元组来存储 了。并且元组的长度和元素都是不可变的。..._编号 的形式来访问元组中的元素,_1表示访问第一个元素,依次类推. 也可以通过 元组名 .productIterator 的方式, 来获取该元组的迭代器, 从而实现遍历元组....打印结果 println(list2) } } 同时由于set和map和java中的类似,这里就不展示出来了,同时有一点差别在于函数式编程api上,不需要写stream进行操作,而是直接调用函数式方式
day1/demo9.scalc】,文件类型【object】 Scala Iterator(迭代器) Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。...: " + a.size ) println("b.length 的值: " + b.length ) } } Scala Iterator 常用方法 下表列出了 Scala Iterator...注意:如果找到满足条件的元素,迭代器会被置于该元素之后;如果没有找到,会被置于终点。...20 def foreach(f: (A) => Unit): Unit 在迭代器返回的每个元素上执行指定的程序 f 21 def hasDefiniteSize: Boolean 如果迭代器的元素个数有限则返回...24 def isEmpty: Boolean 检查it是否为空, 为空返回 true,否则返回false(与hasNext相反)。
但它为我们带来了最好的JVM生态系统,并引导了许多优秀语言的诞生,如Groovy、Scala、Clojure、Kotlin等。 ? ▌欢迎年纪最小的Kotlin!...Kotlin提供了最好的支持,从而在编译时避免空引用。默认情况下,所有对象都不能为空,如果想定义可空的类型,就必须使用 ? 操作符。访问可空的对象时,编译器会强行要求使用安全调用操作符 ?.。...它还支持Map的解构,以方便迭代。 创建Singleton不再复杂 Kotlin的object声明只需一行代码就能创建Singleton。...与Scala不同,Kotlin没有自己的集合库,它只是扩展了JDK的集合。因此在Java和Kotlin的集合类型之间转换无需使用胶水代码。...如果是Java开发者,那么还应该考虑下其他因素,如团队成员、公司的接受程度等。但即使不能立即使用,也应该看看Kotlin这个现代语言的美。
这篇文章将介绍类的基础知识 定义 Scala 中以 class 来作为类的声明,在类中可以定义成员和方法,成员和方法可以有不同的可见性(这个会在后文详述)。...如果在主构造函数的参数前加 var 或 val,该参数就成为实例的一个成员,这部分知识在Scala case class那些你不知道的知识有更详细的介绍 重载 Scala 类方法允许重载,如类 Company...类型成员 Scala 允许你在类内部定义类型成员,在构造类实例的时候指定该类型成员对应的具体类型。...类型成员可用于类内部的成员或函数,提供了更好的泛华能力,从下面这个简单的例子可以看出: scala> class T { | type X | | def getClassName...> type L = List[Int] defined type alias L 方法与成员同名 与 JAVA 不同,如果方法参数列表不为空,该方法可以与成员同名,如: scala> class T
在Scala中,单例对象分为两种,一种是并未自动关联到特定类上的单例对象,称为独立对象 (Standalone Object);另一种是关联到一个类上的单例对象,该单例对象与该类共有相同名字,则这种单例对象称为伴生对象...Java中的类,可以既有静态成员,又有实例成员。...而在Scala中没有静态成员(静态字段和静态方法),因为静态成员从严格意义而言是破坏面向对象纯洁性的,因此,Scala借助伴生对象来完整支持类一级的属 性和操作。...输出如下: JavaScript很棒~ Scala很棒~ Golang很棒~ map()函数在List上迭代,对List中的每个元素,都会调用以参数形式传入的Lambda表达式(或者叫匿名函数)。...i 然后,在CalcActor的receive中,通过模式匹配,对接收值进行处理,直到接收值处理完成。在运行结果就会发现每次输出的顺序都是不一样的,因为我们的程序是并发计算。
如:引用空指针。 ...例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。...另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。 与只支持单继承的语言相比,Scala具有更广泛意义上的类重用。...Scala允许定义新类的时候重用"一个类中新增的成员定义(即相较于其父类的差异之处)"。Scala称之为mixin类组合。 ...它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。
引用数据类型本质上都是Class,相对抽象,引用类型相同值的对象占用不同的存储单元,判断是否相等应该用 equals方法。...并且这个main函数需要声明为 public static void 类型,即静态的,公开的,返回值为空的函数类型。 并且这个java程序的文件名必须和这个public类名保持一致。 ?...十二,迭代器 Java的容器类都可以使用for each循环,List、Set和Queue会迭代每个元素,Map会迭代每个key。 下面以List和Set的for each遍历为例。 ?...Iterator是一种抽象的数据访问模型。使用Iterator模式进行迭代的好处有: 对任何容器都采用同一种访问模型; 调用者对容器内部结构一无所知; 容器类返回的Iterator对象知道如何迭代。...Scala在Java基础上做了重大的改进,使其兼备静态语言和脚本语言的特色。 下面列举一些比较显著的差异。
,没有成员变量,可以省略{ } 2.如果构造器的参数为空,可以省略( ) 因此上面可以简写为: object OopDemo{ //创建类,没有成员变量,根据条件1省略{ } class...,此时必须提供数据类型,这样就可以进行自动推断赋初始值 object OopDemo{ //创建Monkey类,带成员变量 class Monkey{ var name:String...(var/val 参数名:类型 = 默认值, var/val 参数名: 类型 = 默认值){ //构造代码块 } 如:设置构造器 object OopDemo{ //创建monkey类,...,这个object称为伴生对象,这个class称为伴生类 注意: 伴生对象必须要和伴生类一样的名字 伴生对象和伴生类在同一个scala源文件中 伴生对象和伴生类可以相互访问private属性 object...Scala代码中可以在子类中使用override来重写父类的成员,也可以使用super来引用父类的成员.可以使用override来重新一个val字段。
: " + ita.size ) println("itb.length 的值: " + itb.length ) } } 执行以上代码,输出结果为: $ scalac Test.scala...$ scala Test ita.size 的值: 6 itb.length 的值: 6 ---- Scala Iterator 常用方法 下表列出了 Scala Iterator 常用的方法: 序号...注意:如果找到满足条件的元素,迭代器会被置于该元素之后;如果没有找到,会被置于终点。...20 def foreach(f: (A) => Unit): Unit在迭代器返回的每个元素上执行指定的程序 f 21 def hasDefiniteSize: Boolean如果迭代器的元素个数有限则返回...24 def isEmpty: Boolean检查it是否为空, 为空返回 true,否则返回false(与hasNext相反)。
编译时空值安全 ? Null-safe类型是Kotlin的杀手级特征。这个想法很好。在Kotlin,类型是默认的非空值。如果您需要一个可空类型,您需要添加?符号,例如: ?...意味着具有未定义空值的T类型。这种奇怪的类型不能用Kotlin来表示,它只能从Java类型推断出来。T!会误导你,因为它放松了对空的限制,并禁用了Kotlin的空值安全限制。...似乎Java互操作性破坏了Kotlin的杀手特性——类型推断。看起来您应该显式地声明类型(如T?),以满足由Java方法填充的所有Kotlin变量。 ? 类字面量 ?...“嗯……是的,但是它不是静态成员!它只是一个对象。可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白吗?这很简单。”...陡峭的学习曲线 ? 如果你认为你可以快速学习Kotlin,因为你已经知道Java了 - 那么你错了。Kotlin会让你深陷其中。事实上,Kotlin的语法更接近Scala。这是赌上全部。
领取专属 10元无门槛券
手把手带您无忧上云