培训首页  >  JAVA新闻  >  Java基础语法:解读Java数据内幕
沈阳Java零基础培训班4月火爆招生

Java基础语法:解读Java数据内幕

来源:

沈阳市和平区爱尚职业培训机构

    发表于:2022-05-25 17:07:58   17次浏览
相关标签: JAVA培训   沈阳JAVA培训

学习编程语言早接触的就是数据和数据类型,对初学者来说,数据和数据类型都是比较抽象的概念,不容易理解,一般采用的方式就是先知道怎么用,以后再理解。本篇用深入浅出的方式讲解Java数据及数据类型,读完文章后你将对数据及数据类型有更深入的理解


下图是由统计局公布的2013—2017年国内生产总值及其增长速速的统计图,从图中你可以得到什么结论?

图片

图1 2013-2017年国内生产总值及其增长率

从图中可以看出,国内生产总值从2013年到2017年逐年递增,但增长速度略有下降,从7.8%下降到6.9%。

得出结论的依据就是图中给出的数据,图中的主要数据有国内生产总值、比上年的增长率,辅助数据有直角坐标轴上的数值、图例文字说明、日期、粉红色的矩形。其中,国内生产总值是整数,比上年的增长率是小数,直角坐标轴上的数值为整数,图例文字说明是文本,矩形是图形。

下图是某支付网站晒出的一个支付用户的帐单。从账单中可以看出这个用户总共花了168,342.60元,超过了97.28%的用户,并给出支出趋势统计图和消费分类TOP榜单。

图片

图2 晒出的账单

上图中的消费总额168,342.60元、97.28%、支持趋势统计图、消费分类TOP榜单、文字描述都属于数据。在上图中,消费分类TOP榜单由数码、居家、购物等分类数据构成,这种由多个数据组成的数据集合可以称为复合数据。

从上面的统计图和账单图可以得出一个结论,能够反映和描述客观事物的文本、图形、数值、日期等都属于数据的范畴。

本文分成三个小节。小节让我们从问题中认识数据;第二小讲述数据的存储结构;第三小节讲述数据类型。

小节 从问题中认识数据

从提出一个实际问题到计算机解出需要经过下列步骤:首先从实际问题抽象出数学模型,然后设计一个解此数学模型的算法,编写程序,最后输入数据验证算法,这里输入的数据都是整数或实数,也可以称为数值数据。

然而,更多的问题无法用数学模型加以描述,下面我们来看两个例子。

例1:假设要做一个网上查书的程序,需要在网页上提供查询和展现书的书名、作者、价格、出版社、分类等内容的功能。要把图书内容存入计算机,如何存放?既要考虑查询时间短,又要考虑节省空间。一个简单的办法是建立一张表,每一本书的信息,在表中占一行,如图3所示。此时计算机操作的对象(数据元素)便是一张表,计算机对数据的操作是按照某个特定要求(如给定书名)进行查询,找到表中满足要求的一行信息。由此,从网上书的问题抽象出来的数学模型便是包含图书目录的表和对表进行的查找运算。

图片

图3 图书目录

例2:假设要开发一个绘图程序,要求绘图程序根据存储的企业组织结构信息,以层次结构的方式绘制出来。一般来说,企业各级组织关系都是层次关系,该关系类似一棵树,企业的高层(董事长)为树的根,中层(科室)为树的分叉,科员为树的叶子。如图4所示。由此把绘制企业组织结构的问题变换为树的遍历操作。

图片

图4 企业组织的层次结构

从上面的两个例子可以看出,描述这样一类问题的数学模型不再是数值方程,而是诸如表、树等非数值性的数据及其运算。下面对数据赋以确定的含义。

数据(data)是描述客观事物的数、字符、以及所有能输入到计算机中并被计算机程序处理的符号的集合。它是计算机程序加工的“原料”。例如,一个利用数值分析的方法解代数方程的程序处理的对象只是整数和实数,而一个编译程序或文字处理程序的处理对象是文本。因此,对计算机而言,数据的含义极为广泛,如图形、声音等都属于数据的范畴。

数据元素(data element)是数据的基本单位,即数据这个集合中的一个个体。有时一个数据元素可以若干数据项(data item)组成,数据项是数据的小单位。例如,图3中的每一行(即一本书的信息)为一个数据元素,而其中的每一项为(如书名、作者等)为数据项。

数据对象(data object)是具有相同特性的数据元素的集合,是数据的一个子集。例如,英文字母数据对象是集合

C={A,B,…,Z}

总的来说,数据对象是由数据元素集合组成的,数据元素是由一个或多个数据项组成的。

数据的基本单位是数据元素,那么,数据元素在计算机中是如何存储的呢?不同数据元素采用的存储结构相同吗?

第二小节 数据的存储结构

在算法的数据存储单元——变量一节了解到在计算机上存储信息的小单位是字节。我们可以用一个由若干字节组合起来形成的一字节串来表示一个数据元素,称这个字节串为元素或结点。当数据元素由若干数据项组成时,则字节串对应于每个数据项的子串称作数据域。

例如,在数学运算包含大量的计算表达式,计算程序需要有连续处理计算表达式和计算数据的处理能力,下面是一个简单的四则运算表达式:

15.8+20

计算程序要处理上述表达式,就需要具备存储小数、整数、运算符的存储结构。Java语言提供了存储小数、整数、运算符的基本数据类型。下图是表达式数据类型到Java数据类型的映射图。

图片

图5 表达式数据类型到Java数据类型的映射

为说明问题起见,给出一个简化计算表达式:8.25+30

声明三个变量用来存储运算数和运算符

public   float  floatNum;

public   int   intNum;

public   char  op;

