Java中的对象和对象引用实例浅析

本文实例讲述了Java中的对象和对象引用。分享给大家供大家参考。具体分析如下:

在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然。今天我们就来一起了解一下对象和对象引用之间的区别和联系。

1.何谓对象?

在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一。要理解什么是对象,需要跟类一起结合起来理解。下面这段话引自《Java编程思想》中的一段原话:

“按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,‘类'就是‘类型'的同义词。”

从这一句话就可以理解到对象的本质,简而言之,它就是类的实例,比如所有的人统称为“人类”,这里的“人类”就是一个类(物种的一种类型),而具体到每个人,比如张三这个人,它就是对象,就是“人类”的实例。

2.何谓对象引用?

我们先看一段话:

“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。”  

这段话来自于《Java编程思想》,很显然,从这段话可以看出对象和对象引用不是一回事,是两个完全不同的概念。举个例子,我们通常会用下面这一行代码来创建一个对象:

Person person = new Person("张三");

有人会说,这里的person是一个对象,是Person类的一个实例。

也有人会说,这里的person并不是真正的对象,而是指向所创建的对象的引用。

到底哪种说法是对的?我们先不急着纠结哪种说法是对的,再看两行代码:

Person person;
person = new Person("张三");

这两行代码实现的功能和上面的一行代码是完全一样的。大家都知道,在Java中new是用来在堆上创建对象用的,如果person是一个对象的话,那么第二行为何还要通过new来创建对象呢?由此可见,person并不是所创建的对象,是什么?上面的一段话说的很清楚,“操纵的标识符实际是指向一个对象的引用”,也就是说person是一个引用,是指向一个可以指向Person类的对象的引用。真正创建对象的语句是右边的new Person("张三");

再看一个例子:

Person person;
person = new Person("张三");
person = new Person("李四");

这里让person先指向了“张三”这个对象,然后又指向了“李四”这个对象。也就是说,Person person,这句话只是声明了一个Person类的引用,它可以指向任何Person类的实例。这个道理就和下面这段代码一样:

int a;
a=2;
a=3;

这里先声明了一个int类型的变量a,先对a赋值为2,后面又赋值为3.也就是说int类型的变量a,可以让它的值为2,也可以为3,只要是合法的int类型的数值即可。

也就是说,一个引用可以指向多个对象,而一个对象可不可以被多个引用所指呢?答案当然是可以的。

比如:

Person person1 = new Person("张三");
Person person2 = person1;

person1和person2都指向了“张三”这个对象。

关于对象和对象引用的区别和联系暂时就讲这么多了,感兴趣的朋友可以查阅相关文档和资料。

希望本文所述对大家的java程序设计有所帮助。

(0)

