`
wesker0918
  • 浏览: 42161 次
  • 性别: Icon_minigender_1
  • 来自: 山东->北京
社区版块
存档分类
最新评论

关于对象与引用之间的一些基本概念

 
阅读更多

初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象
引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。   为便于说明,我们先定义一
个简单的类:
class Vehicle{
 int passengers;      
 int fuelcap;
 int mpg;
}
有了这个模板,就可以用它来创建对象:
Vehicle veh1 = new Vehicle();
通常把这条语句的动作称之为创建一个对象,其实,它包含了四个动作。
1)右边的“newVehicle”,是以Vehicle类为模板,在堆空间里创建一个Vehicle类对象(也简称为Vehicle对象)。
2)末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个
默认的构造函数。
3)左边的“Vehicleveh1”创建了一个Vehicle类引用变量。所谓Vehicle类引用,就是以后可以用来指向Vehicle对象的对象引用。
4)“=”操作符使对象引用指向刚创建的那个Vehicle对象。

我们可以把这条语句拆成两部分:
Vehicle veh1;
veh1 = new Vehicle();
效果是一样的。这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。  
在堆空间里创建的实体,与在数据段以及栈空间里创建的实体不同。尽管它们也是确确实实存在的实体,但是,我们看不见,也摸不着。不仅如此,我们仔
细研究一下第二句,找找刚创建的对象叫什么名字?有人说,它叫“Vehicle”。不对,“Vehicle”是类(对象的创建模板)的名字。一个Vehicle类可以据此创建出
无数个对象,这些对象不可能全叫“Vehicle”。  
对象连名都没有,没法直接访问它。我们只能通过对象引用来间接访问对象。  
为了形象地说明对象、引用及它们之间的关系,可以做一个或许不很妥当的比喻。对象好比是一只很大的气球,大到我们抓不住它。引用变量是一根绳,可
以用来系汽球。  
如果只执行了第一条语句,还没执行第二条,此时创建的引用变量veh1还没指向任何一个对象,它的值是null。引用变量可以指向某个对象,或者为null。它
是一根绳,一根还没有系上任何一个汽球的绳。执行了第二句后,一只新汽球做出来了,并被系在veh1这根绳上。我们抓住这根绳,就等于抓住了那只汽球

再来一句:
Vehicle veh2;
就又做了一根绳,还没系上汽球。如果再加一句:
veh2 = veh1;
系上了。这里,发生了复制行为。但是,要说明的是,对象本身并没有被复制,被复制的只是对象引用。结果是,veh2也指向了veh1所指向的对象。两根绳
系的是同一只汽球。如果用下句再创建一个对象:
veh2 = new Vehicle();
则引用变量veh2改指向第二个对象。
从以上叙述再推演下去,我们可以获得以下结论:
(1)一个对象引用可以指向0个或1个对象(一根绳子可以不系汽球,也可以系一个汽球);
(2)一个对象可以有N个引用指向它(可以有N条绳子系住一个汽球)。如果再来下面语句:
veh1 = veh2;
按上面的推断,veh1也指向了第二个对象。这个没问题。问题是第一个对象呢?没有一条绳子系住它,它飞了。多数书里说,它被Java的垃圾回收机制回收
了。这不确切。正确地说,它已成为垃圾回收机制的处理对象。至于什么时候真正被回收,那要看垃圾回收机制的心情了。由此看来,下面的语句应该不合
法吧?至少是没用的吧?
new Vehicle();
不对。它是合法的,而且可用的。譬如,如果我们仅仅为了打印而生成一个对象,就不需要用引用变量来系住它。最常见的就是打印字符串:
System.out.println(“I am Java!”);
字符串对象“I amJava!”在打印后即被丢弃。有人把这种对象称之为临时对象。

分享到:
评论

相关推荐

    对象与引用之间的一些基本概念

    在Java编程语言中,对象和引用是两个非常基础且重要的概念。对象是程序中的实例,它们代表了类的实例化,而引用则是指向对象的指针。了解这两者之间的关系对于学习面向对象编程至关重要。 首先,让我们澄清对象的...

    对象与引用之间的概念

    #### 二、对象与引用的基本概念 在面向对象编程中,**对象**是类的一个实例,而**引用**则是指向该对象的一个别名。为了更好地理解这两个概念,我们将通过一系列示例来解释。 #### 三、创建对象与引用的过程 假设...

    java对象和对象的引用之间的关系

    在Java编程语言中,理解对象和对象引用之间的关系是非常重要的基础。对象是类的一个实例,而对象引用则是用于访问该对象的一种手段。下面将详细探讨这两个概念。 #### 二、对象的创建过程 在Java中,当我们创建一...

    Java中对象与引用

    本文将从以下几个方面详细解析对象与引用的基本概念及其相互间的关系。 #### 一、对象与引用的基础概念 **对象**: 在Java中,对象是类的一个实例,即根据类的模板创建出来的具体实体。每个对象都有自己的属性(如...

    值引用与对象引用

    理解值引用与对象引用之间的区别对于编程至关重要。值引用适用于基本类型和值类型,提供了一种简单且高效的引用机制;而对象引用则用于引用复杂的对象结构,虽然更加灵活但也带来了更多的潜在问题。在处理诸如`...

    Java基础:对象及引用祥解

    #### 二、对象与引用之间的关系 在Java中,对象和引用之间的关系既简单又复杂: 1. **独立性**:对象和引用是独立存在的。对象存储在堆中,而引用存储在栈中。这意味着即使引用发生了变化,原来的对象仍然存在。...

    java中对象和对象引用的区别!

    ### Java中对象与对象引用的区别 #### 基础概念 在Java编程语言中,对象与对象引用是非常基础且重要的概念。理解它们之间的区别对于掌握Java面向对象编程至关重要。 #### 对象与引用定义 - **对象**:在Java中,...

    对象引用与对象的区别

    理解对象与对象引用之间的区别对于编写高效、可维护的Java程序至关重要。正确地管理和使用对象引用可以帮助开发者避免常见的错误,比如内存泄漏和引用混乱等问题。此外,深入理解这些概念还有助于更好地利用Java的...

    java对象引用易混解析

    #### 一、Java对象与引用的基本概念 在Java中,对象是类的一个实例,而引用则是指向这些对象的变量。理解Java中的对象与引用之间的区别至关重要,因为这涉及到如何管理和操作对象。 #### 二、对象与引用的创建过程...

    java中对象创建、初始化、引用

    虽然两者之间存在一定的相似性,但在Java中句柄主要用来处理对象引用,而非直接指向对象的内存地址。 #### 三、总结 通过上述内容,我们可以了解到在Java中创建对象、初始化以及引用传递的基本流程和概念。对象是...

    LabVIEW中引用的概念及在VI间传递值

    在LabVIEW中,“引用”是程序设计中的一个重要概念,它允许你直接操作对象,而不是复制该对象。这在大型项目或需要高效数据交换的场景中尤其重要。本文将深入探讨LabVIEW中的引用概念以及如何在虚拟仪器(VI)之间...

    WebSphere MQ中的基本概念和对象

    在WebSphere MQ中,了解和掌握基本概念及对象对于深入理解和使用这个强大的中间件系统至关重要。WebSphere MQ提供了一个高效且可靠的消息传递平台,用于在分布式系统之间交换数据。以下是对核心概念和对象的详细解释...

    java基本概念 适用于初学者

    以下是一些关于Java核心概念的详细解释: 1. **面向对象编程(OOP)**:Java 是基于面向对象编程思想的,它强调通过对象来组织代码,对象包含了数据(状态)和操作这些数据的方法(行为)。对象间的交互通过方法...

    浅谈java面向对象和引用

    通过本文的介绍,我们可以了解到Java中面向对象的基本概念以及引用的工作原理。面向对象为Java提供了强大的抽象能力和代码组织方式,而引用则使得对象之间的交互变得简单高效。对于初学者来说,深刻理解这些概念是...

    关于java clone的一些基本的概念

    在Java编程语言中,`clone`是一个非常重要的概念,它涉及到对象复制和对象的深拷贝与浅拷贝。本文将深入探讨Java中的`clone`方法及其相关知识点。 首先,`clone`方法是Java `Object`类的一个成员方法,定义为`...

    Java对象及其引用的理解

    而对于对象引用,虽然传递的是引用的副本,但这些副本都指向同一个堆内存中的对象。这意味着,如果在方法内改变了对象的属性,外部也能看到这些变化,因为所有引用都在指向同一个对象。 例如,假设我们有一个`...

    引用和对象的关系,还有值传递

    ### 引用和对象的关系,还有值传递 #### Java中的对象和引用 在Java中,理解和区分对象与...了解这些基本概念有助于更有效地编写Java程序,并避免常见的错误,如意外地修改对象的状态或者误解对象和引用之间的关系。

    Java中的对象和引用详解

    为了帮助大家更好地理解对象和对象引用之间的关系,我们将从对象和对象引用的概念、区别和联系三个方面进行详细的讲解。 一、对象的概念 在Java中,对象是类的实例。每个对象都是某个类的实例,比如所有的人统称为...

    UML基本概念

    **UML(统一建模语言)基本概念** UML,全称为Unified Modeling Language,是一种用于软件系统建模的标准语言,由Grady Booch、Ivar Jacobson和James Rumbaugh等人在1997年提出。它提供了一套图形化的表示方法,...

    C语言基本概念及其辨析

    ### C语言基本概念及其辨析 #### 1. 关键字`static`的作用 在C语言中,关键字`static`有三个主要作用: - **在函数体内:** 当一个变量被声明为静态(`static`)时,在函数调用过程中,该变量的值在函数退出后仍...

Global site tag (gtag.js) - Google Analytics