1 class Person (val name:String, val age:Int){ 2 var myName = name; 3 var myAge = age; 4 5 def say():Unit={ 6 println("i am "+myName+" and my age is "+myAge); 7 } 8 } 9 10 11 object Person{ 12 def apply(name :String , age :Int) : Person = new Person(name,age); 13 14 def unapply(p:Person): Option[(String,Int)] = Some(p.myName,p.myAge) 15 } 16 17 // 测试new出来的 对象是 var还是val ,如果是val,能否修改val指向的对象,或者修改val指向的对象的值 18 object test{ 19 20 def main(args:Array[String]){ 21 // 1. new 的 对象能否是 var . 結果, 可以用var來修饰 创建的对象 22 var people= new Person("good",20); 23 people.say(); 24 // 如果属性字段用private修饰了,则不能进行改变,否则可以进行操作 25 // people.myName="hello"; 26 27 // 2. 用val来表示new的对象 28 val p2 = new Person("thank",20); 29 p2.myAge=40; 30 31 // 不能对val修饰的常量重新赋值 32 // p2=people; 33 p2.say(); 34 35 // 用伴生对象的apply来创建实例 36 val p3=Person("big",30); 37 p3.say(); 38 39 // 3.模式匹配配合unapply获取对象的参数 40 p3 match { 41 // s是模板字符串的,字符串前面加上s,才能在字符串里使用$ 去引用变量; 42 case Person(name,age) => println(s"name:$name , age:$age "); 43 case _ => println("无法解析"); 44 } 45 46 } 47 }
运行结果:
warning: 1 deprecation (since 2.13.0); re-run with -deprecation for details i am good and my age is 20 i am thank and my age is 40 i am big and my age is 30 name:big , age:30 [Finished in 2.7s]
注意: scala是运行在JVM上的语言,所以需要本地先安装java,再安装scala才能运行。