Java Scala数据类型与变量常量及类和对象超详细讲解

 更新时间:2022年12月14日 11:41:24   作者:Cry丶  
本文内容主要分为3节,依次讲解:Scala的数据类型有哪些? 变量常量如何使用? 类和对象如何理解? 受限于博主的大脑容量,大概是无法做到事无巨细的,不过其实也没必要那么"细",抓住主要脉络,加上大量的练习,融会贯通只不过是时间的问题

一、数据类型

简记: 所有基础类型基本与Java的包装类等同,唯一有不同的Int(Scala),Integer(Java),注意这个就好

Unit, Null, Nothing, Any, AnyRef, AnyVal,这几个除了Null乍一眼会有些陌生,不要怕,上总结:

首先是层级图:

然后是表格:

补丁: 记住Any是所有类型的超类,也就是父类; Nothing是所有类型的子类; Null就是Null; None用在Map类型的value值类型里

二、变量和常量

1.定义变量: var a = 10; 或 var a:Int = 10;

2.定义常量: val a = 10; 或 val a:Int = 10;

建议: scala的理念是简洁优先,一般不会写出返回类型,不过调试代码时我的习惯还是写出来,可以使用IDE自动生成

Scala会对每个变量属性自动生成类似Java中的getter/setter方法,对每个常量生成getter方法

1.变量的getter/setter:

point为一个我们创建的对象,现在要对他的x属性赋值,以及获取他的x属性

 // setter()
 point.x_=(200)
 // getter()
 println("x = " + point.x)

2.常量的getter: 同上

建议:也可以显示写出来getter/setter方法,相当于自定义方法,可能更符合习惯

三、类和对象

谨记:Scala中类还是我们熟悉的class,但是对象object有2个概念,一个是类的引用我们可以称之为类的对象;另一个是object对象,类似Java中的静态工具类,先这么记住,为避免混淆,下文在说对象时一律指Scala中特有的object,类生成的对象后文统一使用类的引用来指代

3.1 类

# 很传统的方式, 调用时直接: val person = new Person() 
或者 val person = new Persion  // 无参构造可以不用写小括号
class Person {
  val name = "Cry";
  val age = "77";
}
# 带参数的类定义, 调用时: val person = new Person("Cry",777)
class Person(xName: String, xAge: Int) {
  val name = xName
  val age = xAge
  var gender = 'm'
}
#自定义构造方法: 
class Person(xName: String, xAge: Int) {
  val name = xName
  val age = xAge
  var gender = 'm'
  def this(yName: String, yAge: Int, yGender: Char) {
    this(yName,yAge)
    gender = yGender
  }
   def sayName(): Unit = {
    println("Hello Scala..." + this.name)
  }
}

3.2 对象

object中不可以传参,当创建一个object时,如果传入参数,那么会自动寻找object中的相应参数个数的apply方法。

object Person{
  var name = "Cry"
  def apply(name:String): Unit = {
    println("My name is " + name)
  }
}
# 调用: val person = Person("Cry777")

3.3 伴生类和伴生对象

在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

3.4 Scala的main函数只能写在object里

可以理解成main函数是静态的,所以推导而出的结论

object Lesson_ClassAndObj {
  def main(args: Array[String]): Unit = {
    val person = new Person("zhangsan", 18)
    val person2 = new Person("lisi", 18, 'f')
    Person("zhaoliu")
  }
}

总结

1.Scala object相当于java中的工具类, object中定义的全是静态的, object不可以传参,对象要传参,使用apply()方法

2.Scala中定义变量用var, 自定义常量用val, 变量可变, 常量不可变. 变量和常量类型可以忽略不写,会自动推断

3.Scala中每行后面都会有分好自动推断机制, 不用显式写出";"

4.建议在Scala中命名使用驼峰命名法

5.Scala类中可以传参, 传参一定要指定类型, 有了参数就有了默认的有参构造方法, 类中的属性默认有getter/setter方法

6.类中重写构造时, 构造中第一行必须先调用默认的构造. def this(…){…}

7.Scala中档new class时, 类中除了方法不执行【除了构造方法】, 其他语句都执行

8.在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

到此这篇关于Java Scala数据类型与变量常量及类和对象超详细讲解的文章就介绍到这了,更多相关Java Scala内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java关键字详解之final static this super的用法

    Java关键字详解之final static this super的用法

    this用来调用目前类自身的成员变量,super多用来调用父类的成员,final多用来定义常量用的,static定义静态变量方法用的,静态变量方法只能被类本身调用,下文将详细介绍,需要的朋友可以参考下
    2021-10-10
  • ThreadLocal内存泄漏问题解决方案

    ThreadLocal内存泄漏问题解决方案

    这篇文章主要介绍了ThreadLocal内存泄漏问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java抽象的本质解析

    Java抽象的本质解析

    对于面向对象编程来说,抽象是它的一大特征之一,在 Java 中可以通过两种形式来体现OOP的抽象:接口和抽象类,下面这篇文章主要给大家介绍了关于Java基础抽象的相关资料,需要的朋友可以参考下
    2022-03-03
  • 教你在一分钟之内理解Java Lambda表达式并学会使用

    教你在一分钟之内理解Java Lambda表达式并学会使用

    今天给大家带的文章是Java8新特性的相关知识,文章围绕着如何在一分钟之内理解Java Lambda表达式并学会使用展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • SpringBoot项目如何打包成war包

    SpringBoot项目如何打包成war包

    使用SpringBoot 开发项目,由于内置了Tomcat,所以项目可以直接启动,部署到服务器的时候,直接打成 jar 包,就可以运行了,这篇文章主要介绍了SpringBoot项目如何打包成war包,需要的朋友可以参考下
    2024-07-07
  • Java中synchronized锁的深入理解

    Java中synchronized锁的深入理解

    这篇本文主要对Java中synchronized锁进行深入理解,文中通过synchronized的优化,synchronized的实现原理及synchronized的升级过程来介绍Java中synchronized锁,感兴趣的同学可以跟着小编一起来学习
    2023-05-05
  • Java Email邮件发送简单实现介绍

    Java Email邮件发送简单实现介绍

    电子邮件从用户电脑的邮件软件,例如Outlook,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件
    2022-11-11
  • Java数据结构之稀疏数组的实现与应用

    Java数据结构之稀疏数组的实现与应用

    这篇文章主要为大家详细介绍了Java数据结构中稀疏数组的实现与应用,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
    2022-10-10
  • IDEA导入jar包的完整实现步骤

    IDEA导入jar包的完整实现步骤

    由于导入jar包项目存在很多不确定的问题,导致每次都需要调试、配置好多遍,对此特意记录下来,这篇文章主要给大家介绍了关于IDEA导入jar包的相关资料,需要的朋友可以参考下
    2024-01-01
  • java连接zookeeper实现zookeeper教程

    java连接zookeeper实现zookeeper教程

    这篇文章主要介绍了java连接zookeeper实现zookeeper教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论