第二课Java语言基础1(2)

三、Java语言基础(一)

1. 数据的声明与类型

  同学们知道数分为整数(Integer)与实数(Real),实数有小数部分而整数没有。在计算机语言里则称为整数与浮点数(Floating-point)。在Java里整数具体分为byte、short、int、long四种类型,它们的区别是所占用的bit的数量是不同的,因而它们能表示的数的范围也不一样。具体区别如下:

数据类型

所占位数

数的范围

byte

8

-2^7 ~ 2^7-1

short

16

-2^15 ~ 2^15-1

int

32

-2^31 ~ 2^31-1

long

64

-2^63 ~ 2^63-1

  但是一般我们使用int类型就可以了,很少会用到其它整数类型,除非数据太大超出了范围才改用long。浮点数也分为两种类型,区别也是长度的不同:

数据类型

所占位数

数的范围

float

32

-3.4E38 ~ 3.4E38

double

64

-1.797E308 ~ 1.797E308

  同样地一般我们用float也就够用了。

  现在回过头来看前面的代码:int a = 8 + 12; 就可以知道a是一个int类型的整数了。那a本身是什么意思呢?它是我们声明的一个变量,英文Variable。int a 的意思是让计算机在内存中划出32位的空间来存储一个整数,这个变量的名称就是a。“=”在Java中是一个运算符,表示把右边的运算结果赋给左边的变量,“=”就叫赋值运算符。这条语句的完整意思是声明一个名叫a 的整型变量,并且将8 + 12的运算结果作为初始值赋给a。最后作为一个完整的语句,以“;”结尾。【同学们在敲代码的时候一定要注意将输入法调整到半角英文的状态,如果输入的运算符和分号是中文式的就会出错】变量的意思是它的值以后可能通过新的赋值发生改变。但是有一种特殊的变量,在它被赋给初值以后就不能再发生改变。这种特殊变量就叫常量。Java中常量的声明是通过在变量前面加一个final关键词实现的,如:

final int AA = 100;

【一般为了使常量区别于变量,常量名往往采用全大写方式】这条语句我们声明了一个名为AA的常量,并且给它赋值为100。

  在这里要给大家介绍一下Java编程给变量取名的要求。变量的名称,还有后面要介绍的类名、方法名、包名等在编程中要取的名字都被称为标识符。Java的标识符,要按照以下规则:

  • 所有的标识符都应该以字母(A-Z 或者 a-z)、美元符($)、或者下划线(_)开始

  • 首字符之后可以是字母(A-Z 或者 a-z)、美元符($)、下划线(_)或数字的任何字符组合

  • 关键字不能用作标识符

  • 标识符是大小写敏感的

合法标识符举例:age、$salary、_value、__1_value

非法标识符举例:123abc、-salary

  我们再看代码的第三条语句:char c = ‘ ‘; 这里用到的是另一种数据类型,就是字符型char。大家通过前面的学习,知道字符型其实也是一个数,字符型的变量占有16位的bit,不同于整数与浮点数,char类型的数都是正数,因为字符本质是序号,而序号是不需要负数的。这条语句的意思是声明一个字符型的变量c,并将空格作为初始值赋给它。我们可以看到字符要用单引号 ‘ 给括起来,而且只能给一个字符,英文或者中文都可以。这是因为char的长度是16位,只能用于表示一个字符的序号。因为char类型本质上是正整数,因此可以直接给赋成数字,我们把if块里面的赋值改为87,运行一下就可以看到界面上显示出来了大写的字母“W”,因为大写W的ASCII码就是87。【大家可以自己根据ASCII表码再试试别的,看都能出来什么结果。还有的同学可以会问,如果我们要显示一句话该怎么办呢?这部分内容我们留到后面再讲,大家别急。】

  我们在前面的讲课内容中,同学们可以好几次听到二进制、bit(位)、byte(字节)、十六进制(八进制)等词。这里简单介绍一下。大家都知道计算机运算的数是使用的二进制,也说是只有0、1两个数字。这里因为对于芯片来说识别针脚的电平是高是低是简单的,这也就对应0和1两个数。同时在存储的时候每个存储单元也只用实现“无”或者“有”两个状态,让存储也变得很简单。这就是计算机系统要用二进制的原因。在存储空间里最小的单位是bit,中文是“位”,8个bit组成一个byte,中文是“字节”,往上还有2个byte组成一个word,中文是“字”。而3位二进制表示的二进制数的范围是0~7,正好是八进制,当我们看到一个八进制时,就马上能够知道在存储空间里这三位里每个bit里的存的是什么。同样的4位二进制的范围是0~15,正好是十六制,也方便我们知道四个bit里存的是什么。当然作为编程爱好者接触到对存储单元里bit这个级别的操作的机会是很少的,这里只是简单的介绍,感兴趣的同学可以自己找找资料深入了解。

