前言:
目前看官们对“scala和java一样都有静态方法和静态字段”大致比较关注,咱们都想要知道一些“scala和java一样都有静态方法和静态字段”的相关知识。那么小编在网络上网罗了一些关于“scala和java一样都有静态方法和静态字段””的相关内容,希望朋友们能喜欢,同学们快快来学习一下吧!如同java中,如果要运行一个程序,必须编写一个包含main方法类一样;在scala中,如果要运 行一个应用程序,必须有一个main方法,作为入口;
scala中的main方法定义为def main(args: Array[String]),而且必须定义在object中。
如果要运行上述代码,需要将其放入.scala文件,然后先使用scalac编译,再用scala执行
面向对象:
object
对象,为了解决scala中class中不能存在static关键字的问题:直白讲,object对象在jvm中只存在一份,object中所有属性和方法都是静态的,类似java中的static修饰
写一个简单的类
调用
在Java和Scala中,管理项目可以使用包结构,C和C#使用命名空间。
对于package
可以创建下面的形式
等同于下面的形式
还可以写成下面的形式
在test和test.pkg和test.pkg.wzy包下面分别建类
Test包下面
test.pkg包下面
test.pkg.wzy下面
在test.pkg.wzy.pkgtest新建一个允许Object
这种形式里test.pkg的成员在这里不可见,pkgtest包在test.pkg.wzy中,只能对wzy包有访问权限,不能访问上一层,包是没有继承关系的,但是位于文件顶部不带花括号的包声明在整个文件范围内有效
作用域:可以放到属性、方法、class、object、trait上,定义的时候,放在对应的关键字之前即可
public:默认,不需要写出来
protected:和Java一样,但Scala不推荐使用
private:和java功能一模一样,class是私有访问,只能在当前的class中进行访问
private[this/class名称/包名称] : 在private的基础上做了一个限制,
this:表示只有当前对象可用
class的构造函数:主构造函数、辅助构造函数
主构造函数
1.默认有一个无参数的主构造函数
2.主构造函数位于class名称后的一个定义(就是函数的参数输入列表)+ 函数体内可执行的所有代码
调用
主构造函数可以加参数,主构造函数中定义的输入参数,最终是作为class的属性存在,并且修饰符为public val;可以将其修改为其他修饰符
参数可以给定默认值
辅助构造函数(可以写多个辅助构造函数)
1.以this为函数名称的函数就叫做辅助构造函数
2.辅助构造函数不能有返回值
3.辅助构造函数的第一行必须调用主构造函数或者定义在他之前的辅助构造函数
注意:主构造函数和辅助构造函数的参数不能一样
对象构建初始化的过程:基本和java一样
var p : Person = new Person("小倩",20)
1) 加载类的信息(属性信息,方法信息)
2) 在内存中(堆)开辟空间
3) 使用父类的构造器(主和辅助)进行初始
4) 使用主构造器对属性进行初始化 [age:90, name null]
5) 使用辅助构造器对属性进行初始化 [age:20, name小倩]
6) 将开辟的对象的地址赋给 p 这个引用
伴生对象和伴生类
定义:如果在一个Scala文件中,分别存在一个class和一个object,而且class和object的名称完全一样,那么这个class为object的伴生类,object为class的伴生对象
作用:伴生类和伴生对象之间可以互相访问私有属性或者方法
运行下
apply方法
定义在object中表示提供一种快捷的对象创建方式,创建的对象就是apply方法返回的数据类型
创建对象的调用方式就是object名称+apply函数的参数列表
返回对象
运行下
Class和Object都有一个apply看调用是调用Object
调用
定义在class中,表示提供一种快捷的数据获取方式,类似list集合数据获取方式 eg:list(0)
比如这个
获取的方式
update方法
只能定义在class中,表示提供一种便捷的数据更新/插入的方法,类似数组的更新eg:arr(0) = 100 ,
update函数中参数至少两个,参数列表的最后一个参数在调用的时候写在等号后面,其他写在等号前面
创建类
调用结果