Java编程语言基础知识.ppt
2.Java编程语言基础知识,重庆大学计算机学院 杨瑞龙,主要内容,标识符和保留字数据类型类型转换运算符和表达式控制语句,标识符,以字母,下划线(_),美元符号($,或者其它货币符号)开始的一个字母序列;后续字符可以是字母,数字,下划线,美元符,Unicode字符集中大于0 xC0的所有符号,运算符除外。大小写敏感,没有最大长度限制不能与保留字重名实际编程序中,甚至标识符完全可以用中文,比如可以把一个变量的名字命名为int 中文=1;,标识符举例,合法的标识符identifier userName User_Name _sys_val$change不合法的标识符2mailroom#class,练习题,Which declarations of identifiers are legal?$persons TwoUsers*point this _endline,保留字,具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word),也称为关键字:都是小写,比如true,false,null等,不像c中都是大写的。注意和c+的保留字的区别,增加了哪些,又去掉了哪些。比如在java中没有sizeof运算符,因为数据类型的长度与平台无关。,保留字2-1,用于数据类型的保留字byte short int long float double char boolean用于流程控制语句的关键字if else switch case default do while for break continue方法、类型、变量的修饰关键字private public protected final static abstract synchronized volatile,保留字2-2,异常处理关键字try catch finally throw throws对象相关关键字new extends implements class instanceof this super字面值常量关键字false true null方法相关关键字return void包相关关键字package import,练习题,Which of the following are Java keywords?1)NULL 2)new 3)instanceOf 4)wend,注释,单行注释/注释内容多行注释/*注释文本*/文件注释文件注释用来产生一个Html文件,可以使用Jdk提供的工具程序JavaDoc从源程序中提取这种注释,为程序提供文档说明。javadoc能识别注释中用标记标识的一些特殊变量。文件注释以“/*”开头,遇到“*/”结束,在注释中每行以一个“*”开始。其格式如下。/*注释文本*注释文本*/,数据类型划分,数据类型,数据类型的分类简单数据类型,复杂数据类型byte,short,int,long,float,doublechar,booleanclass,interface,数组数的范围,位长不支持c/C+中的指针类型,结构类型(struct)、联合类型(union),枚举类型(enum),常量,变量,常量用文字串表示,比如 3,a等通过final定义常量,final typeSpecifier varName=value,varName=value;如 final int i0;变量是java中的基本存储单元,包括变量名,类型,作用域等。int i0,j1;局部变量,类变量,方法参数,例外处理参数等。,简单数据类型boolean类型,布尔型数据只有两个值true和false,且它们不对应于任何整数值布尔型变量的定义如:boolean b=true;boolean a=false;,简单数据类型字符类型char,字符常量字符常量是用单引号括起来的一个字符,如a,A;字符型变量类型为char,使用Unicode字符集它在机器中占16位,16位无符号型数据,其范围为065535。字符型变量的定义如:char c=a;/*指定变量c为char型,且赋初值为a*/Java也提供转义字符,以反斜杠()开头,P13,比如表示单引号,uxxxx,1到4位16进制表示的字符。char c=u0061;如何从字符转换到它的编码,可以用jdk提供的工具native2ascii.exe程序。举例,“中文”的unicode编码是:“u4e2du6587”,简单数据类型字符类型char(续),Java中的字符型数据不能用作整数,因为java不提供无符号整数类型,但是同样可以把他当作整数数据来操作(因为发生了类型转换)。例如:int three=3;int one=1;char four=(char)(three+one);/four=4,简单数据类型整型数据,数据类型所占位数数的范围byte8-2727-1short16-215215-1int32-231231-1long64-263263-1在定义时,long型数据要加后缀l或者L。,浮点型(实型)数据,实型常量1.十进制数形式由数字和小数点组成,且必须有小数点,如0.123,.123,123.,123.02.科学计数法形式如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。,浮点型(实型)数据,实型变量数据类型 所占位数数的范围float 323.4e038 3.4e038double 641.7e308 1.7e308注意:定义float时,需加后缀f或F,使用举例,public class Test byte b=21;short s=256;int i=100000;long l=0 xffL;double d=0.7e-3;boolean b=false;,练习题,Which of the following are legal statements?1)float f=1/3;2)int i=1/3;3)float f=1.01;4)double d=999d;,类型转换,自动类型转换整型,实型,字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级;低-高byte,short,char int long float double,自动类型转换规则,操作数1类型 操作数2类型 转换后的类型byte、short、char intintbyte、short、char、intlong longbyte、short、char、int、long float floatbyte、short、char、int、long、float double double注意:byte,short和char在一起运算时,首先转换为int类型进行运算。,思考题,分析下面程序中的错误。byte b1=5;short s1=6;short s2;s2=b1+s1;答案:byte类型 和 short类型的数据进行运算时首先都转换为int类型。在第四行中就会发生赋值类型不匹配的编译错误。,强制类型转换,高级数据要转换成低级数据,需用到强制类型转换,如:int i;byte b=(byte)i;/*把int型变量i强制转换为byte型*/提示:已知一个字符的编码,需要获取对应的字符时,一般可以通过类型转换实现。int i65;char c;c=(char)i;,运算符和表达式,与我们学过的C+是相同的。注意运算符的类型优先级参与计算的数的类型一些运算符的特殊用途。,运算符(按照操作数区分),一元运算符:,二元运算符:,三元运算符:?:注:只列出了部分。,运算符(按照功能来分),1)算术运算符:+,*,/,%,+,3+2;a-b;i+;-i;%求模运算的操作数可为浮点数 2)关系运算符:,=,3;i=0;n!=-1;3)布尔逻辑运算符:!,,运算符(按照功能来分),4)位运算符:,注意,132,它们的值等于多少?,运算符(按照功能来分),5)赋值运算符=,及其扩展赋值运算符如+=,=,*=,/=等。i=3;i+=3 等效于i=i+3 6)条件运算符?:result=(sum=0?1:num/sum);,运算符(按照功能来分),7)其它:包括分量运算符,下标运算符,实例运算符instanceof,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符()等。System.out.println(“hello world”);int array1=new int4;,练习题,Which of the following will compile without error?1)char c=1;System.out.println(c1);2)Integer i=Integer(1);System.out.println(i1);3)int i=1;System.out.println(i1);4)int i=1;System.out.println(i1);,表达式的类型,表达式的类型由运算以及参与运算的操作数的类型决定,可以是简单类型,也可以是复合类型:布尔型表达式:x整型表达式:num1+num2,练习题,Given the following classpublic class ZeroPrintpublic static void main(String argv)int i=0;/Here,练习题,Which of the following lines if placed after the comment/Here will print out 0.1)System.out.println(i+);2)System.out.println(i+0);3)System.out.println(i);4)System.out.println(i-);,运算符的优先次序,表达式的运算按照运算符的优先顺序从高到低进行,同级运算符从左到右进行:.()+-!instanceofnew(type)*/%+-=,运算符的优先次序,=!=&|&|?:=+=-=*=/=%=&=|=,运算符的优先次序:特点,赋值运算符的优先级最低,因为赋值运算符要使用表达式的值;关系运算符的优先级比布尔逻辑运算符的优先级高;.,()等运算符的优先级最高。一元运算符的优先级也比较高。算术元算符要比关系运算符和二元逻辑运算符的优先级要高。,运算符的优先次序示例,Resutl=sum=0?1:num/sum;第1步:result=sum=0?1:(num/sum)第2步:result=(sum=0)?1:(num/sum)第3步:result=(sum=0)?1:(num/sum)第4步:result=注:可以用括号()显式的标明运算次序。,练习题,Which of the following are Java key words?1)double2)Switch3)then4)instanceof,练习题,Which of the following are not Java keywords?1)volatile2)sizeOf3)goto4)try,练习题,Given the following variables which of the following lines will compile without error?String s=Hello;long l=99;double d=1.11;int i=1;int j=0;1)j=i s;2)j=ij;3)j=id;4)j=il;,练习题,Given the following variables char c=c;int i=10;double d=10;long l=1;String s=Hello;Which of the following will compile without error?1)c=c+i;2)s+=i;3)i+=s;4)c+=s;,练习题,What will be output by the following statement?System.out.println(-1 1);1)02)-13)14)2147483647,练习题,What will be output by the following statement?System.out.println(1 32);1)12)-13)324)-2147483648,控制语句,分支语句,if else,switch循环语句,for,while,do while其他相关语句 break,continue,return例外处理语句,try.catch.finally,throw注释语句/,/*/,/*/,分支语句-if,条件语句 if-elseif(boolean-expression)statement1;else statement2;注意:1.布尔表达式是任何一个返回布尔型数据的表达式。2.每一个语句后面必须有分号;3。If语句可以嵌套使用。,练习题,写出输出结果int output=20;boolean b1=false;if(b1=true),分支语句switch,多分支语句 switchswitch(expression)case value1:statement1;break;case value2:statement2;break;case valueN:statemendN;break;default:defaultStatement;,switch,表达式expression的返回值类型必须是这几种类型之一:int,byte,char,short。case子句中的值valueN必须是常量,而且所有case子句中的值应是不同的。,switch,default子句是可选的。break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。Case语句只是起到一个标号作用,用来查找匹配的入口并从此处开始执行其后的语句序列,对后面的case子句不再进行匹配。,switch试题,写出输出结果 int i=9;switch(i)default:System.out.println(default);case 0:System.out.println(zero);break;case 1:System.out.println(one);case 2:System.out.println(two);,循环语句,while语句do-while语句for语句,While语句,initializationwhile(termination)body;iteration;先计算终止条件,Do-while语句,initializationdo body;iteration;while(termination);先执行循环体,后计算终止条件,若结果为true,则继续执行循环体。循环体,至少执行一次。,For语句,for(initialization;termination;iteration)body;for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。,For语句,初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。for(i=0,j=10;ij;i+,j-),与程序转移有关的其它语句,break语句continue语句返回语句return注意break语句和continue语句的区别如果break和continue后面都跟了标号,又有什么区别,break语句,在switch语中,break语句用来终止switch语句的执行。使程序从switch语句后的第一个语句开始执行。在Java中,可以为每个代码块加一个括号,一个代码块通常是用大括号括起来的一段代码。加标号的格式如下:BlockLabel:codeBlock break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块的第一条语句处执行。break BlockLabel;,Break语句,a:/标记代码块a b:/标记代码块b c:/标记代码块c break b;/will not be executed/will not be executed/execute from here,Break语句,如果一个break后所指定的标号不是一个代码块的标号,而是一个语句,则这时break完全实现goto的功能。应该避免这种方式的使用,Continue语句,continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。它的格式为:continue;也可以用continue跳转到括号指明的外层循环中,这时的格式为continue outerLable;,Continue语句,outer:for(int i=0;i10;i+)/外层循环inner:for(int j=0;j10;j+)/内层循环if(ij)continue outer;,返回语句return,return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:return expression return return语句通常用在一个方法体的最后,否则会产生编译错误,除非用在if-else语句中,例外处理语句,包括 try.catch(ExceptionCalss e).finally.throw语句;与c/c+相比,是Java特有的语句.,试题1,What will happen when you attempt to compile and run the following code?public class MyIf boolean b;public static void main(String argv)MyIf mi=new MyIf();MyIf()if(b)System.out.println(The value of b was true);else System.out.println(The value of b was false);,Compile time error variable b was not initialised2)Compile time error the parameter to the if operator must evaluate to a boolean3)Compile time error,cannot simultaneously create and assign value for boolean value4)Compilation and run with output of false,试题2,请写出testing()被调用时的输出结果void testing()one:for(int i=0;i 2)continue one;,试题3,public class MyIf public static void main(String argv)MyIf mi=new MyIf();MyIf()boolean b=false;if(b=false)System.out.println(The value of b is+b);有无输出结果?,试题4,输出结果public class MySwitch public static void main(String argv)MySwitch ms=new MySwitch();ms.amethod();public void amethod()char k=10;switch(k)default:System.out.println(This is the default output);break;,试题4续,case 10:System.out.println(ten);break;case 20:System.out.println(twenty);break;,试题6程序有无问题,见word文档讲义相关练习题.doc,