收藏 分享(赏)

第二章 Java语言基础,数组和字符串PPT.ppt

上传人:dreamzhangning 文档编号:3281929 上传时间:2018-10-10 格式:PPT 页数:79 大小:678.50KB
下载 相关 举报
第二章 Java语言基础,数组和字符串PPT.ppt_第1页
第1页 / 共79页
第二章 Java语言基础,数组和字符串PPT.ppt_第2页
第2页 / 共79页
第二章 Java语言基础,数组和字符串PPT.ppt_第3页
第3页 / 共79页
第二章 Java语言基础,数组和字符串PPT.ppt_第4页
第4页 / 共79页
第二章 Java语言基础,数组和字符串PPT.ppt_第5页
第5页 / 共79页
点击查看更多>>
资源描述

1、面向对象的程序设计Java,课前思考,1 Java中的标识符是由哪些字符组成的? 2 Java中有哪些保留字?简单数据类型包含哪几种?各种数据类型变量的定义方法和常量的表示方法及取值范围。 3 Java 中各简单数据类型间的优先次序和自动转换规则是什么? 各数据类型间在什么情况下,进行自动转换,在什么情况下使用强制转换? 4 Java中有哪些运算符?这些运算符的优先关系是怎样的? 5 Java 中有哪些控制语句?你了解每一种控制语句的语法规则吗? 6 Java 中的一维数组和多维数组在数组动态初始化和静态初始化时有何不同? 7 Java中的字符串有两种表示方法,这两种表示方法有什么不同? 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为合法的标识符,而2mail room#,class 为非法的标识符。,保留字,具有专门的意义和用

4、途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word),也称为关键字,下面列出了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,return

5、,switch,synchronized,short,static,super,try,true,this,throw,throws,threadsafe,transient,void,while 。 java语言中的保留字均用小写字母表示。,第二章 基本语法,2.1 Java程序构成 2.2 数据类型 2.3 变量和常量 2.4 运算符和表达式 2.5 流程控制,2.1 Java程序构成,Java程序是由类和对象组成的,而对象和类又是由方法和变量构成的。 方法由语句组成,语句又由表达式、变量、常量、关键字组成。,2.1 Java程序构成,语句:用编程语言书写的简单命令,它导致计算机执行某种操

6、作。 表达式:生成一个值的语句。,不同的语句之间用(;)分开。 多个语句可用左、右大括号(,)括起来,表示一个语句块。,2.2 数据类型,二、Java基本数据类型,基本数据类型是非面向对象的。 Java有八种基本数据类型,如下图。,java中的数据类型,java语言的数据类型有简单类型和复合类型 简单数据类型包括: 整数类型(Integer):byte, short, int, long 浮点类型(Floating):float,double 字符类型(Textual):char 布尔类型(Logical):boolean 复合数据类型包括: class interface 数组,常量和变量,

7、常量:用保留字final来实现 final typeSpecifier varName=value,varName=value; 如:final int NUM=100;变量:是java 程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。其定义格式如下: typeSpecifier varName=value,varName=value; 如:int count; char c=a;,布尔类型-boolean,布尔型数据只有两个值true和false,且它们不对应于任何整数值。布尔型变量的定义如: boolean b=true;,字符类型-char,字符常量: 字符常量是用单

8、引号括起来的一个字符,如a,A; 字符型变量: 类型为char,它在机器中占16位,其范围为065535。字符型变量的定义如: char c=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之前必须有数字,且

9、e或E后面的指数必须为整数。 float型的值,必须在数字后加f或F,如1.23f。,简单数据类型变量,数据类型 所占位数 缺省值 数的范围 boolean 8 false true,falsechar 16 u 0000 0 65535byte 8 0 -2727-1 short 16 0 -215215-1int 32 0 -231231-1long 64 0 -263263-1float 32 0.0F 3.4e038 3.4e038double 64 0.0D 1.7e308 1.7e308,简单数据类型的例子,public class Assign public static voi

10、d main (String args ) int x , y ; /定义x,y两个整型变量 float z = 1.234f ; /指定变量z为float型,且赋初值为1.234 double w = 1.234 ; /指定变量w为double型,且赋初值为1.234 boolean flag = true ; /指定变量flag为boolean型,且赋初值为true char c ; /定义字符型变量c String str ; /定义字符串变量str String str1 = “ Hi “ ; /指定变量str1为String型,且赋初值为Hi c = A ; /给字符型变量c赋值A

