您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 第2课-Java程序基础
华中科技大学电信系吴砥&许炜第1页共8页第二章Java程序基础第1节运算符和流程控制语句在Java程序中的地位和作用任何一个Java程序从根本上说都是建立在数据与操作符的基础之上的。数据就是我们常说的变量、常量以及与此相关数据类型等。但是数据是一个静态的元素,仅仅依靠数据是不能满足功能的需要的。所以表示数据之间的联系和相互作用便是通过操作符来体现。而操作符又可以分为运算符(Operator)和流程控制(FlowControl)语句。运算符不仅仅是我们通常所理解的数学运算,还包括关系运算符、位运算符、逻辑运算符等,但是运算符有个很明显的特点:大部分预算符作用范围仅限于一条语句。流程控制则是完成对若干条语句组成的程序块实现逻辑控制,如:顺序、分支、循环等。从这个意义上说,他们的粒度是不同的。为了更清楚说明它们的关系,我们可以作这样一个比喻:我们学习语言,言语的组成可以分为单词、句子、句群(也就是段落),那么程序的一条语句也是一样,主语是数据,操作符是谓语动词,一条语句的功能是完成对数据的某种操作;而流程控制则类似于我们所说的联词,它是负责控制一段句群与另一段句群的关联,是递进还是转折。所以操作符与流程控制语句的区别就是一个是成句,一个是成文。第2节Java中的基本数据类型boolean(1位)char(16位、2个字节)byte(8位、1个字节)字符short(16位、2个字节)int(32位、4个字节)整数long(64位、8个字节)float(32位、4个字节)double(64位、8个字节)浮点数由此表看出Java中定义的所有数据类型与C相似,Java的各种数据类型占用固定的内存空间,这是与具体的软硬件环境无关的,所以Java具有跨平台的特性。(不需要编译带来的好处)。这里我们顺便提及变量的概念,变量就是程序运行过程中可变的数据,它用一个字符串来指代一个数据存储空间。所以既然和存储有关,分配多大的空间给这个变量就和变量的类型有关了。变量声明和赋值的语法:变量类型变量名(标识符的一种);变量类型变量名=变量值;由语法我们了解到,变量名不是随便能够命名的,标识符可以由字母、数字和“_”以及“$”组成,不能以数字开头。其次是其大小写敏感,然后是希望命名时能够表明适当的含义。华中科技大学电信系吴砥&许炜第2页共8页第3节流程控制语句3.1流程控制语句基础知识Java使用了C的全部控制语句,如果你以前使用C编程,那么大多数语句你会非常熟悉。流程控制语句是用来控制程序中各语句执行顺序的语句,可以把单个的语句组合成有意义的,能完成一定功能的小逻辑会,能否熟练地运用流程控制语句往往很大程度上影响所编写程序的质量。结构化程序设计的三种基本流程:(顺序结构、分支结构、循环结构)顺序结构分支结构循环结构图2-1结构化程序设计的三种基本结构顺序结构是最简单的一种,即程序按照书写的顺序执行;分支结构又成为选择结构,即根据表达式的值来判断应选择执行哪一个流程;循环结构是在一定条件下重复执行一个流程,而这个循环条件我们是可以控制的。基本上这三个结构可以满足程序设计中的大部分要求,下面我们谈谈它们在Java语言中的具体表现。顺序结构:略分支结构:if-else语句是流程控制的最基本形式,使用频率最高。其语法为:if(判断条件)语句;//条件成立执行此语句else//else从句可以省略,仅仅为if从句也可以语句;//条件不成立执行此语句包含if-else的程序段样例:intresult=-1;if(argument2)result=1;elseresult=0;switch语句同样是一种“选择语句”,其适用于从一系列代码段中选取一段执行的情况,其语法如下:华中科技大学电信系吴砥&许炜第3页共8页switch(选择因子)//选择因子必须是整数类型{case条件1:语句;break;case条件2:语句;break;case条件3:语句;break;……default:语句;//当所有的条件都不满足,可执行这一条语句。}包含switch的程序段样例:intresult,argument=2;switch(argument){case1:result=1;break;case2:result=2;break;default:result=0;}循环结构:while语句的执行过程是先判断条件表达式的值,在执行循环体,循环体执行完后无条件返回到条件处在此判断。当条件不成立时,不进入循环体而直接转到while语句后执行。其语法如下:while(条件表达式)//条件为真则执行循环体{循环体;//如果循环体只有一句话,则可以去掉{}}包含while的程序段样例:intn=0;while(n100)n++;do-while语句这个语句和while语句非常类似,但是不同的是:它不是先判断条件再执行循环体,而是先执行一遍循环体,再判断条件表达式,根据条件表达式来决定是继续循环还是退出循环。其语法如下:do{//如果循环体只有一句话,则可以去掉{}循环体;}while(条件表达式)//条件表达式为真则继续循环,为假退出循环包含do-while的程序段样例:intn=0;don++;while(n100);for语句是Java语言中循环功能较强,使用广泛的一个,它多用于人为限定循环次数的应用,当然从功能的角度上说,能够用for语句实现的内容同样可以用while语句实现,只是在实现方面要简单一些。其语法如下:for(表达式1;表达式2;表达式3){循环体;//如果循环体只有一句话,可以去掉{}}//表达式1为初始值,表达式2为限定条件,表达式3为累加值。包含for的程序段样例:intresult=0,i=0;for(i=1;i100;i++)result++;华中科技大学电信系吴砥&许炜第4页共8页学习以上内容后,学员基本上对于程序的流程控制已经有较具体的概念,已经具有编写或阅读简单的程序的能力。但是仅仅这样是不够的,以上提到的5个基本的语句在实际使用时有许多地方需要注意,下面我们将针对每一种控制语句使用时易出现的问题详细讲解。3.2流程控制语句中重点和难点内容if-else控制语句(程序改错)……1:intresult=0,x=3;2:if(x=5)then3:result=14:elseif(x)5:result=26:endif;……错误一:第2行,“x=5”不是一个条件表达式,而是一个赋值语句,其含义是将5这个值赋给x变量,虽然很多人都知道Java和C用“x==5”来表示相等的关系,但是仍然有许多人在编程中会忽略这个问题。错误二:第2行和第6行,then和endif是多余的,这不是Java的语法,如果学过basic或是pascal语言,容易犯这个错误。错误三:第3行和第5行,语句后要加上分号“;”,有pascal基础的人要注意,Java和C一样,每一条完整的语句后必须以分号结尾。错误四:第4行,if()括号内表达式必须是boolean类型,即:true或者false,如果括号内表达式是一个整数或其他非boolean类型,编译是无法通过的。这和C是不同的,因为C语言同样可以使用整数作为条件表达式。而Java不允许将数字当成布尔值来使用。补充一:三元运算符,一个表达式相当于一个控制段,如:j=x10?x*100:x*10;相当于:if(x10)j=x*100;elsej=x*10;这样一个程序段。switch控制语句(程序改错)……1:StringstrDayOfWeek=“Tuesday”;2:intresult=0;3:switch(strDayOfWeek)4:{5:case“Sunday”:result=0;6:case“Tuseday”:result=1;7:case“Wednesday”:result=2;……8:default:result=-1;9:}……错误一:第3行,switch语法要求其条件表达式必须是整数类型,而这里使用字符串类型,显然是错误的,char和byte类型因为都可以和整数值对应,所以也可以用于switch从句中作判断条件。错误二:第5-7行,之所以用switch从句,是为了象使用开关一样从众多选项中选择一个,所以假设第6行条件满足,则仅仅执行其语句,但是上述程序由于每个case后没有break;语句,所以第6行以下的所有case语句都会执行,而程序最终得到的是default的结果。华中科技大学电信系吴砥&许炜第5页共8页while和do-while控制语句(程序改错)……1:inti=0,j=0;2:while(j0)3:i++4:i=j=0;5:do6:i++7:while(j0)……错误一:第7行while语句的分号未写,这个是编程中很容易忽视的问题。补充一:同样都是循环语句,第一个循环后I=0,而第二个循环后I=1,这说明do-while无论条件符不符合,都要执行一次循环体。for控制语句1:for(x=0,y=1;x200;x++,y=x*2)错误一:如果x,y变量在使用之前并不声明,而直接使用会导致编译错误,一般把专用于循环的特殊变量就放在循环内部声明,如:for(intx=0,inty=1;x200;x++,y=x*2),但是要注意它的作用域仅限于循环体,这两个变量在循环体之外是不可访问的,有关作用域的问题会在有关章节专门讲解。补充一:goto是汇编程序的特征,但是goto会给程序带来巨大的灾难,大量使用goto语句使结构化程序设计成为一句空话,Java中没有goto语句。但是Java中仍然有跳转语句,如break;continue。它们主要是用来解决从循环体或嵌套中中断退出的问题。由于跳转受到了限制,所以不会象goto那样带来灾难性的后果。不过break和continue算是比复杂的一个用法了,如:0:inti=0;1:outer:2:for(;true;)3:for(;i10;i++){4:if(i==2)5:continue;6:if(i==3){7:i++;8:break;9:}10:if(i==7){11:i++;12:continueouter;13:}14:if(i==8)15:breakouter;16:}当i等于1时,四个if语句全部执行了,当i等于2时,由于要执行continue语句,故直接跳出本次循环,其他三个if语句都没有执行;当i等于3时,直接结束内循环,外层循环再一次的开始,如果不在中断之前将i自加1,那么在此进入内循环将始终重复这一过程。当i等于7时,直接跳到外层循环,然后再进入外层循环,由于i的值保留为7,必须在跳出前自加1,否则将进入死循环。而如果直接跳出外循环,则整个代码执行完毕。结论:continue相当于让循环体空转一次,什么也不做,但是累加继续,循环将从下一步继续开始运行;break则相当于彻底退出,无论是循环体还是函数体,并且退出并不会做累加,即i++不会执行。华中科技大学电信系吴砥&许炜第6页共8页第4节运算符4.1运算符基础知识运算符以一个或多个自变量为基础,生成一个新值。根据以前写程序的经验,运算符的概念应该不难理解。我们最熟悉的运算符是“+”“-”“*”“/”,Java的运算符和C是一样的,所以我们在讲解时会强调其中重要的部分。sideeffect是我们要解释的第一个概念:运算符会改变运算对象的值,例如:x++,x在执行自加运算的同时,改变了原有x的值,我们把这种改变叫做“副作用”。借助运算符的副作用,我们可以减少变量的数目。下面我们将讲授几种主要的运算符:赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、造型运算符。赋值运算符:(Assignment)赋值运算符就是我们通常所说的“=”,它的意思是将右边的内容附给左部。注意:左边被赋值的对象一定拥有一个物理空间来存储右边的值,也就是说左边一定是一个已经声明的对象,而不能是个常数,如:4=a;(a是个变量)这样的语句就是错误的。至于赋值中有关对象的问题将在面向对象的概念中具体讲解。算术
本文标题:第2课-Java程序基础
链接地址:https://www.777doc.com/doc-2192546 .html