教她写代码的那些日子 3 java语言基础

她似乎是真的下定决心学习写程序了,自从买了书以后,几乎每天有空闲的时候,她都会捧着那本书看,虽然看书的同时,眉头是紧锁的。我对此很是理解,也许对于没有入门的人来说,写程序的教材真的就是天书一般,一如我刚接触时一样,整整用了一个学期的时间才明白了写程序是做什么。看她这样,我好像是开心的,因为这样她才需要我,因为这样我才有更多的理由和她待在一起。

“戴老师!”在我去洗手间路过她的工位时,她叫住了我,“你快给我讲讲,这个我真是看不懂啊!”

她心急如焚的样子,而我是真的有些急,因为我憋了好一会儿,把手头上的代码写完才去上厕所的。

“等我上个厕所来。”我扔下这么一句话,匆匆忙忙而去。

当我从厕所回来时,正好遇上了她期盼的目光以及一连串的问话。

“标识符是什么?为什么关键字不能做标识符?什么是数据类型?什么是变量?运算符就是加减乘除符号吗?......”

“1加1等于几?“没等她说完,我问到。

”等于2啊。“她愣怔了一下,然后说着,用莫名其妙的眼神看着我。

”对,是等于2。那如果让程序来算呢,要怎么写程序?“

”不知道。“她很干脆的回答。

”试试吧。“我指了指她的笔记本电脑,”按你的想法试试。“

她打开了电脑,然后新建了一个文本文件,然后将后缀名.txt改成了.java,看到这样的举动我有些欣慰,她还记得java程序的源文件都是以.java作后缀名的。但后面的事,在我意料之外又在意料之中。她打开了那个文件,然后在里面输入:

1+1

"就这样?”我问。

“是呀。”她说,随即她又说,“我知道我写得不对,我就说了我不知道怎么写的嘛。”

“好吧。“我说,”但是你没发现书上所有的示例代码都是有一个main方法的吗?“

她茫然的看着我,我知道她不知道我在说什么,于是我在书上随便找了一个示例代码给她看。

”看到没有?就像这样的,你要记住所有程序的入口都是main方法,也就是说程序是从你的main方法开始执行的。“

她依然茫然,但我无法解释更多,于是我拿了一支笔在她的书上画了两个红框,然后说:”好吧,你先记着,所有的代码都写在红色方框圈起来的那两部分之间就行了。或者说写代码都要写上那两部分。“

”好的。“她说着,把她刚刚写的代码改了:

”这样?“她试探着问。

”嗯,不对,还有一点你要记住,java程序的每一条语句都是以英文字符的分号结尾的。“

”哦“,她说着,立马在那个1+1后面加了一个分号:

”这下好了。“她说。

”没有呢。“我说。

“还不对?”她问。

“不对,你刚刚不是问什么是变量吗,现在就需要变量上场了。”我说,“你想一下,你这样加过以后的结果放哪里呢?”

“哦,我知道了,变量就是用来放结果的。”她有些高兴起来,因为她突然的领悟。我也高兴起来,因为她的高兴。

“对了,变量就是用来放数据的。”我说着,开始改她的代码,因为我知道她虽然似乎明白了变量是什么,但还是对眼前的代码束手无策:

当然,我写了条输出结果的代码,以便看到计算结果:

有了结果,她很高兴,然后兴致勃勃的将1+1改成1+2、3-4等进行实验,所幸电脑不是傻瓜,都输出了正确的结果。突然之间她又犯难了,因为她想试一下乘除,可是键盘上根本没有小学课本中的那个乘号和除号。

“键盘上没有乘号和除号也,那怎么进行乘除啊?”她用求助的眼神看着我说。

“有的啊。”我说。

“哪里呢?”她不解。

“这里”我指着键盘上的 * 和 / 说。

”哦,难怪书上讲运算符那里出现这两个符号,原来是乘除啊。“

说完,她又去试乘除运算。乘法没有问题,都输出了正确结果,但除法却出了问题。在她计算3/2时,输出的结果竟然是1。

“电脑出问题了?”她疑惑是电脑犯傻了。