计算程序在计算上述计算表达式时,首先从左到右扫描表达式。假设本次扫描不考虑优先级运算,只是完成提取运算数和运算符的功能。扫描过程如下:如果是运算数,判断是整型还是小数,整型赋值给intNum,如果是小数赋值给floatNum,如果是运算符赋值给op。下图是扫描完成后,变量在内存储器的存储情况。

图片

图6  不同数据类型的变量在存储器的存储情况

从上图可以看出,不同数据的变量在存储器占用的空间也不相同。数据为字符型的变量在存储器占用2个字节的空间,数据为整型的变量在存储器占用4个字节的空间,数据为浮点型的变量在存储器也占用4个字节的空间。因此,不同的数据占用不同的存储空间。

上面介绍的存储结构是顺序存储结构,数据存储在连续的存储区域。另外一种存储结构是链式存储结构,该存储结构不要求逻辑上相邻的数据结点在物理位置上相邻,结点间的逻辑关系由附加的引用字段表示,一个结点的引用字段往往指导下一个结点的存放位置。如图7所示。

图片

图7 链式存储结构

Java在分配变量存储空间时,需要辨别数据的类别,根据数据的类别分配相应的存储空间。如果是字符数据就分配2个字节的空间,若是整数就分配4个字节的空间,以此类推。那么问题就来了,Java语言是如何辨别数据类别的呢?前面算法的数据存储单元——变量一节中给出了声明变量的语法,语法规则要求在声明的变量名之前要加上数据类型,数据类型决定了数据的存储空间。

第三小节 认识数据类型

数据类型给出了数据所需存储空间大小以及数据所表示的精度、特性及范围。例如,在Java语言中,int类型的数据占用4个字节的存储空间,可表示的小数值为-2147483648,大数值为2147483647。再如,byte类型占用1个字节的存储空间,可表示的小数值为-128,大数值为127。

按照数据存储结构的不同,Java数据类型分为基本数据类型和引用数据类型两大类。基本数据类型采用顺序结构存储,引用数据类型采用链式存储结构。

基本数据类型

基本数据类型又包括数值类型、字符型和布尔类型。如下图所示。

图片

图8  java基本数据类型

(1)数值型

数值型即数值数据,用于表示数量,并可以进行数值运算。数值型数据由整数和小数组成,分别对应整数类型和浮点类型。数值型数据类型说明如下。

图片

图9  数值型

上图中的byte、short、int、long类型比较容易理解。下面重点对浮点类型float和double进行补充说明。

Java的浮点类型有两种不同的表示形式:十进制数和科学计数法。十进制数形式,由数字和小数点组成,且必须有小数点,如0.123、12.85、26.98等;科学计数法形式,如:2.1E5、3.7e-2等。其中e或E之前必须有数字,且e或E后面的指数必须为整数。

科学计数法一种简化计数的方法,对于位数较小的数值,科学计数法没有什么优势,但对于位数较多的数值其计数方法的优势就非常明显了。例如:光的速度是300,000,000米/秒,全世界人口数大约是6,100,000,000。类似光的速度和世界人口数这样大数值的数,读、写都很不方便,仔细观察上面的两个数值,光的速度可以写成3*108米/秒,全世界人口数可以写成6.1*109。这种计数方法就是科学计数法,用Java语言科学计数法表示光速是3E8,世界人口数大约是6.1E9。

浮点类型有float和double两种,分别代表单精度和双精度的数值。精度是指描述一个数值的准确程度,在数学运算中,经常会用到近似数,近似数与原数值非常相近,但又不完全符合原数值,只能说在某种程度上近似。精度与近似数相似,也是用一个与原数值非常相近的数代替原来的数值。

前面说过存储一个数值所用的字节越多,其精度越高,数值范围也越大。由此看来,精度与存储字节数密切相关,float类型的存储空间是4个字节,其表示的值范围约为1.4E-45到3.4028235E38,double类型的存储空间是8个字节,其表示的值范围约为4.9E-324到1.7976931348623157E308,float存储数值的精度和范围要小于double存储数值的精度和范围。因此,float是单精度数值,double是双精度数值。

图片

图10 浮点型变量占用的存储空间

(2)字符型

计算机除了处理数值数据,还要处理字符数据。Java语言提供了一种char数据类型,用于字符数据。char类型占2个字节的存储空间,该类型即可以存储英文字符,也可以存储单个汉字。

char型变量只能存储单个英文和中文字符,即可以把字符直接赋值给char型变量,也可以直接把字符所在字符集的编码赋值给char型变量,Java输出char型变量时,输出到显示设备(如电脑屏幕)的是字符本身。

(3)布尔型

布尔类型是表示逻辑状态的类型,在详解Java表达式与运算符一文中谈到关系运算符和逻辑运算符运算返回的结果是布尔值,这个布尔值就是布尔型。java语言通过关键字boolean来定义布尔型变量,只有true和false两个值,分别代表布尔逻辑中的“真”和“”。Java语言虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替。

boolean变量编译后被转换为int变量,占用4个字节的存储空间,true被转换为1赋值给int变量,false被转换为0赋值给int变量。因此,程序需要判断数值的真或时,即可以用boolean类型变量,也可以用int类型的变量,当然也可以用byte类型的变量。

文中图片素材来源网络,如有侵权请联系删除

  • Adobe认证
  • Oracle认证
  • 思科认证
  • 微软认证
  • Linux认证
  • 其他
  • 职业技能提升
  • 考证找工作
  • 兴趣爱好
  • 周末班
  • 全日制白班
  • 随到随学

热门课程

  • 沈阳Java培训4月火爆招生在线直播课程

    询价

  • 沈阳Java零基础5-10人就业班

    询价

  • 沈阳java架构课程零基础培训班

    询价

  • 沈阳java零基础就业班

    询价

  • java编程就业培训班

    询价