Scala学习(六)---apply方法和单例对象

news2025/1/11 14:23:13

文章目录

  • 1.Apply方法
  • 2.单例模式

1.Apply方法

Scala中实例化一个类,可以不用new , 其原因 其实就是 apply 方法
apply方法的调用约定:
括号传递给类实例或者单例对象名一个或者多个对象的时候
scala会在对应的类或者对象中查找apply方法
且参数列表和传入的参数一致的方法
并用传入的参数来调用apply方法

在scala创建对象一般可以通过使用构造器或者调用自己的方法

object Test_Apply{
  def main(args: Array[String]): Unit = {
    //创建对象的方法
    //1.通过构造器创建对象
    val person1 = new Person10
    
    //2.通过静态方法
    val person2 = Person10.getObject()
  }
}

class Person10
{
  
}
object Person10
{
  def main(args: Array[String]): Unit = {
    
  }
  
  def getObject():Person10=new Person10
}

也可以使用apply方法来创建对象,因为apply方法非常的特殊,可以不写方法名称来调用,通过括号来调用

    //3.通过apply方法
    val person3:Person10= Person10()
  object Person10
{

  def apply():Person10={
    new Person10()
  }
} 

apply方法可以任意自定义,不一定非要用于函数的创建

object Person10
{

  def apply():Unit={
    println("hello world")
  }
}
object Test_Apply{
  def main(args: Array[String]): Unit = {

    Person10()
  }
}

在这里插入图片描述

2.单例模式

单例模式分为懒汉式和饿汉式
a.懒汉式
默认不会实例化,什么时候用什么时候new。
懒汉式占用内存小,线程不安全(两个线程同时为这个对象赋值),可以通过加锁来解决这个问题

//1.懒汉式
//先将构造器私有化
class Student10 private(){
  
}
object Student10{
  private var student10:Student10=null;
  
  def apply():Student10={
    if(student10==null)
      {
        //说明是第一次调用
        student10=new Student10()
        student10
      }else
      {
        student10
      }
  }
}

b.饿汉式
类加载的时候就实例化,并且创建单例对象。
饿汉式:没有线程安全的问题,写起来相对简单,占用内存相对较多

