java零基础入门-核心语法篇(四) 数据类型,变量与常量
从本章开始,我们要开始最激动人心的学习啦,敲代码,没有准备好的同学快去看以前的教程(老规矩 从HelloWorld开始吧),把环境搭好,老司机要开车咯~滴~滴滴~
说变量之前,我们先来看看刀...有同学肯定会问,整这些没关系的干啥,快上干货!别急别急,请听我慢慢道来。
作为一个吃货,我深深的了解到 做菜 与 做料理 之间的区别,做菜就是做的能吃,好吃就够了,仅仅为了解决饥饿的问题而存在。而料理却有所不同,他是一种带有匠人精神的做菜,想要做出高级的料理,工具必不可少。比如我心心念念,至今没有吃过的河豚刺身,切出来的效果就是晶莹剔透,薄如蝉翼,所以必须用专门的刀具去处理。还有专门切三文鱼的,专门切肉的,各种刀都有自己独特的使用场景。
除了做菜的刀,我们来看看下面这种工具刀。
工具刀功能强大,他可以适应我们的各种需求,如果我需要制作一个手工艺品,可能一把这样的工具刀就搞定了,非常的方便。
其实我们的编程思想,和现实中很多事物都很像,他们在设计上,都有共通的地方。所以从现在开始,同学们要锻炼自己的思维能力,这个对你后面接受编程的思维大有裨益。
数据类型
1.强类型和弱类型
2.占用空间
强类型和弱类型
JAVA就是强类型语言,一个有强迫症的患者,切三文鱼必须用三文鱼的刀,切河豚就必须用河豚刀,换过来用直接报错。这就是强类型语言。弱类型语言就像工具刀,啥都可以干,不管是切东西,还是锯东西样样在行,我不关心变量类型,告诉我你要定义变量就够了。这样解释各位清楚吗?看看我们上面刀的分类,再看看数据类型的分类,是不是有点像?不同的数据用不同的数据类型来处理。(其实在最新的JAVA 10中,我们看到JAVA已经将他的强迫症改掉了,可以用弱类型了,这个有兴趣可以去看看)
占用空间
我们小学的时候,老师就教过,1+1=2,后来慢慢的又学习了小数,比如买菜的时候,会有3.2元,4.5元的情况,但是我们从来没有考虑过数字的类型。那么我们写代码为啥要整个数据类型出来呢。这个就跟内存空间有关了。内存是啥?不知道的赶紧去复习(想入行软件 你必须先了解这些硬件)。因为有的数据存起来,需要大一点的空间,有的只需要很小的空间,计算机是个傻子,你不告诉它你要多大的空间,他不会存,甚至乱存。所以我们必须告诉他,这个数据,你给我用X个空间存起来!我在每个类型后面都有标注,他们占多大的空间。
啥?听不懂?看上面这个图,指头大的东西给了这个大个箱子装,不是浪费么?内存也一样,内存空间是有限,必须节约使用,如果所有的类型都一样大,你还没装多少东西,内存就满了。
肯定有同学问了,字节是个啥玩意?内存的空间现在都是按照G来算,那字节和G是个啥关系?看一下换算关系。
1 Byte = 8 Bits 翻译=> 1 字节 = 8 位
1 KB = 1024 Bytes 1 KB = 1024 字节
1 MB = 1024 KB 1 兆 = 1024 KB
1 GB = 1024 MB 1 G = 1024 兆
我们来看看上面的整数类型,整数类型分为了4种,byte,short,int,long
整数也分了4种?为啥?我们看看他们的取值范围就知道了
我们看到每种类型可以使用的取值范围是不一样的,byte占8位,所以他的取值范围最小,long占64位,他的取值范围最大,空间越大装的数据就越大,假设我们只有一种类型,我们存数据都要使用空间最大的类型,就会浪费内存空间。下面我们来看代码。
我这里设置的值全部是大于范围上限,同学们可以自己照着写一遍,然后把值改成超出取值下限,看看是不是会报错。眼神好的同学可能发现最后一行,long d = 8999999999999999999L;为什么后面有一个L?因为不写L,会把这个数当成int,这样就会报错,超出取值范围,加一个L,告诉他我这个是long类型,我给了64位空间了,就不会报错了。
下面来说说各种类型的使用场景。
byte:一般用于处理IO流用的比较多,这个后面会有详细讲述。
short:其实这个在实际应用中,用的比较少,知道即可。
int:使用最多的类型,因为我们常规生活中,接触的到的数字都不会超过它的范围。比如我们计算一个商品的库存量,一辆车上的人数等,这个使用int完全没有问题。但是有些数据,我们一定要想清楚场景,因为int的上限是20亿,有些数据是完全可以超过他的,如果用int类型就会产生错误,比如说淘宝几年来的订单数量,超过20亿很轻松,再就是一个服务器集群的日志数量,每天上十亿都有可能,存几个月就千亿了,用int计算数量,觉对完蛋。所以我们就需要用long来计算。
long:用于计算超出常规的数据量,比如我们上面说的淘宝订单数量,日志数量等。
我们继续看浮点类型
浮点型就是我们常说的小数,就是带有小数点的数,如果不带小数点,傻子计算机会认为是整数类型。再就是一个精度问题,精度就是可以表示小数点后多少位,double 的精度要比 float 的高,具体我们往下看。
啊!!!这个取值范围是什么鬼,这个是科学记数法,看不懂没关系,我们看下面的例子就知道了。
我们如果处理2,3位小数使用float没有问题,但是如果需要精确到5,6位甚至更多,请使用double类型。
在我们的日常工作中,大多情况是会规定保留2位小数的,比如处理与钱有关的业务,所以会有一套专门的方法来处理,这里只需要了解2种浮点类型的特征即可。
字符类型
每个国家都有不同的语言和不同的符号,都可以使用unicode编码来表示,每个符号都有对应的编码。(了解即可)
char: 占16位 空间,用单引号表示。
字符类型了解即可,实际运用不多。
布尔类型 boolean
布尔类型很简单,只有true 和 false 两种取值,但是他的作用是非常大的,我们后面会经常与他打交道的。
变量和常量
变量
其实我们上面已经使用了很多变量了,因为没有变量,我一句代码都写不出来...变量是非常重要的知识点,我们来看看
其实我开始的时候犯了一个很大的错误,就是使用a,b,c来作为变量名称,这是绝对不允许的,请使用有意义的名字。再就是驼峰命名,如果你的变量使用多个单词组成,第一个单词第一个字母请小写,后面每一个单词开头请大写,这样方便阅读。我们来比较下,floatTest1 和 floattest1 有没有觉得驼峰命名可以很快的一眼就认出单词,而后一种需要花时间去看,降低编码效率。
再来体验下 filterRegistrationBean 如果不用驼峰 filterregistrationbean 是不是感觉要瞎了,实际工作中比这长的命名比比皆是,养成好的习惯很重要。
变量值不能重复,我在变量最后面写了 1,2,3这样的数字,就是为了防止重复的变量名称。
java中的关键字不可以用来命名变量,比如 int int = 5 int是关键字,只能用于标识变量类型 ,不能用来作为变量名称。
上面的图就是我们声明变量的方法,首先确定类型,然后起名字,最后通过 = 号来给变量一个值。
常量
变量是可以变的,我可以将任何类型允许的值赋值给变量。常量就是不变的,不可随意更改的。
比如我们的系统要使用年,月,日这样的概念,我们可以将他们定义为常量
我们用 final 来修饰常量,因为我们的系统可能会很复杂,我们需要定义一些不可变的量,但是万一不小心将常量改了,会导致严重的问题。比如 你发工资发13个月?每周上班8天?能忍么?
本文出现的代码,请照着多敲几遍,然后改一下上下限,精度等,体会一下取值范围的作用,对的改错,错的改对,了解为什么错,为什么对,这样你才能进步。
学习代码一定要动手!一定要动手!一定要动手!不动手就是没学,切记。