漫谈之基本类型和流程控制
漫谈之基本类型和流程控制
王夫子-大猿软件 发表于6个月前
漫谈之基本类型和流程控制
  • 发表于 6个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

天我们聊一下Java里面的基本类型和控制流程语句。如果说现实世界中的物质是由原子分子构成的,那么在Java里面就是由基本类型来构成的,当然还有引用类型。既然叫做基本类型,那必然是Java里面最常用的类型,基本类型可分为整型、字符型、浮点型和布尔型。这四种基本类型分别由byte、short、int、long、char、float、double和boolean组成的。这八种类型表示了整数、负数、小数、字符和真假。

 

我们知道Java是一种强类型语言,在编译阶段就要确定变量的类型,所以在我们声明类型的时候,要么使用基本类型来表示,要么使用引用类型来表示。另外,这几种类型中,除了布尔类型不可以相互转换外,其他的类型之间都是可以互相转换的,比如,short和int、int和char、char和int等,在转换的过程中,一定要注意范围,因为,基本类型都是有范围的,比如byte它所表示的范围就是[-128, 127]之间,如果要把333数值赋给byte变量,那么在编译的时候就会出错,编译器会告诉我们这样转换会有精度损失,除非我们使用强制转换才能正常编译通过,代码如下:

 

byte a = (byte)300;

 

虽然,这样可以正常编译了,但是得到的结果确变了,不再是333,而是77,这是因为byte只能表示[-128, 127]之间的数字,333超出了表示范围,我们知道int是32位的,byte是8位的,所以,只能将码值截取后8位,然后进行取补码获得转换之后的值就是77。这是我们需要注意的地方,向下转型是危险的,有精度损失的。如果是向上转型,比如,int转换成long,就没有任何的问题,也不存在精度问题,因为long表示的范围远大于int所表示的范围。

 

我们再谈一下浮点型,浮点型有float和double两种,其中float是单精度的,double是双精度的,所以double的精确度更高,Java里面默认的小数就是double类型的。其中我们要注意的是,虽然float只有32位,long类型有64位,但是float表示的范围要比long的范围要大,这是什么情况?要回答这个问题,我们需要看一下浮点型在Java内部是如何表示的,浮点型的表示方法分为三部分,第一位是符号位,后面8位是指数域,最后23位是小数部分,它和整型表示的方式不同,所以范围也就有了差别,小数是一个无穷的,比如[5, 6]之间的小数就是无数个,所以这也是为什么浮点型的表示方法和整型不同的原因。

 

字符型char,它的内部就是Unicode编码,表示的范围是[0, 65535],字符型我们主要关心的是乱码问题,经常在开发中,会有乱码的出现,往往我们就只能乱改,蒙对了就完事了,下次开发还会有同样的问题。所以,我们要了解乱码的本质,其实在Java里所有的编码都是Unicode的方式,我们要编译一个Java源文件,就要先根据本地操作系统的编码方式将其转成Unicode的编码,比如操作系统是GBK的编码,那么Java就会根据GBK编码读取Java源文件,然后将其转换成Unicode编码,所以,如果你的源文件是UTF-8的编码,这个时候,就会出现乱码,用GBK读取UTF-8的文件,肯定会有乱码,这也是导致乱码的根本原因,所以,我们要准守一个规则,读写文件时一定要按照统一的编码进行,否则就极有可能出现乱码的情况。

 

布尔型最简单,就是true和false两个值,要说布尔型,必须要和我们的控制流程语句结合着说,控制流程语句分为分支和循环,它们两个可以混合着使用。分支语句有if、if...else...、switch...case...,循环有for、while、do...while...三种。

 

先看下if分支语句,它的条件就是Boolean型的,如果是true则执行if里面的代码块,反之,则跳过if语句,执行下面的代码。还有switch语句,它接收的不是Boolean型,switch可以接收很多种类型,除了基本类型外,String和枚举也都可以作为判断依据,另外,在使用switch语句的时候,我们要注意穿透问题,如果在case里没有写return或者break语句,程序会一直执行下去,这就会造成不必要的bug,所以在写switch语句的时候要当心,另外,不要忘记写上default,如果都没有匹配上,就会执行default的语句。

 

我们再看看循环语句for,for循环是经常使用的循环语句,可以使用:

for(表达式一;表达式二;表达式三)

 

其中,表达式一可以写上任意的语句,而且只会执行一次;表达式二主要是用作退出表达式的条件语句,它是作为每次循环最先开始执行的语句;表达式三每次循环结束后,都会执行。当然,我们也可以什么都不写,比如for(;;),这样写就会无限循环执行下去,除非遇到return语句或者程序抛出异常了。

至于嵌套循环,实际开发当中很少碰到,顶多有两层嵌套循环,比如打印输出9*9乘法表,就能使用两层嵌套循环来完成,如果嵌套多了就会影响程序的性能,比建议使用多层嵌套循环,想办法避免这样的代码。

 

循环里面比较重要的是如何跳出循环,尽量避免死循环,这样会浪费CPU的效率,很容易使CPU达到100%的状态,严重影响机器的性能,所以,合理使用break、continue和return是很重要的,另外,在嵌套循环的过程中,break和continue只能在当前循环体里起到作用,对外层是不起作用的,我们可以使用标示作用在外层循环体,我们在内部循环体里可以使用break 标示或者continue标示都可以作用到外层循环里,这个知识点是我们需要注意的,当然在开发中很少使用了。不管有基层嵌套循环,是要使用了return,都会结束循环,并且逃出方法体。

 

最后我们再看一下运算符,说到运算符,我想很多人都会想到运算的优先级问题,其实,这个根本不是事儿,解决优先级最好方式就是使用"()",当你拿不准哪个优先级的时候,就使用括号吧,当然,在开发中不可能写很变态的运算表达式,很容易出问题的。运算符除了加减乘除外,还有逻辑运算与或非等,还有三目运算,例如:

 

表达式一 ? 表达式二 : 表达式三

 

其中表达式一的结果是布尔型的,如果是真,则执行表达式二,反之,执行表达式三,就是这么简单。

 

以上,就是今天跟大家聊的话题,内容都是很基础的,没事的时候多看看,夫子教导我们温故可以知新,这就是进步。

标签: Java
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 15
码字总数 7273
×
王夫子-大猿软件
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: