如果你喜欢住房隐喻:

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

>你建立的每个房子(或实例化,在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将此地址复制到我们给予的卡上。回到第一种方法,我们来看看我们原来的,不变的卡;去我们的卡上的地址;并在那里做某事。

java引用是对象吗_java – 什么是类,引用和对象?相关推荐

  1. java作用域对象笔记_Java学习笔记(七)——对象

    一.类与对象 1.类的定义 类就是模型,确定对象将会拥有的特征(属性)和行为(方法). 2.类的特点 (1)类是对象的类型 (2)具有相同属性和方法的一组对象的集合. 3.对象的属性: 对象具有的各种 ...

  2. java string对象创建对象_Java String 创建了几个对象

    我们首先来看一段代码: Java代码 String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢 ...

  3. java 反射创建对象并赋值_java使用反射创建并操作对象的方法

    Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.refle ...

  4. java构造方法 隐含三步_Java入门总结--------类和对象关系以及构造方法

    Java中重写父类的方法要遵循"两同两小一大"规则, "两同"即方法名相同.形参列表相同: "两小"指的是子类方法的返回值类型应比父类方法返 ...

  5. java枚举类型季节实例_Java之枚举类

    目录 一.为何引入枚举类型(为了替代魔法值) 什么是魔法值?魔法值有哪些隐患,见另一篇文章编码规约之使用Enum枚举类替代魔法值 那么为什么不用静态变量来替换魔法值呢? 有时候,变量的取值只在一个有限 ...

  6. java值传递和引用传递的题目_Java 值传递和引用传递

    结论 java中都是值传递,没有引用传递. 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的值不会改变原始的值 ...

  7. java 毕向东 内部类_Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。...

    1.Car c = new Car(); Car c2 = new Car(); 1> c 和 c2之间的区别? public static void main(String[] args) { ...

  8. java创建具体时间点_java单例饿汉模式对象创建时间点疑问

    关于java单例中饿汉式模式的解释,大多如下: 饿汉模式线程安全的,在类创建的同时就已经创建好一个静态的对象,相对与懒汉模式对象创建过早,浪费空间. 但是jvm中明确定义是:虚拟机规范则是严格规定了有 ...

  9. java集合对象排序_java ArrayList集合中的某个对象属性进行排序的实现代码

    开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教. 1.Student的Bean如下: public class Student ...

最新文章

  1. Python 技术篇-通过进程名获取进程pid实例演示,使用psutil库获取进程id
  2. Mzc和男家丁的游戏
  3. SAP 中如何寻找增强
  4. palindromic java_LeetCode(java)5. Longest Palindromic Substring
  5. 调用Django中的API时,使用Pycharm给后端view打断点的方法
  6. Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数)...
  7. 素数筛选法(埃氏筛 欧拉筛)
  8. (76)译码器与编码器(三八译码器)
  9. android_x86安装时遇到的问题与修改开机分辨率
  10. 【深度优先搜索/树】计蒜客:族谱
  11. Apache OpenNLP(二)
  12. 雪亮工程视频监控应用系统解决方案
  13. 打印机添加或者设置流程
  14. Docker端口映射实例
  15. Python代码大全,海量代码任你下载
  16. 高等数学期末总复习 DAY6.洛必达求极限、不等式单调性证明、判断拐点、曲率以及曲率半径
  17. ubuntu 18.04 安装NVIDIA驱动 cuda/cudnn + tensorflow-gpu + pytorch
  18. 计算机强制关机后无法正常启动,​window7强制关机之后无法正常启动修复方法...
  19. 关于WPS中公式用不了的问题
  20. python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)

热门文章

  1. 李开复:未来10年AI将取代人类?AI已让这7种职业加速消失
  2. 回顾系列3-刀塔传奇
  3. java怎么安装_最新版Java安装教程
  4. AutoCAD打印预览时显示空白
  5. EntityFrame 超时时间设置 ObjectContext.CommandTimeout
  6. 屏蔽百度蜘蛛或某一爬虫的四种方法
  7. (实况野球)恶灵学院(ダンジョン高校)二周目攻略
  8. javacv实现图片去水印
  9. Python Broadcast机制
  10. windows 安装kafka流程