`
liuwei1981
  • 浏览: 756811 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:157236
社区版块
存档分类
最新评论

32.Java引用类型

 
阅读更多

Java语言中除8种基本数据类型以外的数据类型称为引用类型,或复合数据类型。

 

引用类型的数据都是以某个类的对象的形式存在的,我们在程序中声明的引用类型变量只是为该对象起的一个名字,或者说是对该对象的引用,变量的值是对象在内存空间中的存储地址而不是对象本身,这就是称之为引用类型的原因。


引用类型数据以对象的形式存在,其构造和初始化以及赋值的机制都是与基本数据类型的变量有所不同。

 

声明基本数据类型的变量时,系统同时为该变量分配存储器空间,此空间中将直接保存基本数据类型的值。

 

而声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象或者说并没有为对象分配存储器空间,将来在创建一个该引用类型的对象后,再使变量和对象建立对应关系。可以这样来看,我们声明的引用类型变量,就是一把钥匙(引用),而将来创建的,并与变量建立对应关系的对象,才是我们真正要操作的数据,相当于一个放满我们需要数据和操作的仓库。

 

这里简单来说说我们声明一个引用类型变量,以及与之对应的对象创建的过程。

 

 

以前面的Student类为例。

 

 Student s1;
 s1 = new Student("Lisa","Male",1,18);
 System.out.println("学生s1姓名: " + s1.getName());
 Student s2;
 s2 = s1;
 s1.setName("Sophie");
 System.out.println("学生s2姓名:"+s2.getName());

 

这个代码段的作用是建立并初始化了两个Student引用类型数据,我们以对象s1为例讲解引用类型数据的初始化过程(对象的初始化过程):


1. 执行语句“Student s1;”时,系统为引用类型变量s1分配引用空间(定长32位),此时只是定义了变量s1,还未进行初始化等工作,因此还不能调用Student类中定义的方法 

 

2. 执行语句“s1 = new Student(”Lisa“,”Male“,1,18);”,

 

先调用构造方法创建一个Student类的对象----为新对象分配内存空间用来存储该对象所有属性(name,sex,grade,age)的值,并对各属性的值进行默认的初始化。

 

注意,在这个程序中,因为name和sex的类型是String类型,也是属于引用类型,所以它们的默认初始值也为null,

 

3. 接下来执行Student类的构造方法,继续此新对象的初始化工作,构造方法中又要求对新构造的对象的成员变量进行赋值,因此,此时name、sex、grade、age的值变成了“Lisa”、“Male”、1、18,

 

4. 至此,一个Student类的新的对象的构造和初始化构成已完成。最后再执行“s1 = new Student("Lisa","Male",1,18);”中的“=”号赋值操作,将新创建对象存储空间的首地址赋值给Student类型变量s1

 

于是引用类型变量s1和一个具体的对象间建立了联系,我们称s1是对该对象的一个引用。

 

最后,我们总结一下对象的构造及初始化程序:

1. 分配内存空间;
2. 进行属性的默认初始化;
3. (进行属性的显式初始化;)
4. 执行构造方法;
5. 为引用型变量赋值。

分享到:
评论

相关推荐

    62.java引用类型的参数传递.zip

    62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递....

    6.java引用类型.zip

    6.java引用类型

    Java中的基本类型和引用类型变量的区别

    Java 中的基本类型和引用类型变量的区别 Java 中的基本类型和引用类型变量是两个不同的概念,它们在内存分配、变量赋值和函数传递等方面有着本质的区别。 基本类型是 Java 中的八种基本类型,包括 byte、short、...

    Java开发技术大全(500个源代码).

    notInPack.java 用前缀引用包中的类 onlyShow.java 一个简单的接口 Outer_1.java 外部类示例1 Outer_2.java 外部类示例2 Outer_3.java 外部类示例3 Outer_4.java 外部类示例4 Outer_5.java 外部类示例5 ...

    浅析Java引用类型和方法参数传递

    浅析Java引用类型和方法参数传递,浅析Java引用类型和方法参数传递

    14.java学习第十四章——super()关键字+实例变量(含引用数据类型做实例变量)和局部变量的个人总结+基本数据类型和引用数据类型的存放位置.pdf

    14.java学习第十四章——super()关键字+实例变量(含引用数据类型做实例变量)和局部变量的个人总结+基本数据类型和引用数据类型的存放位置.pdf

    Java OOP.mmap

    7. Java中的数据类型 8. Java中的常量 二、变量和运算符 1. 变量和计算机存储单元 2. 数据类型和常量 3. 数据类型转换 4. 运算符 和 优先级 三、引用数据类型、流程控制语句 和 数组 1. 引用数据类型 2. ...

    jna-5.6.0.jar中文文档.zip

    ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件...

    Java 自学宝典 第二章 数据类型

    基本数据类型和引用的缺省值 6 2. 1. 3. 字面量 7 2. 1. 4. 惊讶!让你的Java溢出 7 2. 1. 5. 显示默认初始值 8 2. 2. 布尔 9 2. 2. 1. java.lang.Boolean 9 2. 2. 2. 布尔字面量 10 2. 2. 3. 布尔变量 10 2. 2. 4....

    Java引用类型编程开发技术共13页.pdf.zip

    Java引用类型编程开发技术共13页.pdf.zip

    java核心知识点整理.pdf

    引用计数法............................................................................................................................................... 26 2.4.1.2. 可达性分析..........................

    无法解析类型 java.util.Map$Entry。从必需的 .class 文件间接引用了它

    这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家

    Java虚拟机规范.Java SE 8版.zip

    第2章概述Java虚拟机的整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助;第3章详述如何将Java语言编写的程序转换为Java...

    Java面试宝典V8.0-V001(1).pdf

    2. Java的数据类型:Java中有两种主要的数据类型:基本数据类型和引用数据类型。基本数据类型包括整型、浮点型、字符型、布尔型等,而引用数据类型包括数组、类和接口等。 3. Java的运算符:Java中的运算符包括算术...

    Java虚拟机规范.Java SE 8版

    第2章概述Java虚拟机的整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助;第3章详述如何将Java语言编写的程序转换为Java...

    Java虚拟机规范(Java SE 7)

    2.4 引用类型与值 ................................................... 27 2.5 运行时数据区 ................................................... 27 2.5.1 PC寄存器 ............................................

    java包装类练习.doc

    Java 包装类型的自动装箱拆箱机制是指在(assign)操作时,Java 会自动地将基本类型转换为包装类型,或者将包装类型转换为基本类型。例如,Integer i = 100;这里的 i 就是自动装箱的结果。 5. Java 语句 Integer i=1;...

    JAVA核心知识点整理(有效)

    引用计数法............................................................................................................................................... 26 2.4.1.2. 可达性分析..........................

    值类型和引用类型的区别

    值类型和引用类型的区别: 似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%. 言归正传,咱还是先来探讨探讨这二者...

    JAVA阶段模拟试题

    D带参数方法的参数可以是任意的基本类型数据或引用类型数据 19在Java语言的控制结构中,break语句是经常用到的语句。下面一段代码中break语句起到( )的作用。 (选择一项) int pointer=0; while(pointer){ ...

Global site tag (gtag.js) - Google Analytics