【在这里我要讲一个关于程序员的笑话:有人向程序员借钱说:“借我1000块钱吧。”程序员很痛快地答应了,还说:“干脆给你1024吧,给你凑个整。”大家听出这个笑话的笑点了吧。】

  我们接着看下一句:boolean j = a > b; 右半部分是做一个比较,因为a的值确实是比b要大的,那么这个式子的结果就是对的,反之,则结果就是错的。由此我们知道通过这个比较只可能产生两个结果,也就是两种值,即“对”或者“错”,这两个值在Java语言里就是true和false【注意:是全小写,不能错】。而存储这种值的变量的类型就是boolean类型,中文叫布尔类型。布尔类型对代码的逻辑很重要,因为需要根据它的值来决定程序下一步是往一个方向走。当然布尔类型本质上也是数,true是1,false就是0。但因为Java语言比较严谨,它不允许对布尔类型进行直接数值的赋值,而必须使用保留字true与false,这一点与别的语言(比如C/C++)是不一样的,大家要注意。

  好,到这里为止,我们就学完了Java语言里所有的基本数据类型,它们之间的关系可以用下面的图来表示。

  当然,这不是Java语言数据类型的全部,全部类型是下面这张图,

  在这张完整的图里,可以看到除了基本类型还有引用类型与null即空类型,这个留到以后再讲。  


2. 运算符(Operator)与关键词(Keyword)

  通过前面的几行代码,我们接触到了变量、数据类型等知识点,其实还有一个知识点就是运算符(Operator),前面看到的 + > 都是运算符。运算符包括以下:

算术运算符:+,-,*,/,%,++,–

赋值运算符:= 以及扩展赋值运算符 +=,-=,*=,/= 等

关系运算符:>,<,>=,<=,==,!=

布尔逻辑运算符:!,&&,||

  算术运算符中 +,-,*,/ 这些好理解,%是模运算符。要把 / 与 % 这两个运算符结合起来理解。在两个整数类型的变量进行除法运算时,其结果一定还是整数!/ 运算返回的结果是除法的商,把余数舍去了。而 % 运算则是返回余数。例如:5除以3,其商是1,而余数则是2。我们用以下代码试一下:

int a = 5 / 3;   // 结果是1int b = 5 % 3;   // 结果是2

  而在 / 运算中,只要被除数变量与除数变量中有一个是浮点数变量(即 float 或 double)那么其结果就是一个浮点数,就能保留小数部分。但是这个结果也要赋给浮点数,才能保留小数部分。赋给整数类型变量其值只会截取整数部分(注意:不是四舍五入)。

  ++,– 是自增与自减运算符,它们的作用是将变量自身加一(或减一)以后再将结果赋给这个变量。也即 a++ 等同于 a = a + 1,a– 等同于 a = a – 1。

  赋值运算符 = 前面已经接触过,就是把右边的值赋给左边的变量。扩展赋值运算符则是将变量进行运算的结果赋给自己的语句进行简化的记法,如 a = a + 2可以改成 a += 2。对应地 -=, *=, /= 就很好理解了。这里面 += 与 -= 常用一些。

  接着说关系运算符。关系运算符就是比较两个变量的值,判断其是否与预期一致,如果一致则结果为true,反之结果为false。其中>,<,>=,<=很好理解。== 就是判断两个值是否相等,因为 = 已经被用作赋值了,就用 == 来表示相等的意思,!= 就是不等于。因为运算结果是true或false,因此结果只能赋给布尔类型变量。

  以上运算符除了==可以用于布尔类型变量之间的运算,其它都不能用。这也好理解,因为布尔类型的值就是真和假,没有进行加减或者比较大小的必要。布尔类型变量有专用的运算符:!,&&,||。其中 ! 是“非”运算符,也就是结果是相反的,原来是true,则运算结果是false。例如:

boolean x = true;boolean y = !x; // y的值是false

  !是一元运算符,也就是它只作用于一个变量。这个部分向同学们介绍的运算符中除了 ! 的其它运算符都是二元运算符,也就是作用于二个变量。剩下的两个布尔逻辑运算符&&, || 分别是“与”运算符与“或”运算符。与运算时,只有两个变量的值都为true时,其结果才是true,否则结果是false。或运算则只要两个变量中有一个变量为true,其结果就是true,那么我也就知道要或运算的结果是false,则需要两个变量的值同时为false。举例如下:

