《《Java基本程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Java基本程序设计》PPT课件.ppt(33页珍藏版)》请在金锄头文库上搜索。
1、第2章Java基本程序设计2.1数据类型与变量2.1.1 数据类型数据类型Java语言的数据类型只有两类:基本数据类型与引用类型。基本数据类型包括:boolean(布尔型)char(字符型)byte(字节型)short(短整型)int(整型)long(长整型)float(单精度浮点数型)double(双精度浮点数型)说明:lboolean(布尔类型)的大小(所占用的字节数)在Java中没有明确规定。lvoid类型仅在定义一个方法的返回值类型时才可能用到,表示该方法无返回值,不用于定义变量。2.1.2 常量常量1布尔型常量(布尔型常量(boolean)常量值只有true或false。true表示
2、“逻辑真”false表示“逻辑假”2整型常量整型常量(int或或long)有十进制、八进制、十六进制三种表示法:十进制:十进制整数,如:123,-48等。八进制:以数字0开头的八进制整数十六进制:以0x或0X开头的十六进制整数整型常量(int)在机器中占32位,即4个字节。3浮点数型常量(浮点数型常量(float或或double)有两种表示形式:十进制小数形式和科学记数法形式。2.1.2 常量常量4字符型常量(字符型常量(char)Java中的字符采用Unicode字符集的编码方案,是16位的无符号整数,占2个字节,表示的字符从065535。字符型常量值有两种表示方法。n表示换行,其Unico
3、de值是10。r表示回车,其Unicode值是13。t表示Tab键,其Unicode值是9。ddd表示用三位八进制数代表的ASCII字符,从000377,可表示256个ASCII字符。uxxxx表示用四位十六进制数代表Unicode字符,从u0000uffff,表示所有的Unicode字符。表示字符,即u0027。表示字符,即u0022。表示字符,即u005c。2.1.2 常量常量4字符型常量(字符型常量(char)注意Java中Unicode转义字符序列的处理时机。故下边的换行用法不正确:企图用u000a代替nStrings=abcu000adef;在编译时首先将转义字符处理成:String
4、s=“abcdef”编译程序会报错:unclosedstringliteral正确用法应该是:Strings=“abcndef”;再如:doubleu5de5u8d44=2345.6;上述代码经编译处理等价于:double工资=2345.6;2.1.2 常量常量5字符串常量(字符串常量(String)Java中字符串实际上是字符串类java.lang.String的一个对象,所有字符串常量值都用双引号括起来。Java中主要的是标识符常量。一个标识符常量是一个变量,一旦它的值初始化后,就再不能改变。什么是“Java字母”?若aracter.isJavaIdentifierStart(ch)返回值
5、是true,则ch称为是一个“Java字母”。按照Java编码规范,组成变量名各个单词的首字母要大写,但第一个单词的首字母要小写。2.1.3变量各种类型的变量在运算时,Java会进行类型转换。自动类型转换自动类型转换若类型转换时不会造成数据的精度丢失,则Java自动进行类型转换。方向如下:byte-short或char-int-long-float-doubleshort与char之间不能自动转换。强制类型转换强制类型转换不能按上述进行自动转换的则必须进行强制类型转换。格式是:(type)e,表示将表达式e的值的类型强制转换成type类型。如:chara=啊;shortv;v=a;/错误:不能
6、自动转换v=(short)a;/正确2.1.4Java中的关键字Java语言中定义了如下关键字,有特定的含义与用途,不能挪作它用。abstractbooleanbreakbytebyvaluecasecastcatchcharclassconstcontinuedefaultdodoubleelseextendsfinalfinallyfloatforfuturegenericgotoifimplementsimportinnerinstanceofintinterfacelongnativenewnulloperatorouterpackageprivateprotectedpublicre
7、streturnshortstaticsuperswitchsynchronizedthisthrowthrowstransienttryvarvoidvolatilewhile2.2.1运算符Java中表达各种运算的符号称为运算符,运算符的运算对象称为操作数。需要一个操作数参与运算的运算符称为单目运算符。1算术运算符算术运算符用于处理整型、浮点型、字符型的数据,进行算术运算。Java对+作了重载(Java中惟一重载的符号)/用于整型表示取整,%用于整型表示取余数。%用于float、double表示实数取余。+表示自增。有前自增如-表示自减。有前自减如2.2.1运算符publicclassTe
8、stPlusPluspublicstaticvoidmain(Stringargs) inta=1;intj=0;j=(+a)+(+a)+(+a);System.out.println(当a=1时,(+a)+(+a)+(+a)值为:+j);a=1;j=(a+)+(a+)+(a+);System.out.println(当a=1时,(a+)+(a+)+(a+)值为:+j);a=1;j=(+a)+(a+)+(+a)+(a+);System.out.println(当a=1时,(+a)+(a+)+(+a)+(a+)值为:+j);【例例2.1】测试运算符。问:当a=1时如下表达式:(+a)+(+a)+
9、(+a);(a+)+(a+)+(a+);(+a)+(a+)+(+a)+(a+)值分别为多少?程序为:2.2.1运算符2关系运算符关系运算符用于比较两个操作数,运算结果是布尔类型的值true或false。3逻辑运算符布尔逻辑运算符用于将多个关系表达式或true、false组成一个逻辑表达式。Java中有三种逻辑运算符:&(与)、|或)、!(非)。a&b:只有a与b都为true,结果才为true。有一个为false,结果为false.a|b:只有a与b都为false,结果才为false。有一个为true,结果为true。!a:与a的值相反。2.2.1运算符Java中逻辑表达式进行所谓的“短路”计算
10、。4位运算符位运算符是对操作数按其在计算机内部的二进制表示按位进行操作。Java中共有七种位运算符:l按位求反运算符对操作数的二进制数据的每一个二进制位都取反,即1变成0,而0变成1。l位与运算符&参与运算的两个操作数,相应的二进制数位进行位与运算。2.2.1运算符l位或运算符|参与运算的两个操作数,相应的二进制数位进行位或运算。l位异或运算符参与运算的两个操作数,相应的二进制数位进行位异或运算。l保留符号位的右移运算符将一个操作数的各个二进制位全部向右移若干位,左边空出的位全部用最高位的符号位来填充。l不保留符号位的右移运算符与不同的是,右移后左边空出的位用0填充。l左移运算符=op1=op
11、2op1=op1op2=op1=op2op1=op1=op1=op2op1=op1op26条件运算符条件运算符条件运算符?:是三目运算符,其格式是:e1?e2:e32.3顺序结构空语句、表达式语句、复合语句是Java程序依次顺序执行的语句,故又称为顺序结构。只有少量的几种表达式才能构成表达式语句。它们是:由赋值运算符构成的表达式由+或构成的表达式方法调用、new表达式标号语句的格式为:标识符:其中:可为任何合法的Java语句。复合语句是指由一对花括号括起来的任意数量的语句,有时又称为块语句或组语句。在复合语句之中,可以包含任何种类的语句,包括另一个复合语句。if语句又称为条件语句,其语法格式为
12、:if();else;if语句的语义是:首先计算的值,若值是true,则执行。2.4.1 if语句语句这个嵌套的if语句产生了二义性。if(a1)/加上一对,形成一条复合语句就可以了if(b10)System.out.println(a+b);else/此处的else与第一个if相配System.out.println(a-b);2.4.2switch语句使用switch语句比使用多个嵌套的if语句更简明些。switch语句的语法格式如下:switch()case:case:case:default:Switch语句的语义是:首先计算的值,然后判该值与的值是否相等,若相等,则从开始,一直执行到
13、它是一直执行到底的。2.4.2switch语句由于、及defalut仅起作标号的作用,故:1)不能有两个或以上的标号相同;2)这些标号的先后次序可以任意3)的值一旦与某一个标号相匹,则从该标号所代表的语句开始,一直执行到switch语句的结束。inta;switch(a)default:System.out.println(“*default”);case1:System.out.println(“*case1”);case3:System.out.println(“*case3”);case2:System.out.println(“*case2”);2.4.2switch语句当变量a取值为
14、4时,该程序片断的执行结果是:*default*case1*case3*case2当变量a取值为3时,该程序片断的执行结果是:*case3*case2这种“一直执行到底”的语义方式并不好。因此,上述的switch语句片断可改进为:inta;switch(a)default:System.out.println(“default”);break;case1:System.out.println(“case1”);break;case3:System.out.println(“case3”);break;case2:System.out.println(“case2”);break;/最后一条语句
15、的break;可省略。2.4.2switch语句【例【例2.3】 当x的值为1、3、5时,y的值为1;当x的值为2、4、6时,y的值为2;x为其它值时,y的值为3。publicclassEx_Switchpublicstaticvoidmain(Stringargs)intx,y;x=12;switch(x)case1:case3:case5:y=1;break;case2:case4:case6:y=2;break;default:y=3;System.out.println(x的值:x+y的值:+y);2.5.1循环语句Java有三种循环语句有:while语句、do-while语句和for
16、语句。1while语句语句while语句的语法格式是:while()while语句的语义是:第1步:计算的值,若值是false,整个while语句执行结束,程序将继续执行紧跟在该while语句之后的语句,时循环体中的语句,一次都没有得到执行。值是true,则转第二步。2.5.1循环语句第2步:依次执行循环体中的、。转第1步。对while语句的进一步讨论:(1)循环体中语句可能一次都不会得到执行。(2)循环体或布尔表达式中至少应该有这样的操作,它的执行会改变或影响while()中的值。(3)要注意while循环体的空语句。publicstaticvoidmain(Stringargs)inti=
17、1,s=0;while(i100);/因为这里有一个分号,表示循环体是空语句,成“死循环”s+=i;i+=2;System.out.println(“1到100之间所有奇数之和:”+s);2.5.1循环语句【例【例2.4】计算1到100之间所有的奇数之和。publicclassEx_SumWhilepublicstaticvoidmain(Stringargs)inti=1,s=0;while(i100)s+=i;i+=2;System.out.println(1到100之间所有奇数之和:+s);程序运行结果:1到100之间所有奇数之和:25002.5.1循环语句2do-while语句语句do
18、-while语句的语法格式是:dowhile();do-while语句的语义是:第1步:依次执行循环体中的、。第2步:计算的值对do-while语句的进一步讨论:(1)循环体中语句至少执行一次,循环体最少执行的次数是1次。2.5.1循环语句(2)循环体或布尔表达式中至少应该有这样的操作,它的执行会改变或影响while()中的值。(3)要注意do-while语句与while语句在语义上的细微差别。如下代码片断:求1+2+n之和。while的程序片断:i=1;s=0;while(i=n)s+=i;i+;do-while的程序片断:i=1;s=0;dos+=i;i+;while(i=n);两者是等价
19、的吗?不是。在n为0时,两者的结果有区别。为此,do-while中,i=1;可修改为i=0;2.5.1循环语句【例【例2.5】计算1到100之间所有的奇数之和。publicclassEx_SumDoWhilepublicstaticvoidmain(Stringargs)inti=1,s=0;dos+=i;i+=2;while(i100);System.out.println(1到100之间所有奇数之和:+s);程序运行结果:1到100之间所有奇数之和:25002.5.1循环语句3for语句语句for语句是相当通用且相当灵活的表达循环的语句,它的语法格式是:for(e1;e2;e3)for语句
20、的语义是:第1步:首先从左到右依次执行e1中用逗号分隔的各个表达式。2.5.1循环语句第2步:计算布尔表达式e2的值。第3步:从左到右依次执行e3中用逗号分隔的各个表达式。转第2步。对for语句的进一步讨论:(1)循环体中语句可能一次都不会得到执行,即循环体最少执行的次数是0次。(2)要注意for循环体的空语句。如:publicstaticvoidmain(Stringargs)inti,s;for(i=1,s=0;i100;i+=2); s+=i;System.out.println(“1到100之间所有奇数之和:”+s);2.5.1循环语句因为for(i=1,s=0;i100;i+=2);
21、后加了一个分号(;),循环体是一个空语句,结果不是所期望的。可以在for语句的e1部分定义变量,这些变量的作用域为整个for语句。【例【例2.6】计算1.100之间所有的奇数之和。publicclassEx_SumForpublicstaticvoidmain(Stringargs)inti,s;for(i=1,s=0;i100;i+=2)s+=i;System.out.println(1到100之间所有奇数之和:+s);程序运行结果:1到100之间所有奇数之和:25002.5.2break语句break语句不是循环语句,但与循环语句关系密切。break语句的语法格式是:break;其中:是用
22、户自定义的任何合法标识符,在程序的同一个方法之中,必定在某处已定义了用该所标识的。break语句在循环语句中的语义是:若没有,则break语句立即终止直接包含它的最内层循环。若带有,则break语句立即终止所标识的循环,程序从紧跟在该循环后的下一条语句继续执行。带标号的break语句的效果相当于从很深的内层循环往外跳。2.5.3continue语句continue语句只能用于循环语句中。基本语义是:立即开始新的一轮循环。continue语句的语法格式是:continue;continue语句的语义:若没有标号,则跳过循环体中下面尚未执行的语句,立即开始新的一轮循环。对于for语句,跳过循环体中下面尚未执行的语句,但要执行第三部分(e3)后,才开始新的一轮循环。若带有标号,则对标号所标识的循环,立即开始执行新的一轮循环。2.5.3continue语句【例【例2.7】打印出100之内的所有素数ppublicclassEx_Continuepublicstaticvoidmain(Stringargs)inti,j;Again:for(i=2;i100;i+)for(j=2;j=i-1;j+)if(i%j=0)continueAgain;System.out.print(+i);