11、str = “ bye “ ; /给字符串变量str赋值“bye“ x = 12 ; /给整型变量x赋值为12 y = 300; /给整型变量y赋值为300 ,不同类型数据间的优先关系,低-高 byte,short,char- int - long - float - double,自动类型转换规则,整型,实型,字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级;,强制类型转换,高级数据要转换成低级数据,需用到强制类型转换,如: int i; byte b=(byte)i; /*把int型变量i强制转换为byte型*/,2.2 数据类型,所有基本类型

12、所占的位数都是确定的,并不因操作系统的不同而不同。 char类型采用Unicode编码,而不是ASC编码。 boolean类型不对应任何整数类型。,2.2 数据类型,三、数据类型转换,自动类型转换 整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级: 低-高 byte,short,char int long float double,操作数1类型 操作数2类型 转换后的类型 byte、short、char int int byte、short、char、int long long byte、short、char、int、long floa

13、t float byte、short、char、int、long、float double double,2.2 数据类型,三、数据类型转换,强制类型转换 如果从高级转换成低级,则需要强制类型转换,但会导致溢出或精度下降。如: int i = 8; byte b=(byte)i;,2.2 数据类型,四、什么时候加后缀(f, d, )?,文字在源文件中是一个字符串,java编译器会将它们直接翻译成特定类型的数值。 文字可被看成一个整数或浮点数、字符串、Unicode字符、布尔类型值或null。如下表。,2.2 数据类型,2.2 数据类型,如果定义一个超出int范围的文字,系统不会自动将它升级,必

14、须加后缀“l”或“L”。 long value1=1234567890123; /* 错 */ long value1=1234567890123l; /* 对 */ 假设需要一个浮点类型变量而不是双精度型变量,以下赋值必须加后缀“f”或“F”。 float value1=3.14159; /* 错 */ float value1=3.14159f; /* 对 */ float value1=(float)3.14159f; /* 对 */,2.3 变量和常量,一、标识符(identifier),标识任何一个变量、常量、方法、对象和类。,字母、数字、下划线或“_”美元符“”的序列。 必须以字母

15、、下划线或美元符号开头。 大小写敏感。 最大长度为65535个字符。,2.3 变量和常量,二、保留字(reserved word),具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字。,abstract 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 pack

16、age private protected public final return switch synchronized short static super try true this throw throws threadsafe transient void while,2.3 变量和常量,三、变量,程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为: Type varName = value , varName = value ;,变量必须先申明后使用。 Java有三种变量:实例变量、类变量和局部变量。,2.3 变量和常量,四、常量,值保持不变的“变量”,定

17、义格式为: final Type varName = value; 例: final boolean DEBUG false; final float PI = 3.141592;,2.4 运算符和表达式,一、运算符,算术运算符: +,*,/,%,+, 关系运算符: ,=,&,|, 赋值运算符: =,及其扩展赋值运算符如+=,=,*=,/=等。 条件运算符: ? : 其它:包括分量运算符 ,下标运算符 ,实例运算符instanceof,内存分配运算符new,强制类型转换运算符 (类型),方法调用运算符 () 等。,由于数据类型的长度是确定的,所以没有长度运算符sizeof。,2.4 运算符和表

18、达式,1. 算术运算符,只有整数类型(int,long,short)的数据才能进行取余运算。 两个整数类型做除法时,结果是取商数的整数部分,而小数部分被截掉了。 和这两个单目运算符在操作数的前面,则先执行单目运算,修改后的值作为新值参再与复杂表达式的运算。 int x=2; int y=(+x)*3; /* 结果是x=3,y=9*/ int x=2; int y=(x+)*3; /* 结果是x=3,y=6*/,2.4 运算符和表达式,2. 关系运算符,注意“=”和赋值号“”,不要混淆。,3. 逻辑运算符,“&”和“|”被称为“非简洁运算符,它们在运算时,左右两边的表达式都要执行,而”“&”和“

19、|”在运算时,右边的表达式在一定情况下可以不执行。,2.4 运算符和表达式,4. 位运算符,操作数只能为整型和字符型数据。,2.4 运算符和表达式,Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码的规定如下: 对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。 对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110 (00101010 按位取反 11010101 +111010110 ) 用补码来表示数,0的补码是唯一的,都为00000000。(而在原

20、码,反码表示中,+0和-0的表示是不唯一的,可参见相应的书籍)。而且可以用111111表示-1的补码。(这也是补码与原码和反码的区别)。,2.4 运算符和表达式,5. 条件运算符,与C语言相同。 x ? y : z 先计算表达式x的值,若x为真,则整个三目运算的结果取y的值;若x为假,则最终结果取z的值。,2.4 运算符和表达式,二、运算符的优先级和结合性,1) . , , () 9) & 2) + , - , ! , , instanceof 10) 3) new (type) 11) | 4) * , / , % 12) & 5) + , - 13) | 6) , , , = , = ,

