JAVA基础第2.5章 JAVA引用数据类型
(一)Java变量
1.Java中有两种数据类型:基本数据类型和引用数据类型
基本数据类有8种:byte, short, int, long, char, boolean, float, double
引用数据类型主要有:数组(类型)、类(类型)、接口(类型)、包装类型
2.为了存储数据,我们需要内存空间,内存空间的单元被称作变量,内存单元里所储存的数据称作变量的值
注1:内存空间的“单元”:这个单元的大小并非像数轴上的单位长度那样确定,它是灵活变化的
注2:变量这个内存空间指的是栈区的内存空间(规定),所以变量这块内存空间一定在栈区(变量的值存储在变量这块内存空间内)
注3:基本变量的值:非引用的数据(整数/小数/字符/布尔值)
注4:引用变量的值:引用
注5:要区分“引用的值”和“引用所指向的内存空间的数据“这两种数据
3.变量的声明:数据类型名 变量名;
(1)如int a = 1; int 是变量的数据类型;a是变量的名;1是变量的值。
(2)如A a = new A(); A是变量的数据类型;a是变量的名;new A()是在堆区创建了一个没有名字的对象并被分配内存空间并返回所分配内存空间的引用,这个引用指向了这个A类的对象,引用就是变量a的值;我们通过操纵变量a来操作这个A类的对象
(二)基本类型变量的声明和使用
1.基本类型的变量的声明:
(1)JVM会自动根据变量所属的基本类型为变量分配一定大小的内存空间,并且在给变量赋值时JVM会把数据存入变量这块内存空间内
(2)变量名既代表着变量这个内存空间内的数据的值,也代表了这个内存空间的地址;但对于基本数据类型,操纵“变量名”仅仅表示读写基本数据类型的变量的数据。
2.基本类型的变量的值:整数/小数/字符/布尔值
3.基本类型的变量的赋值:在变量这块内存空间内,抹去原有值、填充新赋值
(三)引用类型变量的声明和使用
1.引用类型的变量(又称引用变量)的声明
(1)只给引用变量分配保存引用的内存空间,未给变量分配保存“引用所指对象的内容”的内存空间
(2)数组类型变量的声明:
例int[ ] 数组类型变量的变量名;例double[ ] 数组类型变量的变量名;
例String[ ] 数组类型变量的变量名;例 类名[ ] 数组类型变量的变量名;
(3)类类型变量的声明:
把每一个类都当作是一种独立的数据类型(就像八种基本数据类型一样)来声明的变量,叫做类类型的变量。例People p1;(同理int a;)
(4)包装类型变量的声明:包装类类型名[ ] 包装类型变量的变量名;
2.引用类型的变量的值:
角度1:是“指向某一内存空间”的引用,所指向的内存空间内保存着一个值或一组值
角度2:是对象的“引用”,该引用指向的内存空间内保存的某一对象的内容
3.类类型的变量的赋值:类类型的变量在声明后,必须通过执行“new 类类型名( )”才能在堆区分配用于保存非引用的数据的内存空间。而只有声明并且执行了“new 类类型名( )”后,我们才能对变量所保存的引用所指向的内存空间的数据进行读写。
4. “new 类类型名( )”过程,称为对象的创建过程,又称对象实例化:
(1)new 类名() 如:new People();
(2)对象:大千世界万物皆可作为对象,编程中,对象由一组 属性+方法 构成
①属性:对象具有的各种特征。每个对象的每个属性都拥有特定值
②方法:对象所能执行的操作、所能具有的行为、所能发挥的功能
注1:“对象的属性”用类内方法外的变量来定义,“对象的功能、对象的操作”用方法来定义
注2:一类对象的属性和方法通常被封装到一个类中,属性和方法二者相辅相成,不能分割
(3)对象的内存分配:
①对象是被保存在堆中的,对象中保存的是对象的成员变量。编译器会给对象的成员变量默认值:数据型为0,boolean为false,引用类型为null。
②没有引用类型变量保存对象的引用时,对象会被JVM认为是垃圾、会被垃圾回收机制销毁。
(4)
①由这个过程知:“对象”本没有名字,但为了引用、使用这个对象(如读写这个对象的属性、调用这个对象的方法),所以每一个对象都需要一个名字。
②由于Java语言在设计时提供了“类类型名 类类型变量名= new 类类型名( ) ”的写法,并规定了“new 类类型名( )”的返回值是所创对象的引用,所以我们就不得不用一个类类型的保存引用的变量去接收所创对象的引用、所以我们只能使用对象的引用(即变量名)来间接地使用对象。
③所以默认情况下,我们直接称这个“变量”为所实例化的“对象”、称这个“类类型的变量名”为“对象名”。
(5)用“对象的引用”(即“引用变量的变量名”、即“new 类类型名( )”,也可称作对象名)来访问对象的成员变量与成员方法,都是用“.”运算符
①成员变量与成员方法统称为成员。
②创建对象后直接访问成员,并随之被销毁的对象称为匿名对象。
如:new People().name = "张三";
③创建对象后返回的引用被引用类型变量保存,使用“引用类型变量.成员”读写、调用成员;
如:People p1 = new People(); p1.name = "张三";
(6)例子
- People p1; //在栈区分配一个保存引用的内存空间
- p1 = new People();//这句话是2步,首先在堆区分配一个保存People对象的数据的内存空间,再把该内存空间的引用赋给变量p1
5.值传递与引用传递
(1)引用类型:方法传值时:"引用传递";引用变量间的“=”赋值:"引用传递"
(2)值传递:基本类型的传递都属于值传递。当把Java基本数据类型的变量作为入口参数传给方法时,传入的参数在方法体内变成了局部变量;这个局部变量是输入参数的一个拷贝,所有方法体内部的操作都是针对这个拷贝的操作,方法执行结束后,这个局部变量也就完成了它的使命,它不影响作为输入参数的变量。
6.总结
(1)对象是通过对象的引用变量来访问的,该变量存放的是对该对象的引用,而并非对象本身。
(2)一个类就是一种引用数据类型,该类类型的每一个变量都可以引用该类的一个实例、一个对象。
PS.
注:本文由H同志编写,欢迎批评指正、交流探讨
JAVA基础第2.5章 JAVA引用数据类型相关推荐
- Java基础学习——第六章 面向对象编程(下)
Java基础学习--第六章 面向对象编程(下) 一.关键词:static 1. static关键字的引入 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new ...
- 【重难点】【Java基础 04】值传递和引用传递、序列化和反序列化
[重难点][Java基础 04]值传递和引用传递.序列化和反序列化 文章目录 [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 一.值传递和引用传递 1.对比 二.序列化 1.基本概 ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...
- JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)...
Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中.用户能够通过指定数据类型和标识符来声明变量.其基本的语法为: DataType identifier; 或 Dat ...
- Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...
- Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。...
Java语言程序设计 上机实验2 实验目的: 掌握Java的基本语言成分和流程控制语句. 掌握Java中数组的使用,理解引用数据类型. 掌握String类的使用. 实验内容: 注:标(*)为选做内 ...
- Java 学习笔记:第一章 Java入门
Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...
- Java基础笔记(14)—— Java的基础类型和字节大小
Java基础笔记(14)-- Java的基础类型和字节大小 Java基础笔记(14)-- Java的基础类型和字节大小 Java语言提供了八种基本类型.六种数字类型(四个整数型(默认是int 型),两 ...
- Java基础一到五章复习笔记
目录 第一章 第二章 java语言特点 JDK和JRE 转义字符: 注释: 相对路径和绝对路径 常用dos命令 第三章 变量三要素: 加号+的使用: Java API 基本数据类型转换 强制类型转换 ...
最新文章
- Git的安装和使用(Linux)【转】
- Xamarin XAML语言教程构建ControlTemplate控件模板 (三)
- 类的继承与sizeof
- Paint the Tree CodeForces - 1244D(看似是树,其实是条链)
- linux双显卡配置_Linux系统怎么配置双显卡?
- mybatis学习(22):查询排序
- Linux系统编程20:基础IO之从内核代码深刻理解Linux是如何管理文件及文件描述符的本质是什么
- 【C语言】利用二维数组输出成绩
- 网络管理与维护作业5
- myeclipse2014 mysql连接池_MyEclipse配置数据源连接池
- Cesium:鼠标移动事件判断是否在地球上操作以及获取经纬度
- 开源库uthash第一弹uthash.h
- 京东联盟API-二合一链接转链接口-线报转链-京粉转链接口
- 索尼播放器Android系统,获得最新固件的索尼NW-ZX505,简直脱胎换骨!
- 计算机专业纸质笔记本,无可替代?信息时代你还用纸质笔记本吗
- 主流浏览器有哪些?这些浏览器的内核分别是什么?
- python基础------文件读写操作、re、os和sys模块
- 学习了那么多SEO大神的教程,为什么你的网站还是没有排名呢?
- 微软股价再创新高:投资者看好未来发展
- 联想超融合服务器安装系统,联想AIO超融合产品介绍.pdf
热门文章
- php如何读冻,天寒地冻玻璃碴跪求php解密方法求大神呢
- app依赖module A,module A依赖module B,app直接调用B中工具类失败
- 电脑开不了机,是怎么回事?
- 有什么服务器商支持whmcs对接,使用智简魔方对接whmcs常见报错信息及解决方法...
- canvas实现时钟案例
- WEB——服务器控件
- PureEdgeSim(一)仿真器阅读笔记
- Ubuntu 16.04 联想B470安装Codeblocks
- 海岛奇兵无法连接服务器维护,海岛奇兵无法登陆怎么办 糟糕服务器大吐槽
- Java平常中用到的一些脚本(收集)