方法参数是基本类型时,传递的是值。 ...方法参数是引用类型时,传递的是内存地址值 当参数是基本类型时,在调用方法时将值传递到方法中,运行方法,运行结束方法退出,对原本main中定义的变量没有任何操作(方法中没有return)。...当参数是引用类型时,比如:定义数组时,在堆内存中存储了数组的数据,返回这组数据的地址给了数组名,然后在调用方法时,传递的也是这个地址。...在方法中,同样也是根据这个地址找到数组的信息,然后改变了这个数据的,所以之后main方法输出时,输出的是改变了之后的数组。即:此时跟栈和堆有关系,栈可以弹栈,堆内存不能弹出。...也就是说 ,当形式参数是基本类型时,方法传的只是值,实际上main 里的实际参数和外部方法里的形式参数是不同的两个东西,如果方法不返回值,change里不管怎么改变,与main无关。
特质中未被实现的⽅方法默认就是抽象的⼦子类的实现或继承统一使⽤用的事extends关键字,如果需要实现或继承多个使⽤用with关键字特质中可以有构造器特质可以继承普通的类,并且这个类称为所有继承trait...(1)一个类只能集成一个抽象类,但是可以通过with关键字继承多个特质; (2)抽象类有带参数的构造函数,特质不行(如 trait t(i:Int){} ,这种声明是错误的) 12、object和class...(1) call-by-value是在调⽤用函数之前计算; (2) call-by-name是在需要时计算 18、Option类型的定义和使⽤用场景? ...在Java中,null是一个关键字,不是⼀个对象,当开发者希望返回一个空对象时,却返回了了⼀个关键字,为了解决这个问题,Scala建议开发者返回值是空值时,使⽤Option类型,在Scala中null是...有一些 必须进⾏分配的情况 and 限制,但是基本的思想是:在编译时,通过使⽤用原始类型替换值类实例例,删除对象分配。 24、Option ,Try 和 Either 三者的区别?
泛类型 和java一样,Scala也有泛型的概念,在scala里面泛型是使用方括号 [] 来接受类型参数的。通常使用字母A来作为参数标志符,当然你也可以使用其他任意的参数名称。...型变主要有协变,逆变和不变三种情况。在类型系统中使用型变允许我们在复杂类型之间建立直观的连接,而缺乏型变则会限制类抽象的重用性。...类型下界 类型下界和类型上界相反,B >: A 表示类型参数 B 或抽象类型 B 是类型 A 的超类型。...因为方法 prepend 中的参数 elem 是协变的 B 类型。 在scala中函数的参数类型是逆变的,而返回类型是协变的。...内部类 内部类就是class里面的class,在java里面,内部类被看成是外部类的成员。但是在scala中内部类是和外部类的对象进行绑定的。
类和对象 scala是支持面向对象的,也有类和对象的概念。我们依然可以基于scala语言来开发面向对象的应用程序。...NOTE] 主构造器的参数列表是直接定义在类名后面,添加了val/var表示直接通过主构造器定义成员变量 构造器参数列表可以指定默认值 创建实例,调用构造器可以指定字段进行初始化 整个class中除了字段定义和方法定义的代码都是构造代码...抽象类 和Java语言一样,scala中也可以定义抽象类 12.1 定义 如果类的某个成员在当前类中的定义是不包含完整的,它就是一个抽象类 不完整定义有两种情况: 方法没有方法体(抽象方法) 变量没有初始化...定义抽象方法 def 方法名(参数:参数类型,参数:参数类型...)...如果一个成员变量是没有初始化,我们就认为它是抽象的。
资料获取:kdocs.cn/l/coFeTd0J6teu语法基础1、面向对象特性封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。...数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。...为什么在重写 equals 方法的时候需要重写 hashCode 方法?...有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什么在 hashmap 中会有冲突。...一个子类只能继承一个抽象类, 但能实现多个接口抽象类可以有构造方法, 接口没有构造方法抽象类可以有普通成员变量, 接口没有普通成员变量抽象类和接口都可有静态成员变量, 抽象类中静态成员变量访问类型任意,
在java中main方法是静态的,而在scala中没有静态方法,所以在scala中,main方法必须放在一个单例对象中。...,写在object的构造方法体内 object 单例对象名 extends App{ //方法体 } 在kafka中,我们可以看到程序的主入口是kafka.scala //主入口 def main...具有相同的名字,这个object称为伴生对象,这个class称为伴生类 注意: 伴生对象必须要和伴生类一样的名字 伴生对象和伴生类在同一个scala源文件中 伴生对象和伴生类可以相互访问private属性...Scala代码中可以在子类中使用override来重写父类的成员,也可以使用super来引用父类的成员.可以使用override来重新一个val字段。...val/var 抽象字段名:类型 //定义抽象方法 def 方法名(参数:参数类型,参数: 参数类型...)
5)Scala中的类的成员默认的访问权限是public。也可以加private或protected。 6)当成员变量或成员方法是私有属性时,外部将不能直接访问,这个同java一样。...而直接写在类的体中的既不是类的成员变量也不是成员函数的部分,会自动收集为构造函数的体。 scala声明主构造的形式是在类右侧声明,如果不声明,Scala也提供了默认构造器。...2)和java中的接口不同的是,scala中的特质可以包含具有方法体的方法。 ...{Apple,Orange} 二、面向对象 1、重写和重载 1)重写是指覆盖父类中的方法来在子类中做其他事项。 ...格式: override def 父类方法名 参数列表 返回值 方法体 2)重载是指在同一个类中提供方法名相同但是参数不同的方法和java中基本一致。 示例: ?
Scala是面向对象的 鉴于一切值都是对象,可以说Scala是一门纯面向对象的语言。对象的类型和行为是由类和特质来描述的。...这些特性使得Scala成为开发web服务等程序的理想选择。 Scala是静态类型的 Scala配备了一个拥有强大表达能力的类型系统,它可以静态地强制以安全、一致的方式使用抽象。...典型来说,这个类型系统支持: 泛型类 型变注解 上、下 类型边界 作为对象成员的内部类和抽象类型 复合类型 显式类型的自我引用 隐式参数和隐式转化 多态方法 类型推断让用户不需要标明额外的类型信息。...这些特性结合起来为安全可重用的编程抽象以及类型安全的扩展提供了强大的基础。 Scala是可扩展的 在实践中,特定领域应用的发展往往需要特定领域的语言扩展。...Java的最新特性如函数接口(SAMs)、lambda表达式、注解及泛型类 在Scala中都有类似的实现。 另外有些Java中并没有的特性,如缺省参数值和带名字的参数等,也是尽可能地向Java靠拢。
扩展类 在Scala中扩展类的方式和Java一样都是使用extends关键字 可以把类声明为final,使之不能扩张 也可以把单个方法或者字段声明为final,以确保它不能被重写,注意和Java的不同,...重写方法 在Scala中重写一个非抽象的方法必须使用override修饰符 在子类中调用超类的方法,使用super,和Java一致。...5.3.3.protected修饰的字段和方法 被protected修饰的字段或者方法,可以被其子类访问; 与Java不同的是,protected修饰的成员对于类所属的包是不可见的; protected...类型检查和转换 Scala Java 测试某个对象是否属于给定的类 obj.isInstanceOf[C] obj instanceof C 强制类型转换 obj.asInstanceOf[C] (C...def byScala(): String={ "coding by Scala" } //在子类中重写超类的抽象方法时,不需要使用override关键字,写了也可以 def run()
在多核时代,现代并发语言不断涌现出来,例如Erlang、Go、Rust,Scala当然也位列其中。Scala的并发特性,堪称Scala最吸引开发者的招牌式特性!Scala是静态类型的。...是的,在Scala里,你可以放心大胆地使用vals="ABC",而Scala里强大的类型推断和模式匹配,绝对会让你爱不释手。...而在Scala中没有静态成员(静态字段和静态方法),因为静态成员从严格意义而言是破坏面向对象纯洁性的,因此,Scala借助伴生对象来完整支持类一级的属 性和操作。...输入参数中传入一个函数值calc,其类型是函数,接收Float输入,输出也是Float。在实现里,我们会调用calc函数。...要知道,在函数式编程里,函数是一等的,当然函数也可以作为参数和返回被传递。这对初次接触函数式编程的开发者而言确实比较抽象。
对象的数据类型以及行为由类和特质描述。类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。...类型系统具体支持以下特性:泛型类协变和逆变标注类型参数的上下限约束把类别和抽象类型作为对象成员复合类型引用自己时显式指定类型视图多态方法扩展性Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展..._,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。如果想要引入包中的几个成员,可以使用selector(选取器):import java.awt....在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。...Scala 方法声明格式如下:def functionName ([参数列表]) : [return type]如果你不写等于号和方法主体,那么方法会被隐式声明为抽象(abstract),包含它的类型于是也是一个抽象类型
仅仅针对一个对象,所以无并发问题 16.抽象类和接口的区别 16.1 抽象类 ★为什么要有抽象类?...符合接口分离原则 降低程序之间的耦合。 将若干功能拆分,使类和接口之间按照规范进行实现和依赖。...在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 帮助子类做初始化工作 18. 一个类的构造方法的作用是什么?若一个类没有声明构造方法,该程序可以正确的执行吗?...多态实现的机制 Java中存在两种多态机制 编译时多态 主要是方法的重载 运行时多态 动态绑定,在执行期间判断引用对象的实际类型,根据类型调用不同的属性或者方法 ★JVM在运行时默认是绑定在父类的引用上的...,只有在遇到非静态方法的时候才会动态绑定到子类的引用上,当执行完子类的非静态方法以后又回到父类的引用上,知道下次遇到非静态方法 ” 21.
为什么是Scala 虽然在大数据领域Java的使用更普及,Python也有后来居上的势头,但Scala一直有着不可动摇的地位。...2、静态类型 在Scala语言中,静态类型(static typing)是构建健壮应用系统的一个工具。...强类型语言与弱类型语言 强类型语言:使之强制数据类型定义的语言。没有强制类型转化前,不允许两种不同类型的变量相互操作。...trait能通过使用混合结构(maxin composition)简洁的实现新的类型。在Scala中,一切都是对象,即使是数值类型。...以下四种语言机制有助于提升系统的扩展性: 使用trait实现的混合结构 抽象类型成员和泛型 嵌套类 显式自类型(self type) Scala与Java有着紧密的关系,可以把Scala看做是Java的升级版
这对对象的只读操作是很有用的。 隐函数允许类型自动转换。更确切地说,在隐式函数可以帮助满足类型推断时,它们允许按需的函数应用。...方法可以通过隐含参数执行更复杂的类型限制。...在没有设定陌生的对象为 Numeric 的时候,方法可能会要求某种特定类型的“证据”。...这时可以使用以下类型-关系运算符: A =:= B A 必须和 B 相等 A 是 B 的子类 A 是 B scala> class Container...def get = 10 }) res0: Int = 133 4.抽象类型成员 在特质中,你可以让类型成员保持抽象。
---- 继承(extends) 简单继承 scala和Java一样,使用extends关键字来实现继承。可以在子类中定义父类中没有的字段和方法,或者重写父类的方法。...在Java中,我们可以使用instanceof关键字、以及(类型)object来实现,在scala中如何实现呢? scala中对象提供isInstanceOf和asInstanceOf方法。...访问修饰符 Java中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。...方法,在方法中访问name字段 添加一个sayHelloTo2方法,接收一个Person类型参数,在方法中打印该参数的name字段 class Person { // 只有在当前对象以及继承该类的当前对象中能够访问...如果类的某个成员在当前类中的定义是不包含完整的,它就是一个抽象类 不完整定义有两种情况: 方法没有方法体 变量没有初始化 没有方法体的方法称为抽象方法,没有初始化的变量称为抽象字段。
teaching Math 1.3抽象类型 Scala 中的类型成员也可以是抽象的。...比如,在Trait中,你可以让类型成员保持抽象。...类中的apply() 在 Scala 的类中,apply() 可以看作是一个语法糖,它分为两种方式:object和class中的用法。 2.1 常见的 apply() 用法 借用一个经典的例子。...类中的update() update() 也可以看作是 Scala 的语法糖。 使用 update() 时,等号右边的值会作为 update 方法的最后一个参数。...总结 本篇笔记仍然是整理类相关的内容,主要是抽象类、类中的apply()和update()。apply()和update()都是语法糖,加以合适的应用,能得到可读性极强的代码。
为什么要考察Scala?...当函数的参数个数有多个,或者不固定的时候,可以使用vararg参数,具体的使用方式是在参数类型后面加一个“*”,相应的参数在函数体中就是一个集合,根据需要对参数进行解析。...伴生类和伴生对象要处在同一个源文件中,伴生对象和伴生类可以互相访问其私有成员,不与伴生类同名的对象称之为孤立对象。 29 类的参数加和不加关键字(val和var)有区别吗?...在Scala工程中抽象类和特质是很有用的工具,这个问题需要先回答什么是抽象类以及什么是特质。...抽象类是在普通类的基础上增加了abstract关键字,无法对其进行实例化,它是用来被子类继承的,抽象类中可以只定义字段和方法,具体的值和实现在其子类中实现,子类也可以进行重写。
面向对象特性 Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。 类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。...静态类型 Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。...类型系统具体支持以下特性: 泛型类 协变和逆变 标注 类型参数的上下限约束 把类别和抽象类型作为对象成员 复合类型 引用自己时显式指定类型 视图 多态方法 扩展性 Scala的设计秉承一项事实...并发性 Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。...在2.10之后的版本中,使用Akka作为其默认Actor实现。 http://www.runoob.com/scala/scala-intro.html
Unified Types 在Scala中,是没有java里面那些基础类型的,所有的Scala类型我们都可以称之为type,下面是一个类型层次结构的子集: ?...Null是所有引用类型的子类型,Null主要是用来跟JVM交互使用的,通常不需要在Scala中使用到它。...的参数是公有的。...Setter语法 Scala的成员默认是public的。...定义Traits 最简化的特质就是关键字trait+标识符: trait HelloWorld 特征作为泛型类型和抽象方法非常有用。
领取专属 10元无门槛券
手把手带您无忧上云