相关推荐

  • Java基础教程之对象引用

    我们之前一直在使用"对象"这个概念,但没有探讨对象在内存中的具体存储方式.这方面的讨论将引出"对象引用"(object reference)这一重要概念. 对象引用 我们沿用之前定义的Human类,并有一个Test类: 复制代码 代码如下: public class Test {     public static void main(String[] args)     {         Human aPerson = new Human(160);      

  • 解析Java的JNI编程中的对象引用与内存泄漏问题

    JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native code:在 native code 中嵌入 Java 虚拟机调用 Java 的代码. JNI 编程在软件开发中运用广泛,其优势可以归结为以下几点: 利用 native code 的平台相关性,在平台相关的编程中彰显优势. 对 native code 的代码重用. native code 底层操作

  • 详解Java对象的强、软、弱和虚引用+ReferenceQueue

    详解Java对象的强.软.弱和虚引用+ReferenceQueue 一.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题. 二.软引用(SoftReference) 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回

  • 对Java的面对对象编程中对象和引用以及内部类的理解

    最近利用下班的时候看了看的think in java感觉再看 和第一次看大不一样 接下来说一下java中对象和引用的关系,以及内部类的概念. 1.java中一切都是对象  在java中是什么来操作者对象呢?答案是引用,这就好比C或者C++中的指针. 如果用拥有一个引用,那么此时你必须让其和一个对象关联在一起,否则这个引用并不会像你想象的那样任由你的控制,例如你创建了一个String的引用: String s ; 而此时并未与任何对象关联,如果此时你去做一些操作,如调用String的一些方法,肯定

  • JAVA中的引用与对象详解

    Thinking in Java 一书中提到,引用和对象就像瑶控器和电视机.用瑶控器(引用)来操作电视机(对象),想换频道什么的直接操作瑶控器就可以了,瑶控器再来调控电视机.如果你在房间里面走动,同时还想操作电视换频道,你只需要携带瑶控器就可以了.我觉得这个比较非常好,引用是用来操作对象的,对象是由你来创建的.通常用new关键字来创建一个对象.那么这些对象是怎样存储的,内存又是怎样分配的呢? 存储在什么地方? 1.寄存器(register):由于寄存器是在CPU内部的,所以它的速度最快,但是数量

  • Java中的对象和引用详解

    Java中的对象和引用详解 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做"万物皆对象",这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: "按照通俗的

  • Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    接口的灵活性就在于"规定一个类必须做什么,而不管你如何做". 我们可以定义一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法,这和上述的超类对象引用访问子类对象的机制相似. //定义接口InterA interface InterA { void fun(); } //实现接口InterA的类B class B implements InterA { public void fun() { System.out.pri

  • Java中的对象和对象引用实例浅析

    本文实例讲述了Java中的对象和对象引用.分享给大家供大家参考.具体分析如下: 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做"万物皆对象",这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编

  • Java中的this和super实例浅析

    要说this和super就不得不说Java的封装和继承了,首先说封装,这是一种思想,算不上一种技术,核心思想就是将对象的同一行为和状态看成是一个整体,将无需对外界暴露的属性和方法隐藏起来,比如一些方法的具体实现和一些私有的变量,通过公共的方法提供对属性的操作,从而提高安全性. class Person { private String name = "无名氏";//私有的内部成员变量 private int age = 20;//私有的内部成员变量 public void sayHel

  • java中response对象用法实例分析

    本文实例讲述了java中response对象用法.分享给大家供大家参考,具体如下: <jsp:forward>动作元素用于运行时在服务器端结束当前页面的执行,并从当前页面转向指定页面. 使用response对象的setHeader()方法可以设置页面的自动刷新时间间隔.实现每隔60秒重新加载本页面的语句为: 复制代码 代码如下: response.setHeader("refresh",60); 而实现3秒后浏览器加载新页面http://www.jb51.net的语句为:

  • java中request对象各种方法的使用实例分析

    本文实例讲述了java中request对象各种方法的使用.分享给大家供大家参考,具体如下: request对象是从客户端向服务器端发出请求,包括用户提交的信息以及客户端的一些信息.request对象是javax.servlet.http.HttpServletRequest类的实现实例. request对象封装了浏览器的请求信息,通过request对象的各种方法可以获取客户端以及用户提交的各项请求信息. 使用request对象获取客户端提交的请求参数的常用方法如下: 1.String getPa

  • Java中Console对象实例代码

    在JDK 6中新增了java.io.Console类,可以让您取得字节为基础的主控台装置,例如,您可以藉由System新增的console()方法取得标准输入输出装置的Console对象,并利用它来执行一些简单的主控台文字输入输出,例如: ConsoleDemo.java import java.io.Console; public class ConsoleDemo { public static void main(String[] args) { System.out.print("请输入

  • Java中JavaBean对象和Map的互相转换方法实例

    目录 1.JavaBean转Map 1.1.简介 1.2.反射知识 1.3.简单转换 1. 4.属性里面套属性转换 1. 5.总结 2.Map转JavaBean对象 2.1.简介 2.2.Introspector介绍 2.3.BeanInfo介绍 2.4用反射实现转换 2.5.利用Introspector(内省)的方式转换 总结 1.JavaBean转Map 1.1.简介 这篇博客是通过反射来进行实现转换的 在学习redis中,发现了一个知识点,就是Java对象转map,视频中的内容是通过hut

  • java 中HttpClient传输xml字符串实例详解

    java 中HttpClient传输xml字符串实例详解 介绍:我现在有一个对象page,需要将page对象转换为xml格式并以binary方式传输到服务端 其中涉及到的技术点有: 1.对象转xml流 2.输出流转输入流 3.httpClient发送二进制流数据 POM文件依赖配置 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifact

  • JS自定义对象实现Java中Map对象功能的方法

    本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容!   这里Key,你要使用String类型,和Java一样,你可以进行一些增加,删除,修改,获得的操作. 使用很简单,我先把工具类给大家看下: 复制代码 代码如下: /**  *

  • JAVA中Integer值的范围实例代码

    废话不多说了,直接给大家贴代码,具体代码如下所示: package com.test; public class Test { public static void main(String []args) { Integer a = 100;//此处若使用new,则==值必为false Integer b = 100; System.out.println(a==b);//true Integer c = 150; Integer d = 150; System.out.println(c==d

随机推荐