热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java引用是对象吗_java–什么是类,引用和对象?

如果你喜欢住房隐喻:一个班级就像一座房子的蓝图。使用这个蓝图,你可以建造尽可能多的房屋,你喜欢。你建立的每个房子(或实例化,

如果你喜欢住房隐喻:

一个班级就像一座房子的蓝图。使用这个蓝图,你可以建造尽可能多的房屋,你喜欢。

>你建立的每个房子(或实例化,在OO lingo)是一个对象,也称为一个实例。

当然,每个房子也有一个地址。如果你想告诉某人房子在哪里,你给他们一张带有地址的卡片。该卡是对象的参考。

>如果你想访问房子,你可以看看卡上写的地址。这被称为解引用。

您可以尽可能多地复制该参考,但只有一个房子 – 您只需复制具有地址的卡,而不是房屋本身。 Java方法总是传递值,但该值可以是对象的引用。所以,如果我有:

Foo myFoo = new Foo(); // 1

callBar(myFoo); // 2

myFoo.doSomething() // 4

void callBar(Foo foo) {

foo = new Foo(); // 3

}

然后让我们看看发生了什么。

>有一些事情发生在第1行。new Foo()告诉JVM使用Foo蓝图构建一个新房子。 JVM这样做,并返回对房子的引用。然后,将此引用复制到myFoo。这基本上就像要求承包商建一个房子。他呢,然后告诉你房子的地址;你写下这个地址。

>在第2行中,您将此地址转给另一种方法callBar。接下来让我们跳到那个方法。

>在这里,我们有一个参考Foo foo。 Java是pass-by-value,所以callBar中的foo是myFoo引用的副本。想想它就像给CallBar自己的卡一样,房子的地址就可以了。 callBar用这张卡做什么?它要求建一座新房子,然后使用你给它的卡片写新房子的地址。请注意,callBar现在不能到达第一个房屋(我们在第1行建立的房子),但是房子没有改变,因为一个卡片曾经有它的地址,现在有一个其他房子的地址。

>回到第一个方法,我们取消引用myFoo来调用它的方法(doSomething())。这就像看着卡片,去那个地址在卡上的房子,然后在那个房子里做某事。请注意,我们的myFoo地址卡与CallBar方法保持一致 – 请记住,我们给了callBar一份我们的参考。

整个序列将是:

请求JVM建房子。它是,并给我们的地址。我们将此地址复制到名为myFoo的卡。>我们调用callBar。在我们做之前,我们将在myfoo上写的地址复制到一个新的卡片上,我们给callBar。它称该卡为foo。> callBar询问JVM为另一个房子。它创建它,并返回新房子的地址。 callBar将此地址复制到我们给予的卡上。回到第一种方法,我们来看看我们原来的,不变的卡;去我们的卡上的地址;并在那里做某事。



推荐阅读
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 【Java面试】简单说一下你对序列化和反序列化的理解
    Hi,大家好,我是Mic一个工作4年的粉丝,投了很多简历好不容易接到一个互联网公司的面试邀约。在面试第一轮就被干掉了,原因是对主流互联网技术理解太浅了。其中就有一个这样的问题:“简 ... [详细]
  • Java面试题系列:将面试题中比较经典和核心的内容写成系列文章持续在公众号更新,可巩固基础知识,可梳理底层原理,欢迎大家持续关注【程序新视界】。本篇为面试题系列第2篇。常见面试问 ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 子类从父类继承所有的成员(字段,方法,嵌套类),构造方法不属于成员,所有子类不能继承,但是子类可以调用父类的构造方法对于private方法和属性,子类一定是继承了的,但是没有访问权 ... [详细]
  • jvm内存区域与溢出为什么学习jvm木板原理,最短的一块板决定一个水的深度,当一个系统垃圾收集成为瓶颈的时候,那么就需要你对jvm的了解掌握。当一个系统出现内存溢出,内存泄露的时候 ... [详细]
author-avatar
博艺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有