class Student10 private(){

}
object Student10{
  println val student10:Student10=new Student10()
  def apply():Student10=student10
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TortoiseSvn和TortoiseGit的安装(超详细带汉化)

前言 TortoiseSvn和TortoiseGit都是针对代码进行版本管理的工具,又俗称小乌龟,简洁而可视化的操作界面,免去繁琐的命令行输入。只需要记住常用的几个操作步骤就能快速上手。工欲善其事必先利其器,我一向奉行的就是复杂的问题简单化…

Promise面试题

Promise面试题,带你搞懂同步异步执行顺序 前置知识面试题面试题一面试题二面试题三面试题四 分析面试题一分析面试题二分析面试题三分析面试题四分析 前置知识 Promise中的then方法 then:指定用于得到成功value的成功回调和用于得到失败reason的失败回调…

openldap2.4版本管理员文档中文翻译版

OpenLDAP2.4管理员指南 文章目录 1.OpenLDAP介绍2.快速开始指南1.获得软件2.解压压缩包3.阅读文档4.运行configure5.编译软件6.测试编译结果7.安装软件8.编辑配置文件9.导入数据库配置10.启动slapd11.添加初始条目到目录中12.检测添加结果 3.大图片-配置选择1.本地目录服务2.带…

抓取微信小程序源码教程,扒微信小程序文件等

前言: 想成为一名微信小程序的开发者,前端思路的学习和安全意识是非常有必要的,故务必掌握小程序反编译技能。这里用到了2个工具《包解密》与《反编译》(非原创,均来自网上的大佬),特别适合新手…

5.23黄金是否会继续下跌?多单被套怎么办?

近期有哪些消息面影响黄金走势?今日黄金多空该如何研判? ​黄金消息面解析:周二(5月23日)亚市盘中,现货黄金小幅走弱,一度刷新两日低点至1960美元/盎司,美国明尼亚波利斯联储主席卡…

redis的主从复制、哨兵、集群

主从复制: 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 原理: 主从关系确定…

【VLAN如何划分?6个方法帮你解决!好用又简单!】

如何选择交换机?如何根据项目确定网络结构?交换机做为大家工作中最常用的设备之一,关于它的选择,不得不知。 在做项目时都有这样的疑问,因为参数决定了项目预算,常用的园区组网技术也是多种多样。 我们来…

物联网调试管理平台

1. 项目介绍 1.1 项目简介 MQTT调试管理平台是一款基于Spring Spring MVC Mybatis开发的一款物联网设备调试管理平台。 其功能主要是对客户MQTT调试页面进行集中管理(连接信息、发送信息),系统管理员可在后台添加客户和调试页面&#xf…

OpenHarmony支持HDMI接口声卡适配说明

高清多媒体接口(High Definition Multimedia Interface,HDMI )是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设…

chatgpt赋能Python-python_js解密

Python与JavaScript解密之道 在现代Web应用程序中,JavaScript和Python是两种最强大和流行的编程语言。Python具有强大的基于文本的处理和数据结构,而JavaScript则具有处理DOM,Ajax和动态效果的能力。然而,有时我们需要使用这两种…

Spring Cloud Eureka 是什么?如何使用它来实现服务注册与发现?

Spring Cloud Eureka 是什么?如何使用它来实现服务注册与发现? 在微服务架构中,服务注册与发现是一个非常重要的概念。它可以帮助我们实现服务的自动发现和负载均衡,从而提高系统的可用性和可扩展性。Spring Cloud Eureka 是一个…

无需公网IP,在家SSH远程连接公司内网服务器「cpolar内网穿透」

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 转载自cpolar内网穿透的文章:无公网IP,SSH远程连接Linux CentOS【内网穿透】 本次教程我们来实现如何在外公网环境下&am…

探索Java面向对象编程的奇妙世界(二)

⭐ 对象和类的详解⭐ 构造方法(构造器 constructor)⭐ 构造方法的重载⭐ 面向对象的内存分析 ⭐ 对象和类的详解 类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸&#xff…

以太网、工业以太网和Profinet三者有何关联?

总的来说,以太网是一种局域网规范,工业以太网是应用于工业控制领域的以太网技术,Profinet是一种在工业以太网上运行的实时技术规范。 下面,我们来详细说说这三者的区别。 1.以太网 以太网是当今现有局域网采用的最通用的通信协议…

AndResGuard 源码解析

背景 抖音包体积优化提出的“键常量池裁剪”是基于腾讯的AndResGuard资源混淆之后做的进一步处理,也就是对resources.arsc文件的处理。而资源混淆,就是对resources.arsc文件进行修改。那么我们可以尝试基于这个思路,对AndResGuard插件源码进…

推荐一款好用的Idea热部署插件

目录 1.什么是热部署 2.为什么需要热部署 3.热部署产品 3.1.JRebel 3.2.IDEA HotSwap 3.3.HotSwapAgent 3.4.Spring Boot DevTools 3.5.FastHotSwapper 4.FastHotSwapper安装使用 参考: 1.什么是热部署 热部署(Hot Deployment)是指…

chatgpt赋能Python-python_iloc_loc

使用Python中的iloc和loc方法对数据进行索引 如果你正在使用Python来进行数据处理或者数据分析,那么你肯定会遇到需要对数据进行索引的情况。Python提供了两个非常有用的方法——iloc和loc,对于数据的索引和切片操作非常实用。在本文中,我们…

yolov5-7.0 添加BiFPN

1. BiFPN特征融合 BiFPN是目标检测中神经网络架构设计的选择之一,为了优化目标检测性能而提出。主要用来进行多尺度特征融合,对神经网络性能进行优化。来自EfficientDet: Scalable and Efficient Object Detection这篇论文。 在这篇论文中,作…

算法27:从暴力递归到动态规划(2)

上一题比较简单,下面来一道比较难的题目。 假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2 开始时机器人在其中的M位置上(M 一定是 1~N 中的一个) 如果机器人来到1位置,那么下一步只能往右来到2位置; 如果机…

初级程序员如何快速晋升为技术大牛

[请搜索公众号“云智AI助手”、“云智博瑞”关注我们 │ 谢谢支持 ] Cloud wisdom, AI assistant 作为初级程序员,你是否常常遇到代码优Bug调试的难题?幸运的是,ChatGPT可以助你一臂之力。本文将通过多个实例展示,如何借ChatGPT的…