- Android移动应用开发实用教程
- 夏辉
- 3699字
- 2025-02-23 16:00:37
3.2 Java基础知识
Java数据类型可以分为基本数据类型和引用数据类型,如基本数据、数组和类等类型,任何Java的常量、变量和表达式都属于它们其中的一种。本节Java基础知识主要介绍Java语言的基本数据类型、基本数据类型的转化和流程控制语句。
3.2.1 Java数据类型
Java的数据类型分为两大类:基本数据类型和引用数据类型,如图3-2所示。基本数据类型在被创建时,在栈上给其划分出一块内存,将其数值直接存储在栈上;引用类型数据在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体内容存在堆内存中,然后由栈上面的引用指向堆中的对象地址。
图3-2 Java数据类型
Java中主要有8种基本数据类型,分别为byte、short、int、long、char、boolean、float和double,具体介绍如下。
1.数值类型
byte型(字节型)数据在内存中占用1个字节(8位),表示的存储数据范围为-27~27-1;short型(短整型)数据在内存中占用2个字节(16位),表示范围为-215215-1;int型(整型)数据在内存中占用4个字节(32位),表示范围为-231231-1;long型(长整型)数据在内存中占用8个字节(64位);float型数据在内存中占用4个字节(32位);double型数据在内存中占用8个字节(64位)。
2.非数值类型
char型(字符型)数据在内存中占用2个字节。char类型数据的字符,每个字符占2个字节,Java字符采用Unicode编码,字符的存储范围为065535。char类型还可以使用八进制和十六进制表示,八进制表示形式为\nnn,其中n为八进制的数字;十六进制表示格式为\uxxxx,x表示十六进制数字,十六进制表示范围是\u0000\uFFFF。在定义字符型的数据时要注意加单引号,比如′1′表示字符′1′而不是数值1。boolean类型的数据值只有true或false,适用于逻辑计算。
【例3-1】本例的主要代码如下。
运行结果如图3-3所示。
图3-3 运行结果
【代码说明】
●第03行的byte类型超出了存储范围。
●第04、05行代码声明了一个字符类型数据,并且以int类型打印输出值为98。
●第06、07行代码是分别使用十六进制和八进制数表示字符′b′。
●第09行编译错误说明:浮点型默认为double数据类型,如果要表示long型数据或
float型数据,要在相应的数值后面加上l或f,否则会出现编译问题。
3.2.2 基本数据类型转换
Java的基本数据类型的变量的内存分配、表示方式和取值范围各不相同,这就要求在不同数据类型之间赋值及运算时要进行数据类型转换,以保证数据类型的一致性。但是boole-an类型变量取值只有true和false,不能是其他值,所以基本类型数据转换包括了byte、short、int、long、float、double和char类型。基本数据类型转换可以分为自动转换和强制转换两种。
1.自动转换
不需要用户提前声明,一般从级别低的类型向级别高的类型转换。Java基本数据类型的数据级别高低如图3-4所示。
图3-4 Java数据类型级别由低到高示意图
2.强制转换
强制类型转换则需要在代码中声明,转换顺序不受限制,它需要在转型的数据前面添加一个括号。特别需要注意的是,有的数据经过强制类型转换后精度会丢失,如【例3-2】所示。
【例3-2】本例的主要代码如下。
运行结果如图3-5所示。
图3-5 运行结果
【代码说明】
●第04、06、07行是数据类型自动转换,都是由级别低的转向级别高的数据。
●第0810行代码是数据类型强制转换,都是由级别高的向级别低的转换。
●第08、09行代码强制转换时有数据精度丢失,32.85为double类型强制转换为int类型变为32,损失了精度0.85,第09行也是丢失了小数点后面的小数。
●第10行,由于129超出了byte类型的范围,如果不强制转换将会出现编译错误,转换成byte类型变为-127。
3.2.3 流程控制语句
编程语言都是使用控制语句来执行程序的过程,进行程序状态的改变。Java主要的控制语句有3种:选择语句、循环语句和跳转语句。本章将对这3种语句的各种形式进行详细的介绍。
1.选择语句
选择结构是指根据程序运行时产生的结果或者用户的输入条件执行相应的代码。在Java中有两种选择语句可以使用:if和switch。使用它们可以根据条件来选择接下来要做什么。
(1)if语句
if语句的语法格式如下。
if-else语句的执行流程是:当if后面的逻辑表达式的值为true时,执行语句1,然后顺序执行if-else后面的语句;否则,执行语句2,然后执行if-else后面的语句。
Java的条件语句可以嵌套使用,有一个原则是else语句总是和其最近的if语句相搭配,当然前提是这两部分必须在一个块中。当条件有多个运行结果时,可以使用if-else阶梯的形式来进行多个条件选择,如if-else-if-else-。
当有多个条件进行判断时,可采用if-else if语句,如【例3-3】所示。
【例3-3】本例的主要代码如下。
运行结果如图3-6所示。
图3-6 运行结果
(2)swich语句
如果采用if-else阶梯的形式来进行多路分支语句处理,就不免太过于复杂烦琐。Java中还提供了一种比较简单的形式,就是使用switch语句来进行处理。switch表达式必须是byte、short、int或者char类型,在case后边的value值必须是跟表达式类型一致或者是可以兼容的类型,不能出现重复的value值。
switch语句的语法格式如下。
switch语句中case的哪个常量和switch后面参数中的表达式相匹配,则执行哪个case后面的语句组,如果表达式不能和case后面的任何常量相匹配,则执行default后面的语句组。
switch语句和多条件判断选择的流程语句(if-else if-else if)相比要简单,如【例3-4】所示,将【例3-3】改为使用switch方式。
【例3-4】本例的主要代码如下。
运行结果与【例3-3】一样,如图3-6所示。
【代码说明】
●switch括号内的整型表达式可以是byte、char、short或int类型,不能是其他数值类型,如float、double或long类型。
●case后面可以有break,也可以没有break。如果有break,则执行到某个case符合条件则跳出switch语句,否则,执行下一个case语句,直到遇到break或者switch语句结束。
●case后只能跟常量表达式。
●default语句为可选项,当表达式不能与case后面的任何一个常量相匹配时,则执行default后面的语句。
2.循环语句
程序语言中的循环语句是重复去执行一组语句,在遇到让循环终止的条件前,它需要一次或多次重复执行。Java中的常用循环形式有3种,分别为for、while和do-while循环。
(1)while循环语句
while循环语句的语法格式如下。
循环语句中如果条件表达式为true,就会一直执行循环语句的内容,直到条件的值为假,然后执行后续语句。while循环中的条件可以是布尔类型的值、变量和表达式,也可以是一个结果为布尔类型值的方法。
【例3-5】求1100之间的偶数和。
运行结果如图3-7所示。
图3-7 运行结果
(2)do-while循环
do-while循环语句的语法格式如下。
do-while循环语句和while循环语句非常相似,唯一的不同点是,while循环先判断条件再执行循环体,而do-while循环语句则先执行一次循环体,然后再进行判断循环的条件表达式,如果条件表达式的值为true,则执行下一次循环,否则跳出循环。【例3-6】为将【例3-5】改用do-while循环语句执行。
【例3-6】改用do-while循环的主要代码如下。
运行结果与【例3-5】一样,如图3-7所示。
(3)for循环
for循环语句的语法格式如下。
for循环在执行第一次循环时会先执行循环的初始化,并通过初始化来设置控制循环变量的值。接下来就需要计算条件表达式,如果表达式的值为真,则会执行循环语句,然后执行迭代运算;如果表达式的值为假,则会终止程序并跳出循环。一般情况下迭代运算是一个表达式,可以增加或者减少循环控制变量的值,最后通过判断是否满足条件表达式来决定是否再次执行循环语句。【例3-7】为将【例3-5】改用for循环语句执行:
【例3-7】改为for循环的主要代码如下。
运行结果与【例3-5】一样,如图3-7所示。
3.跳转语句
(1)break语句
break语句是中断程序流程,其主要存在于循环语句中,用于终止当前所在循环并跳出,跳出当前循环后,程序会继续从循环后的下一条语句开始执行。break语句在前面所介绍的switch语句中已经涉及了break的用法。
【例3-8】求100200之间的质数。
运行结果如图3-8所示。
图3-8 运行结果
【代码说明】
●第0714行代码利用循环遍历,用100200之间的数和2到该数字本身进行取余运算,如果余数为零,则不是质数,否则是质数。
●第12行代码的break是跳出里面的for循环,因为这个i不符合质数的规定,因此要进行下一个i数值的遍历。
●变量k是控制输出格式为:每次输出5个数,另起一行。
(2)continue语句
continue语句不需要跳出当前循环,只是要停止本次循环,并且执行当前循环中剩余的其他语句,即执行当前循环的下一次循环。continue还有一种用法,例如continue后面加一个标签,表示结束本次循环后,要跳到标签所在层的下一次循环。【例3-9】为将【例3-8】改为使用continue语句的形式。
【例3-9】使用continue语句的主要代码如下。
运行结果与【例3-8】一样,如图3-8所示。
continue和一个标签配合使用的格式为:continue lable。这样使得跳转语句更加灵活,编程人员可以任意跳转到自己想要的跳转循环体,只要在该循环体前面增加一个“label:”。
(3)return语句
return语句是跳转语句,可以从当前的方法中退出,并返回调用方法的地方。可以使用return返回一种数据,例如布尔类型、整型等,表示该方法返回一个值。return只能使用在方法中,下面分别使用有返回值和无返回值两种形式说明return的用法,如【例3-10】所示。
【例3-10】使用return语句的主要代码如下。
运行结果如图3-9所示。
图3-9 运行结果
【代码说明】
●test1()方法中的返回值类型为空,当执行到return语句时,程序就会返回到调用该方法的main()方法中,继续调用test2()方法。
●test2()方法中的返回值不为空,return可以返回基本数据类型,甚至可以返回对象。
本节的主要内容是介绍Java的各种流程控制语句,流程控制语句是程序语言的灵魂,灵活地使用流程控制语句可以使程序清晰地按照要求来执行。所以,读者需要好好体会各种语句的使用,这是编程的重要基础。如果读者有编程语言的基础,那么本节内容学习起来会很轻松,因为Java的流程控制语句是很清晰的。