当前位置: 首页 > news >正文

广元网站建设公司logo生成器免费

广元网站建设,公司logo生成器免费,微网站建设多少钱,江苏纯手工seo1 Scala 包 1.1 包风格 Scala 有两种包的管理风格。 第一种 Java 的包管理风格相同#xff0c;每个源文件一个包#xff08;包 名和源文件所在路径不要求必须一致#xff09;#xff0c;包名用“.”进行分隔以表示包的层级关系#xff0c;如 com.atguigu.scala。另一种风…1 Scala 包 1.1 包风格 Scala 有两种包的管理风格。 第一种 Java 的包管理风格相同每个源文件一个包包 名和源文件所在路径不要求必须一致包名用“.”进行分隔以表示包的层级关系如 com.atguigu.scala。另一种风格通过嵌套的风格表示层级关系一个源文件中可以声明多个 package子包中的类可以直接访问父包中的内容而无需导包 package com {package scala {package chapter06 {object TestPackage {def main(args: Array[String]): Unit {println(package test!)}}}} }package com {import com.scala.chapter06.other.Inner.in //父包访问子包需要导包package scala {package chapter06 {object TestPackage {val out: String outdef main(args: Array[String]): Unit {println(package test!)println(in)}}package other {object Inner {val in: String indef main(args: Array[String]): Unit {println(TestPackage.out) //子包访问父包无需导包}}}}}}1.2 包对象 在 Scala 中可以为每个包定义一个同名的包对象定义在包对象中的成员作为其对 应包下所有 class 和 object 的共享变量可以被直接访问。若使用 Java 的包管理风格则包对象一般定义在其对应包下的 package.scala 文件中包对象名与包名保持一致。 package com.scalapackage object chapter06 {}如采用嵌套方式管理包则包对象可与包定义在同一文件中但是要保证包对象 与包声明在同一作用域中。 package com {package scala {package chapter06 {object TestPackage {val out: String outdef main(args: Array[String]): Unit {println(package test!)println(in)}}}} } package object com {val shareValue sharedef shareMethod() {} }1.3 导包 和 Java 一样可以在顶部使用 import 导入在这个文件中的所有类都可以使用。局部导入什么时候使用什么时候导入。在其作用范围内都可以使用通配符导入import java.util._给类起名import java.util.{ArrayListJL}导入相同包的多个类import java.util.{HashSet, ArrayList}屏蔽类import java.util.{ArrayList ,}导入包的绝对路径new root.java.util.HashMapScala 中的三个默认导入的包 import java.lang._ import scala._ import scala.Predef._ 1.4包访问权限 Scala 中属性和方法的默认访问权限为 public但 Scala 中无 public 关键字。private 为私有权限只在类的内部和伴生对象中可用。protected 为受保护权限Scala 中受保护权限比 Java 中更严格同类、子类可以访问同包无法访问。private[包名]增加包访问权限包名下的其他类也可以使用 package com.scala package chapter06class Person {private var name: String boboprotected var age: Int 18private[chapter06] var sex: String 男def say(): Unit {println(name)} }object Person {def main(args: Array[String]): Unit {val person new Personperson.say()println(person.name)println(person.age)} }class Teacher extends Person {def test(): Unit {this.agethis.sex} }class Animal {def test: Unit {new Person().sex} }2 类和对象 2.1 类 语法 [修饰符] class 类名 {类体 } Scala 语法中类并不声明为 public所有这些类都具有公有可见性即默认就是public一个 Scala 源文件可以包含多个类 2.1 属性 语法 [修饰符] var|val 属性名称 [类型] 属性值 var name: String boboBean 属性BeanPropetry可以自动生成规范的 setXxx/getXxx 方法 package com.scala package chapter06 import scala.beans.BeanProperty class Person {//Bean 属性BeanPropertyBeanProperty var sex: String 男 } object Person {def main(args: Array[String]): Unit {var person new Person()person.setSex(女)println(person.getSex)} }_表示给属性一个默认值 package com.scala package chapter06 import scala.beans.BeanProperty class Person {var age: Int _ // _表示给属性一个默认值 }object Person {def main(args: Array[String]): Unit {var person new Person()println(person.age)} }val 修饰的属性不能赋默认值必须显示指定 //val school: Int _ // _表示给属性一个默认值2.3 方法 def 方法名(参数列表) [返回值类型] {方法体 }2.4 创建对象 语法 val | var 对象名 [类型] new 类型()val 修饰对象不能改变对象的引用即内存地址可以改变对象属性的值。var 修饰对象可以修改对象的引用和修改对象的属性值自动推导变量类型不能多态所以多态需要显示声明案例 class Person {var name: String canglaoshi } object Person {def main(args: Array[String]): Unit {//val 修饰对象不能改变对象的引用即内存地址可以改变对象属 性的值。val person new Person()person.name bobo// person new Person()// 错误的println(person.name)} }2.5 构造器 Scala 类的构造器包括主构造器和辅助构造器语法 class 类名(形参列表) { // 主构造器// 类体def this(形参列表) { // 辅助构造器}def this(形参列表) { //辅助构造器可以有多个...} }辅助构造器函数的名称 this可以有多个编译器通过参数的个数及类型来区分。辅助构造方法不能直接构建对象必须直接或者间接调用主构造方法。构造器调用其他另外的构造器要求被调用构造器必须提前声明。如果主构造器无参数小括号可省略构建对象时调用的构造方法的小括号也可 以省略。案例 class Person {var name: String _var age: Int _def this(age: Int) {this()this.age ageprintln(辅助构造器)}def this(age: Int, name: String) {this(age)this.name name}println(主构造器) }object Person {def main(args: Array[String]): Unit {val person2 new Person(18)} }2.6 构造器参数 Scala 类的主构造器函数的形参包括三种类型未用任何修饰、var 修饰、val 修饰 未用任何修饰符修饰这个参数就是一个局部变量var 修饰参数作为类的成员属性使用可以修改val 修饰参数作为类只读属性使用不能修改 class Person(name: String, var age: Int, val sex: String) { } object Test {def main(args: Array[String]): Unit {var person new Person(bobo, 18, 男)// 1未用任何修饰符修饰这个参数就是一个局部变量//printf(person.name)// 2var 修饰参数作为类的成员属性使用可以修改person.age 19println(person.age)// 3val 修饰参数作为类的只读属性使用不能修改// person.sex 女println(person.sex)} }3 封装 封装就是把抽象出的数据和对数据的操作封装在一起数据被保护在内部程序的其它 部分只有通过被授权的操作成员方法才能对数据进行操作。   Scala 中的 public 属性底层实际为 private并通过 get 方法obj.field()和 set 方法 obj.field_(value)对其进行操作。所以 Scala 并不推荐将属性设为 private再为其设置 public 的 get 和 set 方法的做法。但由于很多 Java 框架都利用反射调用 getXXX 和 setXXX 方 法有时候为了和这些框架兼容也会为 Scala 的属性设置 getXXX 和 setXXX 方法通过 BeanProperty 注解实现。 4 继承多态 语法 class 子类名 extends 父类名 { 类体 }子类继承父类的属性和方法scala 是单继承继承的调用顺序父类构造器-子类构造器 class Person(nameParam: String) {var name nameParamvar age: Int _def this(nameParam: String, ageParam: Int) {this(nameParam)this.age ageParamprintln(父类辅助构造器)}println(父类主构造器) }class Emp(nameParam: String, ageParam: Int) extendsPerson(nameParam, ageParam) {var empNo: Int _def this(nameParam: String, ageParam: Int, empNoParam: Int) {this(nameParam, ageParam)this.empNo empNoParamprintln(子类的辅助构造器)}println(子类主构造器) }object Person{def main(args: Array[String]): Unit {new Emp(z3, 11, 1001)} }5. 动态绑定Scala 中属性和方法都是动态绑定而 Java 中只有方法为动态绑定。 class Person {val name: String persondef hello(): Unit {println(hello person)} } class Teacher extends Person {override val name: String teacheroverride def hello(): Unit {println(hello teacher)} } object Test {def main(args: Array[String]): Unit {val teacher: Teacher new Teacher()println(teacher.name)teacher.hello()println(----------------------------------------)val teacher1:Person new Teacherprintln(teacher1.name)teacher1.hello()} }5 抽象类 5.1 语法 定义抽象类 abstract class Person{} //通过 abstract 关键字标记抽象类定义抽象属性 val|var name:String //一个属性没有初始化就是抽象属性定义抽象方法 def hello():String //只声明而没有实现的方法就是抽象方法abstract class Person {val name: Stringdef hello(): Unit } class Teacher extends Person {val name: String teacherdef hello(): Unit {println(hello teacher)} }5.2 继承重写 如果父类为抽象类那么子类需要将抽象的属性和方法实现否则子类也需声明为抽象类重写非抽象方法需要用 override 修饰重写抽象方法则可以不加 override。子类中调用父类的方法使用 super 关键字子类对抽象属性进行实现父类抽象属性可以用 var 修饰子类对非抽象属性重写父类非抽象属性只支持 val 类型而不支持 var。因为 var 修饰的为可变变量子类继承之后就可以直接使用没有必要重写 5.3 匿名子类 和 Java 一样可以通过包含带有定义或重写的代码块的方式创建一个匿名的子类。 abstract class Person {val name: Stringdef hello(): Unit } object Test {def main(args: Array[String]): Unit {val person new Person {override val name: String teacheroverride def hello(): Unit println(hello teacher)}} }6 单例对象伴生对象 6.1 概述 Scala语言是完全面向对象的语言所以并没有静态的操作即在Scala中没有静态的概 念。但是为了能够和Java语言交互因为Java中有静态概念就产生了一种特殊的对象 来模拟类对象该对象为单例对象。若单例对象名与类名一致则称该单例对象这个类的伴生对象这个类的所有“静态”内容都可以放置在它的伴生对象中声明 6.2 语法 object Person{ val country:StringChina }单例对象采用 object 关键字声明单例对象对应的类称之为伴生类伴生对象的名称应该和伴生类名一致。单例对象中的属性和方法都可以通过伴生对象名类名直接调用访问。 //1伴生对象采用 object 关键字声明 object Person {var country: String China } //2伴生对象对应的类称之为伴生类伴生对象的名称应该和伴生类名一致。 class Person {var name: String bobo } object Test {def main(args: Array[String]): Unit {//3伴生对象中的属性和方法都可以通过伴生对象名类名直接调用访 问。println(Person.country)} }6.3 apply 方法 通过伴生对象的 apply 方法实现不使用 new 方法创建对象。如果想让主构造器变成私有的可以在()之前加上 private。apply 方法可以重载。Scala 中 obj(arg)的语句实际是在调用该对象的 apply 方法即 obj.apply(arg)。用以统一面向对象编程和函数式编程的风格。当使用 new 关键字构建对象时调用的其实是类的构造方法当直接使用类名构建对象时调用的其实时伴生对象的 apply 方法 object Test {def main(args: Array[String]): Unit {//1通过伴生对象的 apply 方法实现不使用 new 关键字创建对象。val p1 Person()println(p1.name p1.name)val p2 Person(bobo)println(p2.name p2.name)} } //2如果想让主构造器变成私有的可以在()之前加上 private class Person private(cName: String) {var name: String cName } object Person {def apply(): Person {println(apply 空参被调用)new Person(xx)}def apply(name: String): Person {println(apply 有参被调用)new Person(name)} }7 特质 7.1 概述 Scala 语言中采用特质 trait特征来代替接口的概念也就是说多个类具有相同的特质特征时就可以将这个特质特征独立出来采用关键字 trait 声明。   Scala 中的 trait 中即可以有抽象属性和方法也可以有具体的属性和方法一个类可以混入mixin多个特质。这种感觉类似于 Java 中的抽象类。   Scala 引入 trait 特征第一可以替代 Java 的接口第二个也是对单继承机制的一种补充。 7.2 语法说明 声明 trait 特质名 { trait 主体 } trait PersonTrait {// 声明属性var name:String _// 声明方法def eat():Unit{}// 抽象属性var age:Int// 抽象方法def say():Unit }一个类具有某种特质特征就意味着这个类满足了这个特质特征的所有要素 所以在使用时也采用了 extends 关键字如果有多个特质或存在父类那么需要采用 with 关键字连接。类和特质的关系使用继承的关系。当一个类去继承特质时第一个连接词是 extends后面是 with。如果一个类在同时继承特质和父类时应当把父类写在 extends 后。 没有父类class 类名 extends 特质 1 with 特质 2 with 特质 3 … 有父类class 类名 extends 父类 with 特质 1 with 特质 2 with 特质 3…特质可以同时拥有抽象方法和具体方法一个类可以混入mixin多个特质所有的 Java 接口都可以当做 Scala 特质使用动态混入可灵活的扩展类的功能 动态混入创建对象时混入 trait而无需使类混入该 trait 如果混入的 trait 中有未实现的方法则需要实现 package com.scala package chapter07trait PersonTrait {//1特质可以同时拥有抽象方法和具体方法// 声明属性var name: String _// 抽象属性var age: Int// 声明方法def eat(): Unit {println(eat)}// 抽象方法def say(): Unit } trait SexTrait {var sex: String }//2一个类可以实现/继承多个特质 //3所有的 Java 接口都可以当做 Scala 特质使用 class Teacher extends PersonTrait with java.io.Serializable {override def say(): Unit {println(say)}override var age: Int _ } object TestTrait {def main(args: Array[String]): Unit {val teacher new Teacherteacher.say()teacher.eat()//4动态混入可灵活的扩展类的功能val t2 new Teacher with SexTrait {override var sex: String 男}//调用混入 trait 的属性println(t2.sex)} }7.3 特质叠加 由于一个类可以混入mixin多个 trait且 trait 中可以有具体的属性和方法若混入的特质中具有相同的方法方法名参数列表返回值均相同必然会出现继承冲突问题。冲突分为以下两种 一个类Sub混入的两个 traitTraitATraitB中具有相同的具体方法且两个 trait 之间没有任何关系解决这类冲突问题直接在类Sub中重写冲突方法。 一个类Sub混入的两个 traitTraitATraitB中具有相同的具体方法且两个 trait 继承自相同的 traitTraitC及所谓的“钻石问题”解决这类冲突问题Scala采用了特质叠加的策略。 所谓的特质叠加就是将混入的多个 trait 中的冲突方法叠加起来 7.4 特质叠加执行顺序 package com.scala package chapter07trait Ball {def describe(): String {ball} }trait Color extends Ball {override def describe(): String {blue- super.describe()} }trait Category extends Ball {override def describe(): String {foot- super.describe()} }class MyBall extends Category with Color {override def describe(): String {my ball is a super.describe()} }object TestTrait1 {def main(args: Array[String]): Unit {println(new MyBall().describe())} }当一个类混入多个特质的时候scala 会对所有的特质及其父特质按照一定的顺序进行 排序而此案例中的 super.describe()调用的实际上是排好序后的下一个特质中的 describe() 方法。叠加规则 案例中的 super不是表示其父特质对象而是表示上述叠加顺序中的下一个特质 即MyClass 中的 super 指代 ColorColor 中的 super 指代 CategoryCategory 中的 super 指代 Ball。如果想要调用某个指定的混入特质中的方法可以增加约束super[]例如super[Category].describe()。 7.5 特质喝抽象类的区别 优先使用特质。一个类扩展多个特质是很方便的但却只能扩展一个抽象类。如果你需要构造函数参数使用抽象类。因为抽象类可以定义带参数的构造函数 而特质不行有无参构造。 8 扩展 8.1 类型检查和转换 obj.isInstanceOf[T]判断 obj 是不是 T 类型。obj.asInstanceOf[T]将 obj 强转成 T 类型。classOf 获取对象的类名。 package com.scala package chapter07class Person { }object Person {def main(args: Array[String]): Unit {val person new Person//1判断对象是否为某个类型的实例val bool: Boolean person.isInstanceOf[Person]if (bool) {//2将对象转换为某个类型的实例val p1: Person person.asInstanceOf[Person]println(p1)}//3获取类的信息val pClass: Class[Person] classOf[Person]println(pClass)} }8.2 枚举类和应用类 枚举类需要继承 Enumeration应用类需要继承 App package com.scala package chapter07object Test {def main(args: Array[String]): Unit {println(Color1.YELLOW)} }// 枚举类 object Color1 extends Enumeration {val RED Value(1, red)val YELLOW Value(2, yellow)val BLUE Value(3, blue) } // 应用类 object Test20 extends App {println(xxxxxxxxxxx); }8.3 Type 定义新类型 使用 type 关键字可以定义新的数据数据类型名称本质上就是类型的一个别名 object Test {def main(args: Array[String]): Unit {type SStringvar v:Sabcdef test():Sxyz} }
http://www.pierceye.com/news/702782/

