《Java语言基础,数组和字符串.ppt》由会员分享,可在线阅读,更多相关《Java语言基础,数组和字符串.ppt(79页珍藏版)》请在金锄头文库上搜索。
1、面向对象的程序设计Java课前思考课前思考1Java中的标识符是由哪些字符组成的?2Java中有哪些保留字?简单数据类型包含哪几种?各种数据类型变量的定义方法和常量的表示方法及取值范围。3Java中各简单数据类型间的优先次序和自动转换规则是什么?各数据类型间在什么情况下,进行自动转换,在什么情况下使用强制转换?4Java中有哪些运算符?这些运算符的优先关系是怎样的?5Java中有哪些控制语句?你了解每一种控制语句的语法规则吗?6Java中的一维数组和多维数组在数组动态初始化和静态初始化时有何不同?7Java中的字符串有两种表示方法,这两种表示方法有什么不同?8如何访问字符串?如何修改字符串?如
2、何对两个字符串进行比较?学习目标本讲主要讲述java编程语言的基本语法知识,如java中的简单数据类型,运算符和表达式,控制语句,数组及字符串的处理。通过本讲的学习,同学们可以编写简单的java程序。 注意:同任何一种编程语言一样,应深注意:同任何一种编程语言一样,应深刻理解各知识点的概念,牢记一些刻理解各知识点的概念,牢记一些java的的语法,从而达到学习的目的语法,从而达到学习的目的。重点1深刻理解各知识点的概念,并熟记java的语法规范。2熟练使用各种数据类型的定义,表示和引用。3能熟练使用各种控制语句。4能熟练处理字符串。难点难点1动态初始化复杂类型数组时,要先为数组中的元素开辟引用空
3、间,再为每个元素开辟空间。2使用StringBuffer类表示和操作字符串时,要注意它可以处理可变字符串,即当在StringBuffer类型的字符串中插入字符而超出已分配的缓冲区时,系统会自动地为它分配额外的空间。标识符标识符程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)。Java语言中,标识符是以字母,下划线(_),美元符($)开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。例如,identifier,userName,User_Name,_sys_val,$change为合法的标识符,而2mailroom#,class为非法的标识符。保留字具有
4、专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reservedword),也称为关键字,下面列出了java语言中的所有保留字:bstract,break,byte,boolean,catch,case,class,char,continue,default,double,do,else,extends,false,final,float,for,finally,if,import,implements,int,interface,instanceof,long,length,native,new,null,package,private,protected,public,r
5、eturn,switch,synchronized,short,static,super,try,true,this,throw,throws,threadsafe,transient,void,while。java语言中的保留字均用小写字母表示。语言中的保留字均用小写字母表示。第二章 基本语法2.1Java程序构成2.2数据类型2.3变量和常量2.4运算符和表达式2.5流程控制2.1Java程序构成vJava程序是由类和对象组成的,而对象和类又是由方法和变量构成的。v方法由语句组成,语句又由表达式、变量、常量、关键字组成。2.1Java程序构成语句:用编程语言书写的简单命令,它导致计算机执行
6、某种操作。表达式:生成一个值的语句。不同的语句之间用(;)分开。多个语句可用左、右大括号(,)括起来,表示一个语句块。2.2 数据类型二、Java基本数据类型基本数据类型是非面向对象的。Java有八种基本数据类型,如下图。java中的数据类型中的数据类型java语言的数据类型有简单类型和复合类型简单数据类型包括:整数类型(Integer):byte,short,int,long浮点类型(Floating):float,double字符类型(Textual):char布尔类型(Logical):boolean复合数据类型包括:classinterface数组常量和变量常量和变量常量:用保留字fi
7、nal来实现finaltypeSpecifiervarName=value,varName=value;如:finalintNUM=100;变量:是java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。其定义格式如下:typeSpecifiervarName=value,varName=value;如:intcount;charc=a;布尔类型布尔类型-boolean布尔型数据只有两个值true和false,且它们不对应于任何整数值。布尔型变量的定义如:booleanb=true;字符类型字符类型-char字符常量:字符常量:字符常量是用单引号括起来的一个字符,如a,A;
8、字符型变量:字符型变量:类型为char,它在机器中占16位,其范围为065535。字符型变量的定义如:charc=a;/*指定变量c为char型,且赋初值为a*/整型常量整型常量十进制整数如123,456,0八进制整数以0开头,如0123表示十进制数83,011表示十进制数9。十六进制整数以0x或0X开头,如0x123表示十进制数291,0X12表示十进制数18。浮点型(实型)数据浮点型(实型)数据实型常量:实型常量:十进制数形式由数字和小数点组成,且必须有小数点,如0.123,1.23,123.0科学计数法形式如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数
9、。float型的值,必须在数字后加f或F,如1.23f。简单数据类型变量数据类型数据类型所占位数所占位数缺省值缺省值数的范围数的范围boolean8falsetrue,falsechar16u0000065535byte 8 0-2727-1short160-215215-1int320-231231-1long640-263263-1float320.0F3.4e0383.4e038double640.0D1.7e3081.7e308简单数据类型的例子publicclassAssignpublicstaticvoidmain(Stringargs)intx,y;/定义x,y两个整型变量flo
10、atz=1.234f;/指定变量z为float型,且赋初值为1.234doublew=1.234;/指定变量w为double型,且赋初值为1.234booleanflag=true;/指定变量flag为boolean型,且赋初值为truecharc;/定义字符型变量cStringstr;/定义字符串变量strStringstr1=Hi;/指定变量str1为String型,且赋初值为Hic=A;/给字符型变量c赋值Astr=bye;/给字符串变量str赋值byex=12;/给整型变量x赋值为12y=300;/给整型变量y赋值为300不同类型数据间的优先关系低-高byte,short,char-i
11、nt-long-float-double自动类型转换规则整型,实型,字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级;强制类型转换高级数据要转换成低级数据,需用到强制类型转换,如:inti;byteb=(byte)i;/*把int型变量i强制转换为byte型*/2.2 数据类型所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。char类型采用Unicode编码,而不是ASC编码。boolean类型不对应任何整数类型。2.2 数据类型三、数据类型转换自动类型转换整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然
12、后进行运算,转换从低级到高级:低-高byte,short,charintlongfloatdouble操作数操作数1类型类型操作数操作数2类型类型转换后的类型转换后的类型byte、short、charintintbyte、short、char、intlonglongbyte、short、char、int、longfloatfloatbyte、short、char、int、long、floatdoubledouble2.2 数据类型三、数据类型转换强制类型转换如果从高级转换成低级,则需要强制类型转换,但会导致溢出或精度下降。如:inti=8;byteb=(byte)i;2.2 数据类型四、什么时
13、候加后缀(f,d,)?文字在源文件中是一个字符串,java编译器会将它们直接翻译成特定类型的数值。文字可被看成一个整数或浮点数、字符串、Unicode字符、布尔类型值或null。如下表。2.2 数据类型文字类型34int0xFFint3.14159double1.25e11double9charuFF01chartruebooleanfalseboolean“cancel”String“null”Stringnull特殊的null2.2 数据类型如果定义一个超出int范围的文字,系统不会自动将它升级,必须加后缀“l”或“L”。longvalue1=1234567890123;/*错*/long
14、value1=1234567890123l;/*对*/假设需要一个浮点类型变量而不是双精度型变量,以下赋值必须加后缀“f”或“F”。floatvalue1=3.14159;/*错*/floatvalue1=3.14159f;/*对*/floatvalue1=(float)3.14159f;/*对*/2.3 变量和常量一、标识符(identifier)标识任何一个变量、常量、方法、对象和类。字母、数字、下划线或“_”美元符“”的序列。必须以字母、下划线或美元符号开头。大小写敏感。最大长度为65535个字符。2.3 变量和常量二、保留字(reservedword)具有专门的意义和用途,不能当作一般
15、的标识符使用,这些标识符称为保留字。abstract break byte boolean catch case class char continue default double do else extends false final float for finallyif import implements int interface instanceof long length native new null package private protected public final return switch synchronized short static super try
16、true this throw throws threadsafe transient void while指可访问变量的范围,在程序中不同的地方声明的变量具有不同的作用域。在一定的作用域内,变量名必须唯一。2.3 变量和常量三、变量程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为:TypevarName=value,varName=value;变量必须先申明后使用。Java有三种变量:实例变量、类变量和局部变量。2.3 变量和常量四、常量值保持不变的“变量”,定义格式为:finalTypevarName=value;例:finalbooleanDEBUGfalse
17、;finalfloatPI=3.141592;2.4 运算符和表达式一、运算符算术运算符:+,*,/,%,+,关系运算符:,=,&,|,赋值运算符:=,及其扩展赋值运算符如+=,=,*=,/=等。条件运算符:?:其它:包括分量运算符,下标运算符,实例运算符instanceof,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符()等。由于数据类型的长度是确定的,所以没有长度运算符sizeof。2.4 运算符和表达式1.算术运算符只有整数类型(int,long,short)的数据才能进行取余运算。两个整数类型做除法时,结果是取商数的整数部分,而小数部分被截掉了。和这两个单目运算符在
18、操作数的前面,则先执行单目运算,修改后的值作为新值参再与复杂表达式的运算。intx=2;inty=(+x)*3;/*结果是x=3,y=9*/intx=2;inty=(x+)*3;/*结果是x=3,y=6*/2.4 运算符和表达式2.关系运算符注意“=”和赋值号“”,不要混淆。3.逻辑运算符“&”和“|”被称为“非简洁运算符,它们在运算时,左右两边的表达式都要执行,而”“&”和“|”在运算时,右边的表达式在一定情况下可以不执行。2.4 运算符和表达式4.位运算符操作数只能为整型和字符型数据。运算符用法描述op按位取反&op1&op2按位与|op1|op2按位或op1op2按位异或op1op2op
19、1右移op2位op1op1op2op1无符号右移op2位2.4 运算符和表达式Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码的规定如下:对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(00101010按位取反11010101+111010110)用补码来表示数,0的补码是唯一的,都为00000000。(而在原码,反码表示中,+0和-0的表示是不唯一的,可参见相应的书籍)。而且可以用111111
20、表示-1的补码。(这也是补码与原码和反码的区别)。2.4 运算符和表达式5.条件运算符与C语言相同。x?y:z先计算表达式x的值,若x为真,则整个三目运算的结果取y的值;若x为假,则最终结果取z的值。2.4 运算符和表达式二、运算符的优先级和结合性1).,()9)&2)+,-,!,instanceof10) 3)new(type)11) |4)*,/,%12) &5)+,-13) |6),=,=15) =,+=,-=,*=,/=,%=,=8)=,!=16) &=,|=,=,=优先级决定了表达式中不同运算执行的先后次序,结合性决定相同优先级运算的先后执行次序。2.4 运算符和表达式三、注释行注释
21、。以“/”开头到本行末的所有字符都是注释。块注释。以“/*”开头到以“*/”结尾的所有字符都是注释。2.5 流程控制分支语句:if-else,switch循环语句:while,do-while,for与程序转移有关的其它语句:break,continue,return例外处理语句:try-catch-finally,throw2.5 流程控制一、分支语句if-else语句if(boolean-expression1)statements1;elseif(boolean-expression2)statements2;elsestatementsN;2.5 流程控制布尔表达式boolean-ex
22、pression是任意一个返回布尔数据类型的表达式,而且必须是(比C或C+要严格)。与C或C+一样,每个单一语句后面都要有分号。为了增强程序的可读性,应将if或else后的语句用括起来。else子句是任选的,不能单独作为语句使用,它必须和if语句配对使用,并且总是与离它最近的if配对。int i1 = 123;int i2 = 456;if( i1i2 ) System.out.println(“The bigger one is: ”+i1);else System.out.println(“The bigger one is: ”+i2);2.5 流程控制switch语句switch (e
23、xpression)case value1 : statements1; break;case valueN : statementsN; break;default : defaultStatements;2.5 流程控制表达式expression的返回值类型必须是这几种类型之一:int、byte、char、short。case子句中的值valueI必须是常量,而且所有case子句中的值应是不同的。default子句是任选的。break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。如果某个case分支后没有break语句,程序将不再做比较而执行
24、下一个分支。switch语句的功能可以用if-else语句来实现,但某些情况下,使用switch语句更简炼。2.5 流程控制int a = 100;int b = 20;int c; char oper = +;switch(oper)case +: c = a b; break;case -: c = a - b; break;default : c = a * b; break;2.5 流程控制二、循环语句循环语句while(当型循环)initialization/初始化条件while(termination)/循环条件body;/循环体iteration;/迭代,变更循环条件当表达式te
25、rmination为true时,执行中的语句,否则终止循环。tbfalsetrue2.5 流程控制循环语句do-while(直到型循环)initialization/初始化条件dobody;/循环体iteration;/迭代,变更循环条件while(termination);/循环条件首先执行一遍中的语句,当表达式termination为true时,继续执行中的语句,否则终止循环。tbfalsetrue2.5 流程控制n循环语句for(另一种当型循环)for(initialization;termination;iteration)body;/循环体initialization/初始化条件te
26、rmination/循环条件iteration/迭代,变更循环条件tbodyfalsetrueiterainit2.5 流程控制for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。for(inti=0,intj=10;ij;i+,j-)2.5 流程控制int n = 1, sum = 0;while ( n0);int
27、sum =0;for( int i=1; i=10; i+ ) sum += i;while循环循环do-while循环循环for循环循环2.5 流程控制三、程序转移相关语句break在switch语中,break语句用来终止switch语句的执行,使程序从整个switch语句后的第一条语句开始执行。在Java中,可以为每个代码块加一个标号,一个代码块通常是用大括号括起来的一段代码。加标号的格式为:BlockLabel:codeBlock;break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块后的第一条语句处执行。breakBlockLabel;a: /标记代码块标记代码块a b:/
28、标记代码块标记代码块b c: /标记代码块标记代码块c break b; /这段语句将不执行这段语句将不执行 /代码块代码块c结束结束 /这段语句也不执行这段语句也不执行 /代码块代码块b结束结束 /从这段语句开始执行从这段语句开始执行 /代码块代码块a结束结束2.5 流程控制2.5 流程控制四、程序转移相关语句continuecontinue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。它的格式为:continue;也可以用continue跳转到括号指明的外层循环中,这时的格式为c
29、ontinueouterLable;2.5 流程控制outer: for( int i=0; i10; i+ ) /外层循环外层循环 inner: for( int j=0; j10; j+ ) /内层循环内层循环 if( ij ) continue outer; /内层循环结束内层循环结束 /外层循环结束外层循环结束for( int i= 0; i 10; i+ ) if( i = 5 ) continue; 2.5 流程控制五、程序转移相关语句returnreturn语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:returne
30、xpression;/当方法需要返回某种类型数据时return;/当方法的返回类型为void时单独一条return语句放在方法中间时,会产生编译错误,因为其后的语句将不会执行到。若真需要退出方法,可以通过将return语句嵌入某些语句(如if-else)来使程序在未执行完方法中所有语句时退出。数组java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。一维数组的定义typearrayName;类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。例
31、如:intintArray;DatedateArray;一维数组的初始化 静态初始化静态初始化intintArray=1,2,3,4;StringstringArray=abc,How,you; 动态初始化动态初始化 1)简单类型的数组intintArray;intArray=newint5;2)复合类型的数组StringstringArray;StringstringArray=newString3;/*为数组中每个元素开辟引用空间(32位)*/stringArray0=newString(How);/为第一个数组元素开辟空间stringArray1=newString(are);/为第二个
32、数组元素开辟空间stringArray2=newString(you);/为第三个数组元素开辟空间一维数组元素的引用数组元素的引用方式为:arrayNameindexindex为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。多维数组多维数组二维数组的定义typearrayName;typearrayName;二维数组的初始化 静态初始化静态初始化intintArray=1,2,2,3,3,4,5;Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求
33、二维数组每一维的大小相同。 动态初始化动态初始化1)直接为每一维分配空间,格式如下:arrayName=newtypearrayLength1arrayLength2;inta=newint23;2)从最高维开始,分别为每一维分配空间:arrayName=newtypearrayLength1;arrayName0=newtypearrayLength20;arrayName1=newtypearrayLength21;arrayNamearrayLength1-1=newtypearrayLength2n;3)例:二维简单数据类型数组的动态初始化如下,inta=newint2;a0=newi
34、nt3;a1=newint5;对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。而且,必须为每个数组元素单独分配空间。例如:Strings=newString2;s0=newString2;/为最高维分配引用空间s1=newString2;/为最高维分配引用空间s00=newString(Good);/为每个数组元素单独分配空间s01=newString(Luck);/为每个数组元素单独分配空间s10=newString(to);/为每个数组元素单独分配空间s11=newString(You);/为每个数组元素单独分配空间二维数组元素的引用对二维数组中的每个元素
35、,引用方式为:arrayNameindex1index2例如:num10;课堂练习:请利用数组实现两个矩阵相乘publicclassMatrixMultiplypublicstaticvoidmain(Stringargs)inti,j,k;inta=newint23;/动态初始化一个二维数组intb=1,5,2,8,5,9,10,-3,2,7,-5,-18;/静态初始化一个二维数组intc=newint24;/动态初始化一个二维数组for(i=0;i2;i+)for(j=0;j3;j+)aij=(i+1)*(j+2);for(i=0;i2;i+)for(j=0;j4;j+)cij=0;for
36、(k=0;k3;k+)cij+=aik*bkj;System.out.println(*MatrixC*);/打印MatrixC标记for(i=0;i2;i+)for(j=0;j4;j+)System.out.println(cij+);System.out.println();字符串的处理Java语言中,把字符串作为对象来处理,类String和StringBuffer都可以用来表示一个字符串。(类名都是大写字母打头)1字符串常量字符串常量字符串常量是用双引号括住的一串字符。HelloWorld!2String表示字符串常量表示字符串常量用String表示字符串:String(charchar
37、s);String(charchars,intstartIndex,intnumChars);String(byteascii,inthiByte);String(byteascii,inthiByte,intstartIndex,intnumChars);String使用示例:Strings=newString();生成一个空串下面用不同方法生成字符串abc:charchars1=a,b,c;charchars2=a,b,c,d,e;Strings1=newString(chars1);Strings2=newString(chars2,0,3);byteascii1=97,98,99;by
38、teascii2=97,98,99,100,101;Strings3=newString(ascii1,0);Strings4=newString(ascii2,0,0,3);3用用StringBuffer表示字符串表示字符串StringBuffer();/*分配16个字符的缓冲区*/StringBuffer(intlen);/*分配len个字符的缓冲区*/StringBuffer(Strings);/*除了按照s的大小分配空间外,再分配16个字符的缓冲区*/类类String中提供了中提供了length( )、charAt( )、indexOf( )、lastIndexOf( )、getCha
39、rs( )、getBytes( )、toCharArray( )等方法。等方法。StringBuffer提供了提供了 length( )、charAt( )、getChars( )、capacity()等方法。等方法。字符串的比较字符串的比较String中提供的方法:equals()和equalsIgnoreCase()它们与运算符=实现的比较是不同的。运算符=比较两个对象是否引用同一个实例,而equals()和equalsIgnoreCase()则比较两个字符串中对应的每个字符值是否相同。字符串的转化java.lang.Object中提供了方法toString()把对象转化为字符串。字符串+
40、操作运算符+可用来实现字符串的连接:Strings=Heis+age+yearsold.;其他类型的数据与字符串进行+运算时,将自动转换成字符串。具体过程如下:Strings=newStringBuffer(heis).append(age).append(yearsold).toString();注意:注意:除了对运算符+进行了重载外,java不支持其它运算符的重载。2.5 流程控制六、异常处理语句:try-catch-finally,throw在进行程序设计时,异常情况的产生是不可避免得。如何处理这些异常?谁处理?程序又该如何从异常中恢复?这是任何程序设计语言都必须面对和解决的问题。Java语言中是通过异常(Exception,也称例外)对象来处理的。我们将在第四章中详细介绍。