“电脑没有错,是你错了。”我有些觉得好笑,因为这对于一个老程序员来说几乎是常识了,当然对于她来说不是,于是我不经意的笑,立即招来她的白眼。

“笑什么?难道3除以2不是应该等于1.5的吗?”她说。

“是1.5没错。但是你用来存结果的变量错了,你用的变量是整型的,也就是说只能存整数,你用它来存小数,他就自动把小数扔掉了。这就是数据类型,不同的数据类型要用不同的类型变量来存,不然就会出现数据丢失的问题。所以......”

“所以这里要用小数类型的变量来存。”没等我说完,她就兴奋地接过我的话说到。

“对,说得没错,那么改一下程序吧。“

”怎么改?“她问。

“在Java中用于存储小数的数据类型有两个,一个是double,一个float。”我说着,将书翻到基本数据类型说明那里给她看,“这里有详细说明。”

类型

型别

字节

取值范围

byte

整型

1byte

-27 ~ 27-1

short

整型

2byte

-215 ~ 215-1

int

整型

4byte

-231 ~ 231-1

long

整型

8byte

-263 ~ 263-1

float

浮点型

4byte

3.402823e+38 ~ 1.401298e-45

double

浮点型

8byte

1.797693e+308~ 4.9000000e-324

char

文本型

2byte

0~216-1

boolean

布尔型

1byte

true/false

 ”嗯,我看了这里的,但是这两个有什么区别呢?“她接着问。

”区别就像不同大小的水桶一样,装的数据的大小不同,float类型的变量装的数据小一些,double装的数据大一些。“我打了个比喻,希望她能好理解一点。

”好吧,大概理解了。“她说着,改了下代码。

”这样?“她回头看着我,不确定的说。

”试试不就知道了。“我说。

于是她编译后运行,但结果却出乎意料。

 “还是不对啊。”她嚷着,“难道真是我电脑坏了?”

我觉得好笑,是不是每个开始学写程序的人都是这样,会怀疑是电脑出问题了呢。

“哈哈,”我笑着说,“电脑没有坏,只是这里要用到类型转换。”

“其实计算机的计算过程是这样的,3是整型,2也是整型,它发现都是整型,它就猜测结果也应该是整型,于是它就把计算结果放到一个隐形的整型变量里面,也就是1放到了一个隐形变量中了。”说着我指着那个等号,“看到那个等号没,那个是赋值运算,就是把一个变量的数据拷贝到另一个变量里。这里计算机就把刚刚计算的结果1从隐形变量中拷贝到变量a中了,明白没有,这里我们输出的是变量a里面的值,当然就是1了,又因为a这个变量是float类型的,所有就是1.0了。”我说了这么一大段,也不知道它明白了几成。不过她显然对赋值这个新的概念产生了兴趣,听完我的一通啰嗦的解释,她问道:“为什么要进行赋值运算呢?"

”因为我们要把运算结果存起来,以便后续使用。其实,程序很多时候就是把各种数据搬来运去的,这就需要容器来存数据。说得更深一点,就是数据在内存中和各种外存中搬来运去,不过你现在先不管什么内存了。“

”好吧,那现在怎么弄?“

”这个好办,用强制类型转换,将3或者2,只要其中一个变成小数,计算机就知道结果要是一个小数了。“说着,我改了一下代码,这回如期所料,输出了正确的1.5。

 

 ”哦,这就是强制类型转换,就是在前面加一个括号括起来的类型就可以了。我在书上看到过的,只是不知道用在哪里。“她为又get到新技能而高兴起来。

我想,通过这个例子,她应该已经基本掌握了变量、数据类型、运算符这些基础概念了,于是我说:“那现在是不是已经不用我回答你最开始提出那一连串问题了吧?”

她想了想,说:“嗯,我来说一下我的理解,你看我说得对不对。”

“好。“我说。

”1、数据用变量来存;

2、变量是有类型的,不同类型所能存储的数据大小不同;

3、不同类型变量之间可以进行转换,转换过程中可能丢掉一部分数据,就像大桶里的水倒入小桶一样,如果超出小桶的容量,那么就会把多余的水弄丢;