boolean i = true, j= true, k = false, r = false;  // 如果是同类型的变量可以写在一行,中间用逗号隔开就可以boolean s = i && j; // 结果为trueboolean t = i && k; // 结果为falseboolean o = k && r; // 结果为falseboolean p = i || j; // 结果为trueboolean q = i || k; // 结果为trueboolean u = k || r; // 结果为false

  运算符我们就先讲到这里,这并不是Java运算符的全部,还有一些知识等我们遇到的时候再学习,就不在这里堆砌了。课程到这大家对变量、变量类型以及运算符有了一个大致的了解。在这里还要跟大家提一个关键词(Keyword)的概念,这里的关键词不是大家在网上开玩笑的“你爸是老板,我爸是关键词”那种,而是被Java语言规范保留的代表特定意义的词,像前面提到的数据类型名称都是关键词,if, else之类逻辑词以及final之类的修饰词也是关键词。关键词在IDE中会被高亮显示,而且我们给变量取名时不能跟关键词一样(改变大小写是可以的)。

3. 选择语句

  同学们,通过对变量、数据类型和运算符的讲解,恭喜大家可以看懂代码的前4行了,我们继续往下讲解。if 开头的这个部分是选择语句,前面我说过代码的语句分为3种,即赋值、选择与循环。赋值已经讲过了,选择语句则根据给定的布尔类型变量的值的结果决定是执行不同部分的代码,如果是true,执行 if 部分的语句,否则执行 else 部分的语句。我们这部分代码是完整的形式,也可以省掉 else 部分。如:

if ( a > b){    // Do something}

  给大家讲一个关于if语句的笑话:

老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,就买一个。”

当晚,程序员老公手捧一个包子进了家门……

老婆怒道:“你怎么就买了一个包子?!”

老公回答:“因为看到了卖西瓜的。”

  大家能理解这个笑话的笑点吧。

  选择语句还有一种方式是使用switch,它与 if 的区别是:if 只有两个选择分支,而 switch 可以有更多。switch语句使用示例如下:

    int a = 5;    swith(a){        case 0:            // Do something                    break;        case 1:            // Do something                    break;        default:            // Do something    }

  这个很好理解,就是根据 a 的值决定去执行哪个分支,如果 a 的值与给定的分支的值都不相等,则执行default部分,也就是默认部分。default部分是可以不写的。有2点需要注意:

  1. if 语句中的作为选择依据的变量只能是布尔类型,而 switch 则是用的整数类型和字符型(也是整数)。

  2. 每个分支的代码最后要加上break,以跳过后面的分支。如果不加,就会顺序往下执行。

  switch语句的分支多,而且是数字,那么问题就来了,时间长了有可能自己都不记得数字是什么意思了。这里给同学们介绍一个技巧,为了使分支看起来更直观,可以用两种办法。一是用字符类型的变量,可以用一个字符来表示大概的意思。二是用常量。我们通过设置一个整数类型的常量,将常量名称取得比较有意思,分支的值使用常量就能很准确地表示这个分支的作用了。

4. 注释

  前面的讲解中用双正斜杠起头的语句是注释。注释不会被执行,只是给代码提供说明。注释常用的是单行注释,使用 // ,多行注释使用/* 开头,用 */ 结束。注释是代码很重要的组成部分,优秀的程序员一定有良好的注释习惯。注释作用是不仅能给自己做提示,更重要的是方便团队合作。


  本次课我们先是对21点扑克牌游戏的核心算法进行了实现,之后对其中涉及的Java语言基础知识进行了讲解。对这一课的内容,我们做一个简单的总结:

  1. 对程序功能的实现我们做了简单的需求分析,采用的是“简化”与“分解”的思维方法,实现了功能的最基本也是最核心的部分。这两种思维方法在以后我们会经常用到。

  2. 我们通过对不同文件本质的揭示,理解了“对于计算机来说,一切不过都是数字”这一真理。

  3. 编程语言的作用就是告诉计算机两件事:有哪些数和该怎么算这些数。因此所以语言都包括两个部分,即数和数的组织方式,即数据结构,和运算的逻辑,即算法。

  4. Java语言的内容包括:数据的声明与类型、运算符与保留字、3大语句(赋值、选择、循环)、数据结构、方法、类等。其中数据的声明与类型、数据结构是用于表达数和数的组织方式;剩余的除了类以外则是表达运算的逻辑;而类是最特殊的,它既包含数据结构又包含运算逻辑。【剩下的内容我们会逐渐接触到】

  5. 变量、常量的声明与赋值。标识符的命名规则。

  6. Java基本数据类型包括:整数、浮点数、字符和布尔等类型。

  7. 运算符我们这次接触了算术运算符、关系运算符、赋值运算符和布尔类型运算符。

  8. 3大语句我们这次学习了赋值与选择语句。选择语句有 if 和 switch 两种形式。


第一季 零基础学习Android开发

第一课 第一个Android程序(1)

文章转载自微信公众号:跟陶叔学编程

类似文章