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将此地址复制到我们给予的卡上。回到第一种方法,我们来看看我们原来的,不变的卡;去我们的卡上的地址;并在那里做某事。
java引用是对象吗_java – 什么是类,引用和对象?相关推荐
- java作用域对象笔记_Java学习笔记(七)——对象
一.类与对象 1.类的定义 类就是模型,确定对象将会拥有的特征(属性)和行为(方法). 2.类的特点 (1)类是对象的类型 (2)具有相同属性和方法的一组对象的集合. 3.对象的属性: 对象具有的各种 ...
- java string对象创建对象_Java String 创建了几个对象
我们首先来看一段代码: Java代码 String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢 ...
- java 反射创建对象并赋值_java使用反射创建并操作对象的方法
Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.refle ...
- java构造方法 隐含三步_Java入门总结--------类和对象关系以及构造方法
Java中重写父类的方法要遵循"两同两小一大"规则, "两同"即方法名相同.形参列表相同: "两小"指的是子类方法的返回值类型应比父类方法返 ...
- java枚举类型季节实例_Java之枚举类
目录 一.为何引入枚举类型(为了替代魔法值) 什么是魔法值?魔法值有哪些隐患,见另一篇文章编码规约之使用Enum枚举类替代魔法值 那么为什么不用静态变量来替换魔法值呢? 有时候,变量的取值只在一个有限 ...
- java值传递和引用传递的题目_Java 值传递和引用传递
结论 java中都是值传递,没有引用传递. 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的值不会改变原始的值 ...
- java 毕向东 内部类_Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。...
1.Car c = new Car(); Car c2 = new Car(); 1> c 和 c2之间的区别? public static void main(String[] args) { ...
- java创建具体时间点_java单例饿汉模式对象创建时间点疑问
关于java单例中饿汉式模式的解释,大多如下: 饿汉模式线程安全的,在类创建的同时就已经创建好一个静态的对象,相对与懒汉模式对象创建过早,浪费空间. 但是jvm中明确定义是:虚拟机规范则是严格规定了有 ...
- java集合对象排序_java ArrayList集合中的某个对象属性进行排序的实现代码
开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教. 1.Student的Bean如下: public class Student ...
最新文章
- Python 技术篇-通过进程名获取进程pid实例演示,使用psutil库获取进程id
- Mzc和男家丁的游戏
- SAP 中如何寻找增强
- palindromic java_LeetCode(java)5. Longest Palindromic Substring
- 调用Django中的API时,使用Pycharm给后端view打断点的方法
- Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数)...
- 素数筛选法(埃氏筛 欧拉筛)
- (76)译码器与编码器(三八译码器)
- android_x86安装时遇到的问题与修改开机分辨率
- 【深度优先搜索/树】计蒜客:族谱
- Apache OpenNLP(二)
- 雪亮工程视频监控应用系统解决方案
- 打印机添加或者设置流程
- Docker端口映射实例
- Python代码大全,海量代码任你下载
- 高等数学期末总复习 DAY6.洛必达求极限、不等式单调性证明、判断拐点、曲率以及曲率半径
- ubuntu 18.04 安装NVIDIA驱动 cuda/cudnn + tensorflow-gpu + pytorch
- 计算机强制关机后无法正常启动,​window7强制关机之后无法正常启动修复方法...
- 关于WPS中公式用不了的问题
- python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)