21、=,优先级决定了表达式中不同运算执行的先后次序,结合性决定相同优先级运算的先后执行次序。,2.4 运算符和表达式,三、注释,行注释。以“/”开头到本行末的所有字符都是注释。 块注释。以“/*”开头到以“*/”结尾的所有字符都是注释。,2.5 流程控制,分支语句:if-else, switch循环语句:while, do-while, for与程序转移有关的其它语句:break, continue, return例外处理语句:try-catch-finally, throw,2.5 流程控制,一、分支语句,if-else语句if(boolean-expression1)statements1;e

22、lse if(boolean-expression2)statements2;elsestatementsN;,2.5 流程控制,布尔表达式boolean-expression是任意一个返回布尔数据类型的表达式,而且必须是(比C或C +要严格)。与C或C+一样,每个单一语句后面都要有分号。为了增强程序的可读性,应将if或else后的语句用括起来。else子句是任选的,不能单独作为语句使用,它必须和if语句配对使用,并且总是与离它最近的if配对。,int i1 = 123; int i2 = 456; if( i1i2 ) System.out.println(“The bigger one i

23、s: ”+i1); else System.out.println(“The bigger one is: ”+i2); ,2.5 流程控制,switch语句switch (expression)case value1 : statements1;break;case valueN :statementsN;break;default : defaultStatements;,2.5 流程控制,表达式expression的返回值类型必须是这几种类型之一:int、byte、char、short。case子句中的值valueI必须是常量,而且所有case子句中的值应是不同的。default子句是任

24、选的。break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。如果某个case分支后没有break语句,程序将不再做比较而执行下一个分支。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 流程控制,二、循环

25、语句,循环语句 while(当型循环)initialization /初始化条件while (termination) /循环条件body; /循环体iteration; /迭代,变更循环条件当表达式termination为true时,执行中的语句,否则终止循环。,2.5 流程控制,循环语句 do-while(直到型循环)initialization /初始化条件do body; /循环体iteration; /迭代,变更循环条件 while (termination) ; /循环条件首先执行一遍中的语句,当表达式termination为true时,继续执行中的语句,否则终止循环。,2.5 流

26、程控制,循环语句 for(另一种当型循环) for (initialization; termination; iteration) body; /循环体 initialization /初始化条件termination /循环条件iteration /迭代,变更循环条件,2.5 流程控制,for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是

27、用逗号分隔的语句序列。for( int i=0, int j=10; ij; i+, j-),2.5 流程控制,int n = 1, sum = 0; while ( n=10 ) sum = sum + n;n+; ,int n = 10, sum = 0; do sum += n;n-; while( n0);,int sum =0; for( int i=1; i=10; i+ ) sum += i; ,while循环,do-while循环,for循环,2.5 流程控制,三、程序转移相关语句 break,在switch语中,break语句用来终止switch语句的执行,使程序从整个swi

28、tch语句后的第一条语句开始执行。 在Java中,可以为每个代码块加一个标号,一个代码块通常是用大括号括起来的一段代码。加标号的格式为: BlockLabel: codeBlock; break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块后的第一条语句处执行。 break BlockLabel;,a: /标记代码块a b: /标记代码块bc: /标记代码块cbreak b; /这段语句将不执行 /代码块c结束 /这段语句也不执行 /代码块b结束 /从这段语句开始执行 /代码块a结束,2.5 流程控制,2.5 流程控制,四、程序转移相关语句 continue,continue语句用来结

29、束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。它的格式为:continue; 也可以用continue跳转到括号指明的外层循环中,这时的格式为continue outerLable;,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

30、 )continue; ,2.5 流程控制,五、程序转移相关语句 return,return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式: return expression; /当方法需要返回某种类型数据时 return; /当方法的返回类型为void时 单独一条return语句放在方法中间时,会产生编译错误,因为其后的语句将不会执行到。若真需要退出方法,可以通过将return语句嵌入某些语句(如if-else)来使程序在未执行完方法中所有语句时退出。,数组,java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,

31、数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。,一维数组的定义,type arrayName ; 类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。 例如: int intArray ; Date dateArray;,一维数组的初始化, 静态初始化 int intArray=1,2,3,4; String stringArray=“abc“, “How“, “you“; 动态初始化 1)简单类型的数组 int intArray; intArray = new int5; 2)复合类型的数组 Strin

32、g stringArray ; String stringArray = new String3;/*为数组中每个元素开辟引用 空间(32位) */ stringArray0= new String(“How“);/为第一个数组元素开辟空间 stringArray1= new String(“are“);/为第二个数组元素开辟空间 stringArray2= new String(“you“);/ 为第三个数组元素开辟空间,一维数组元素的引用,数组元素的引用方式为: arrayNameindex index为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明