相关文章:

  • 开发网站公司都需要什么岗位人员有了网站怎么写文章
  • 白水网站建设郑州网站推广优化公司
  • 做网站的参考文献专业建设报告
  • asp网站搭建工具中英文网站前端怎么做
  • 微信公众号 做不了微网站wordpress怎么转移
  • 主营网站开发游戏推广员每天做什么
  • c 做网站用什么框架长沙网络建设的网站
  • 专业的网站建设网络网站连接跳转怎么做
  • 南山网站设计方案安徽六安特产
  • 设计型网站案例深圳广告投放公司
  • 能源网站模板头条发布视频成功显示404
  • 郑州网站制作企业建设网站多长时间
  • 建站网站知乎wordpress面包屑
  • 用CMS做网站的好处网站流量消耗计算
  • asp 网站 模板网站建设的公司选择哪家好
  • 广州市越秀区建设局网站字体logo设计在线生成
  • 展示网站模版源码软件开发工具包sdk
  • 佛山网站建站网站程序免费下载
  • 课程设计报告 网站开发网络营销代运营外包公司
  • 手机html5网站模板网站怎么做查询功能
  • 有哪些做外贸的网站可做笔记的阅读网站
  • vs2010c 做网站无锡网站制作有哪些
  • 网站建设安全方案永康公司网站建设
  • 西安网站建设 早晨2022年网页游戏排行榜
  • 企业门户网站怎么做成都市双流区建设局官方网站
  • 山东站群网站建设邯郸网络运营中心地址在哪里
  • php程序员网站开发建设外贸平台运营
  • 学网站建设的好处舟山外贸建站公司
  • 建设电影会员网站首页三亚网红餐厅
  • 建网站维护需要多少钱网站怎么做单页