Scala基础
- 数据类型
- 变量和常量的声明
- 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10
- 常量不可再赋值
/** * 定义变量和常量 * 变量 :用 var 定义 ,可修改 * 常量 :用 val 定义,不可修改 */ var name = "zhangsan" println(name) name ="lisi" println(name) val gender = "m" // gender = "m"//错误,不能给常量再赋值
|
- 类和对象
- 创建类
//没有输入参数 class Person{ val name = "zhangsan“ val age = 18 def sayName() = { "my name is "+ name } } |
//有输入参数 class Person(name:String,age:Int){ val name = "zhangsan“ val age = 18 def sayName() = { "my name is "+ name } } |
//如果在参数前面加了val,这个xname在new person().xname的时候是可显示的。 //如果不加是显示的,相当于是私有的变量,一般使用的时候是不加的。 class Person(val xname:String,age:Int){ val name = "zhangsan“ val age = 18 def sayName() = { "my name is "+ name } } |
//如果在main方法里面传入了多个参数,例如:new person(‘zhangsan’,1,'C'),这个时候是报错的,需要我们写默认的构造 class Person(val xname:String,age:Int){ val name = "zhangsan“ val age = 18 var gender='M' def sayName() = { "my name is "+ name } def this(yname:String,yage:Int,ygender:Char){ this.gender = ygender } |
//Scala中当new class 时,类中除了方法不执行【除了构造方法】,其他都执行。 //所以打印的数据会有 class Person(val xname:String,age:Int){ val name = "zhangsan“ val age = 18 var gender='M' println("====") def sayName() = { "my name is "+ name } def this(yname:String,yage:Int,ygender:Char){ this.gender = ygender } |
//加了private之后就变成私有变量了 class Person{ private val name = "zhangsan“ val age = 18 def sayName() = { "my name is "+ name } } |
//在同一个scala文件中,class名称和Object名称一样时,这个类叫做个对象的伴生类,这个对象叫做这个类的伴生对象,他们之间可以互相访问私有变量. object 不可以传参数,如果想传参,那就写apply方法,才可以执行。 class Person{ private val name = "zhangsan“ val age = 18 def sayName() = { "my name is "+ name } } object Person{ def apply (i:Int):Unit ={ println(i)
} def main(args:Array[String]):Unit ={ Person(1) } } } |
class Person(xname :String , xage :Int){ var name = Person.name val age = xage var gender = "m" def this(name:String,age:Int,g:String){ this(name,age) gender = g }
def sayName() = { "my name is "+ name }
}
object Person { val name = "zhangsanfeng"
def main(args: Array[String]): Unit = { val person = new Person("wagnwu",10,"f") println(person.age); println(person.sayName()) println(person.gender) } } |
- 创建对象
object Lesson_Class { def main(args: Array[String]): Unit = { val person = new Person() println(person.age); println(person.sayName()) } } |
注意点:
- 建议类名首字母大写 ,方法首字母小写,类和方法命名建议符合驼峰命名法。
- scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。object不可以传参数。另:Trait不可以传参数
- scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。
重写构造函数的时候,必须要调用默认的构造函数。
4、class 类属性自带getter ,setter方法。
5、使用object时,不用new,使用class时要new ,并且new的时候,class中除了方法不执行,其他都执行。
6、如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。