4、运算符就是加减乘除这些表示运行的符号;

对了,还有赋值是一个等号,表示将右边的值拷贝到左边的变量中。“

她能总结出个123来,这让我有些意外,但随即又觉得理所当然是这样,因为她一直在看书的嘛,很多概念她其实早有理解,这只是自己不确定理解对不对。对此,我不禁流露出赞许的目光。

”嗯,还有,标识符就是变量的名称是吗?“她问。

”可以这样说吧,但不光是变量的名称,是一切的名称都统称为标识符,后面你会发现,我们定义类,写方法这些都需要一个名字的。“我回答到,”所以,关键字知道是什么了吗?“

”嗯,关键字就是被用过的标识符。“

”对,你悟性很高,很适合做程序员。“我有些调侃地赞叹道。

她很高兴,脸上洋溢着得意的笑。

“现在我们来做一个比较复杂点的题目吧。”我想乘热打铁让她巩固一下今天所学的内容。

“好啊。”她回答道,脸上依然是笑意盈盈,似乎现在已经能写出任何程序来了。

“那我就出题目了哦。”

“你说。”

“一个学校1年级有两个班,a班有31个学生,b班有35个学生,现在要将这两个班的学生拉到操场上做课间操,如果7个人一排,那么问题来了,1可以排几个整排,2是否有剩余人数不能凑成整排,如果有剩余人数,那是剩余多少人?”

”这个简单。“她自信满满,”31+35等于66,然后66除以7等于9余3。有答案了,可以排9个整排,剩余3个人不能凑成整排。”

“我没叫你算啊,我是让你写程序,让计算机算。”

“额,我试试。”

于是,接下来的10来分钟,她的注意力都在她的电脑之上,而我却欣赏着她因专注散发出来的美。

“写好了。”她抬起头来对我说,我突然觉得有点尴尬,忙把目光从她身上移到她的电脑屏幕上。

”不错。“我说,”求余都会了。“

”那当然,我又不笨,这些在书上不都写得有吗。“她说着,指着书上运算符介绍的表格给我看。

优先级

运算符

简介

结合性

1

[ ] . ( )

方法调用,属性获取

从左向右

2

!、~、 ++、 --

一元运算符

从右向左

3

* 、/ 、%

乘、除、取模(余数)

从左向右

4

+ 、 -

加减法

从左向右

5

<<、 >>、 >>>

左位移、右位移、无符号右移

从左向右

6

< 、<= 、>、 >=、 instanceof

小于、小于等于、大于、大于等于,

对象类型判断是否属于同类型

从左向右

7

== 、!=

2个值是否相等,2个值是否不等于。

下面有详细的解释

从左向右

8

&

按位与

从左向右

9

^

按位异或

从左向右

10

|

按位或

从左向右

11

&&

短路与

从左向右

12

||

短路或

从左向右

13

?:

条件运算符

从右向左

14

=、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>=

混合赋值运算符

从右向左

 

她很得意,因为她发现她看懂了书上的内容,但我却不合时宜的泼了冷水:”不错是不错,但不够完美。“

”那怎么写?“她收了她脸上的笑容。

我觉出我我的直男癌来,但我是想让她学到更多,所以也不管那么多了,我动手改起她的代码来。

编译运行:

看了我改过的代码,她惊讶道:”还能这样?变量也能拿来计算?“

”当然,而且是必须的,以后你会发现程序基本上都是对变量进行计算的。你发现没有,这里我用上一步计算得到的余数来和0比较,是不是比你写一堆算式要简单很多。“

”哦,我记着了。“她说,突然又问:”优先级是不是就跟以前小时候学算术一样,加减乘除在一起的时候要先算乘除,所以要先算加减的话就要加括号?“

”是这样的,完全正确,一般我们很少去记各个运算符的优先级,反正要先算的都用括号括起来就好了。“

”哈哈,你这是在教学生偷懒哦,你这老师不太合格哦。“

”呵呵。”我笑了,没再说什么。

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页