其实这里有一部分内容我已经在上一章节里面以前给兄弟们剧透了,但是我们为了知识的连贯性还是再次简单说一下吧!
兄弟们想一想,无论我们是在用什么语言书写,是不是总是要定义这个,再用那个的?再复杂的程序都不可能平地而起,之前我们在学习C语言的时候就说过了,数据类型+变量名
这就是定义一个变量的基本模式了,那么对于我们的Java同样需要从这个最基础的地方开始学习!
字面常量
虽然我们这一章的标题是数据类型与变量 ,但是在我们学会走路之前,还是要老老实实在地上爬上那么几个月!
话说回来,现在如果我考较一下兄弟们什么是变量,大家应该都或多或少能说出一些东西,但是如果我问大家什么是常量,大家是不是估计要傻眼半天?
其实常量很简单的!
100,100.1,'a',“ac”……这些大家熟悉的不能再熟悉的就是我们说的常量!
常量就是在有了初值之后不可以再被修改的量:
看到没这一行代码敲下来就是编译器都不给你放行!
具体的常量类型,兄弟们不妨等到我们讲完数据类型再自行推理!
数据类型
在Java中的数据类型主要有两种:基本数据类型和引用数据类型。
基本数据类型
基本数据类型有四类八种:
那在这里我就挑一些比较重要的和兄弟们说一说。
数据类型的跨度的确定
在Java中并不存在所谓的longlong数据类型,就实际的应用场景来说,我们的long就已经足够支持我们的使用需求了!现在来说一下数据类型的描述范围:我们可以看到每一个数据类型都会占用对应的内存,那么在Java中并没有有符号整型无符号整型一说,我们统统是使用二进制的第一位作为符号位,1开头就是负数,0开头才是正数。那么还是老规矩,一个字节等于八个比特位,那么一个比特位可以有0或者1两种表示情况,我们就假设此时是一个int类型,四字节就是三十二个比特位,除去第一位符号位,我们总共可以表达的数据的跨度应该就是2^31次方,那么我们int类型能够表示的范围应该就是 -2 ^30~2 ^ 30-1,为什么会减一呢?因为正数负数之间是不是还有一个零?那么阿涛在这里给兄弟们画了一张图,方便兄弟们去理解:
如果兄弟们实在不能理解二进制形式的原理,那么不妨这样子想:我们-1的二进制来说应该是全1的,此时我们再偷偷给它加上个1,是不是每一位都要变成零,而且我们甚至于还会多出来一位?但是我们只有三十二个坑位,所以只能对不起三十三号位置的兄弟了!现在是不是变成了0?
大致就是这么一个思想。
Java中也可以打汉字?
是的没错!
在C语言里面似乎是不支持我们书写我们伟大的汉字的?那是因为C语言中的ASCII码并不完善,竟然还没有把我们的汉字给录进去!但是我们Java使用的是Unicode,它的功能更加广泛,也正因如此,在Java中我们的字符类型变成了两个字节!
Boole是个啥?
相信经过一段时间C语言的学习,兄弟们已经形成了0为假,非0为真 的良好记忆。但是至少在学习我们的Java的时候,请兄弟们克制一下自己的天性,尊重一下我们的祖师爷高斯林老爷子!
看到没,高老爷子跨过几个大洲来警告你!!!
那么兄弟们记住了,以后只要是之前我们需要表示判断的,表示真的不再是1,而变成了true,表示假的不再是0,而变成了false !我们的Boolea类型就只有这俩个值,就是非此即彼的关系了,就是这么霸道!!兄弟们不妨再记住一点,以后只要是==啊,>啊这种比较的式子,其本质上就是一个Boolea值!
变量
好了,终于到了变量了,在这之前,我在给兄弟们唠叨一下:数据类型+变量名
,关于变量,我们就是这么一个使用的形式,且记好了!
使用之前初始化
对于Java我的一个直观的感受就是这是一个安全性极强的语言,只要你稍微犯一点点错误,他基本上都是直接报错的,而不是简简单单给个警告这件事情就算完了!
就比如我们这一小点说的:
看到没,他甚至不会有一点点犹豫,直接就会醒目地刺激你!不要试图以为Java会帮你进行初始化!!
如果我只讲到刚才的那个层次,兄弟们就可以开喷了!其实Java是会帮我们的变量进行初始化的,Java只会帮我们的成员变量进行初始化,对于我们的局部变量,它向来是爱答不理,全靠我们程序猿自己把玩!
关于成员变量我们先不着急全部讲完,在这里点一下:放在类的内部,方法的外部的就叫做成员变量;放在方法内部的就是局部变量,我们这里为什么说a是局部变量呢?因为我们的main方法也是方法呀!怎么不能说是局部变量呢?
1/2==0?
如果你不是一个程序员,你根本就不会懂为什么1/2不是0.5而是0,但只要你是一个程序员,你不可能不懂这个!我们这里1和2都是整数,进行运算下来的结果自然也是整数喽!除非你以这个形式进行运算:1.0/2或者1/2.0
,也就是说我们至少要有一个运算数是小数,我们的结果才会是我们所期待的那个!
Java的严谨性
为什么说Java是一个很看重安全的语言呢?举几个例子吧:
看看看!
1.1不是小数?1111111不是整数?
我们作为人有的时候真的是很感性,我们总是习惯性忽略掉某人的缺陷,就像忽略掉自己写的bug……
1.1编译器默认是double类型;111111111超过了byte能表示的范围。
那肯定此时就会有不少大兄弟举手了:
兄弟们这么一个截图发下来我就大概能猜到兄弟们的问题。
虽然2+5是7并没有超过我们的byte的范围,但是此时我们是m+n啊!相加还是整型!!
对于q=2+5
,我们常量的计算在编译期间就已经完成了,也就是说,在编译期间就已经是7了!
对于这张图提出了几点建议,兄弟们不妨自行理解下,我只挑重点讲:
在我们需要把小字节类型转换为大字节类型时,我们可以选择通过强制类型转换,如果强制过后发现小类型不足以容纳我们的数据,那丢失数据的责任自然就落在了你的头上!也就是说,我们可以在同一类数据类型中直接把一个小的数据类型赋值给一个大的数据类型!
但是世事无常,总是有许许多多的例外:就比如这个刺头boolean,无论你怎么努力想要强转它,它都不买你的帐,因为Boolean和别的数据类型就像是两条平行线,根本碰不到一起,更不会擦出什么火花……
整型提升
最后再说一点:对于不满足四个字节的数据类型,编译器会直接把他提升至四个字节,如果是一个小的数据类型和大的数据类型同台竞技,编译器也会自动先把小的提升为大的,具体的原理我在C语言中是由详细讲解的,兄弟们不妨移步一下,进行食用!
好的兄弟们,我发现了一个问题,如果单纯是讲解一些基础知识的博客无论是对于观众还是对于我本身,似乎都不会有什么很好的提升,那么从下一篇博客开始,我将会把重点转移到自己对于一些知识的理解上面,那么对于那些基础的知识可能就没有办法系统的陪兄弟们复习了……很抱歉……
还是那句话,希望我的这篇博客或多或少对兄弟们有所帮助!
百年大道,你我共勉!