33、它的长度,例如:intArray.length指明数组intArray的长度。,多维数组,二维数组的定义 type arrayName ; type arrayName;,二维数组的初始化, 静态初始化 int intArray =1,2,2,3,3,4,5; Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。, 动态初始化 1) 直接为每一维分配空间,格式如下: arrayName = new typearrayLength1arrayLength2; int a = new int23; 2) 从最高维开始,分别为每一维分配空间:

34、arrayName = new typearrayLength1 ; arrayName0 = new typearrayLength20; arrayName1 = new typearrayLength21; arrayNamearrayLength1-1 = new typearrayLength2n;,3) 例: 二维简单数据类型数组的动态初始化如下, int a = new int2 ; a0 = new int3; a1 = new int5; 对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。 而且,必须为每个数组元素单独分配空间。 例如: Str

35、ing s = new String2 ; s0= new String2;/为最高维分配引用空间 s1= new String2; /为最高维分配引用空间 s00= new String(“Good“);/ 为每个数组元素单独分配空间 s01= new String(“Luck“);/ 为每个数组元素单独分配空间 s10= new String(“to“);/ 为每个数组元素单独分配空间 s11= new String(“You“);/ 为每个数组元素单独分配空间,二维数组元素的引用,对二维数组中的每个元素,引用方式为:arrayNameindex1index2 例如: num10;,课堂练

36、习: 请利用数组实现两个矩阵相乘,public class MatrixMultiply public static void main(String args) int i,j,k; int a=new int 23; /动态初始化一个二维数组 int b=1,5,2,8,5,9,10,-3,2,7,-5,-18;/静态初始化 一个二维数组 int c=new int24; /动态初始化一个二维数组 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(k=0

37、;k3;k+) cij+=aik*bkj; System.out.println(“*Matrix C*“);/打印Matrix C标记 for(i=0;i2;i+) for (j=0;j4;j+) System.out.println(cij+“ “); System.out.println(); ,字符串的处理,Java语言中,把字符串作为对象来处理,类String和StringBuffer都可以用来表示一个字符串。(类名都是大写字母打头),1字符串常量 字符串常量是用双引号括住的一串字符。 “Hello World!“,2String表示字符串常量 用String表示字符串: Strin

38、g( char chars ); String( char chars , int startIndex, int numChars ); String( byte ascii , int hiByte ); String( byte ascii , int hiByte, int startIndex, int numChars ); String使用示例: String s=new String() ; 生成一个空串,下面用不同方法生成字符串“abc“: char chars1=a,b,c; char chars2=a,b,c,d,e; String s1=new String(chars

39、1); String s2=new String(chars2,0,3); byte ascii1=97,98,99; byte ascii2=97,98,99,100,101; String s3=new String(ascii1,0); String s4=new String(ascii2,0,0,3);,3用StringBuffer表示字符串 StringBuffer( ); /*分配16个字符的缓冲区*/ StringBuffer( int len ); /*分配len个字符的缓冲区*/ StringBuffer( String s ); /*除了按照s的大小分配空间外,再分配16

40、个 字符的缓冲区*/,类String中提供了length( )、charAt( )、indexOf( )、lastIndexOf( )、getChars( )、getBytes( )、toCharArray( )等方法。 StringBuffer提供了 length( )、charAt( )、getChars( )、capacity()等方法。,字符串的比较,String中提供的方法: equals( )和equalsIgnoreCase( ) 它们与运算符= =实现的比较是不同的。运算符= =比较两个对象是否引用同一个实例,而equals( )和equalsIgnoreCase( )则比较

41、两个字符串中对应的每个字符值是否相同。,字符串的转化,java.lang.Object中提供了方法toString( )把对象转化为字符串。,字符串“+“操作,运算符+可用来实现字符串的连接: String s = “He is “+age+“ years old.“; 其他类型的数据与字符串进行“+“运算时,将自动转换成字符串。具体过程如下: String s=new StringBuffer(“he is“).append(age).append(“years old“).toString(); 注意:除了对运算符“+“进行了重载外,java不支持其它运算符的重载。,2.5 流程控制,六、 异常处理语句:try-catch-finally, throw,在进行程序设计时,异常情况的产生是不可避免得。如何处理这些异常?谁处理?程序又该如何从异常中恢复?这是任何程序设计语言都必须面对和解决的问题。Java语言中是通过异常(Exception,也称例外)对象来处理的。我们将在第四章中详细介绍。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报