1、1,第2章 Java语言基础,2.1 语言成分 2.2 流程控制语句 2.3 数组 2.4 静态方法 2.5 字符串,第二章 Java语言基础,学习目标: 掌握Java语言的基本数据类型、操作符、表达式; 掌握Java程序的流程控制方式,重点是分支结构和循环结构。 掌握Java中数组的概念及使用 了解Java应用程序的一般结构,3,2.1 语言成分,一. 标识符与关键字 二. 基本数据类型 三. 变量与常量 四. 运算符与表达式,4,一.标识符与关键字,Unicode字符编码:由国际Unicode协会编制,收录了全世界所有语言文字中的字符,是一种跨平台的字符编码。 USC:指采用Unicode
2、字符编码的通用字符集。 Unicode字符编码的两种方案:16位编码和32位编码,对应的字符集称为USC-2和USC-4 Java语言采用USC-2字符集,其前128个字符与ASCII字符集完全一致,之后是其他语言文字,如拉丁语、汉字等。,5,一.标识符与关键字,1. 关键字 2. 标识符 3. 分隔符 4. 注释 5. 程序书写风格,6,一.标识符与关键字,关键字是由Java语言定义的、具有特定含义的单词。每一个关键字都有一种特定含义,不能被赋予别的含义。 关键字在UltraEdit、JCreator等编辑器中以蓝色显示。,1.关键字(keyword),7,一.标识符与关键字,2.标识符(i
3、dentifier),标识符是以字母开头的字母数字序列,是用户定义的单词,用于命名变量、常量、类、对象等元素。,标识符的命名规则说明如下 :,数字指0-9,字母指大小写英文字母、下划线(_)和美元 符($),也可以是Unicode字符集中的字符,如汉字等。 可以是字母、数字等字符的任意组合,不能包括其他 字符(如+、-等) 区分字母大小写 不能使用关键字 长度不受限制,8,一.标识符与关键字,Java约定: 关键字、变量名、对象名、方法名、包名通常全 部小写; 如果由多个单词构成标识符,则首字母小写,其 后单词字母大写,如toString; 类名首字母大写; 常量名全部字母均大写。,9,myV
4、ariable 9pins MYVARIABLE i a+c testing1-2-3,_myvariable 2. $myvariable 3. 猫,一.标识符与关键字,10,一.标识符与关键字,3.分隔符(separator),分隔符用于分开两个语法成分,不同的语法成分使用不同的分隔符。,空格关键字、标识符的分隔符; 分号;语句的分隔符; 逗号,数据的分隔符。,11,一.标识符与关键字,4.注释(commentary),注释:程序中用于说明和解释的一段文字,对程序运行不起作用。程序中添加注释的目的是增强程序的可读性。,/ 单行注释,注释号“/”后的一行内容为注释 /* 多行注释,两个注释号
5、之间的一行或多行内容为注释 */ /* 文档注释,用于从源代码自动生成文档 执行javadoc命令,可根据源代码中的内容生成Web网页 */,12,(结构清晰,适当注释,命名规范),一.标识符与关键字,5. 程序书写风格,结构清晰: 顺序语句对齐格式; 循环体、函数体等语句缩进格式显示语句间的 层次关系,即以上一句为参照,下一句向右缩进4个 空格,其余类推。,13,二. 基本数据类型,1. 什么是数据类型 2.数据类型的分类 3. 基本数据类型整数类型浮点数类型布尔类型字符类型,14,二. 基本数据类型,1. 什么是数据类型,数据描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受
6、的各种符号集合。,类型具有相同逻辑意义的一组值的集合。,数据类型指一个类型和定义在这个类型上的操作集合。定义了数据的性质、取值范围以及对数据所能进行的运算和操作。,15,二. 基本数据类型,2. 数据类型的分类,16,二. 基本数据类型,2. 数据类型的分类,基本数据类型是由一种简单数据构成的数据类型,这种 简单数据的值是不可分解的,它可直接参与该类型所允许的 运算。, 基本数据类型(primitive types),整数类型byte, short, int, long 浮点数类型float, double 字符类型char 布尔类型boolean,17,二. 基本数据类型,2. 数据类型的分
7、类, 引用数据类型(reference types),基本数据类型的变量保存数据值, 引用数据类型的变量保存地址。,引用数据类型:数组(array)、类(class)、接口(interface),18,3. 基本数据类型,整型是具有固定上下界的整数,包括正整数、零、负整数。,Java语言定义了4种整数类型,每种整数类型的值都是带符 号位的,不同整数类型的差别在于占用内存的大小不同和 数据取值范围不同。,一个整数隐含类型为int。表示一个长整数值时,需要在整 数后加上后缀L或l。,Java提供了3种进制的整数表示形式:十进制数、八进制数、十六进制数,(1)整数类型(int),19,(1)整数类型
8、(int),3. 基本数据类型,20,3. 基本数据类型,Java采用浮点型表示数学中的实数,一个浮点数值包括整数部分和小数部分。Java的浮点数类型有两种:单精度浮点数和双精度浮点数,浮点数有两种表示法: 标准记数法如1.0,123.45等 科学记数法由十进制整数、小数点、小数和指数部分构成。如123.45可以表示为1.2345E+2 其中,E之前的数称为尾数,表示数据精度; E之后的数称为阶码,表示是10的次方数,必须是整数。,(2)浮点数类型(float),21,(2)浮点数类型(float),3. 基本数据类型,22,3. 基本数据类型,(3)布尔类型(boolean),Java中的布
9、尔型,它的值只能有“true”或“false”两种形式。与C/C+中的逻辑值不同的是,它不能代表整数,同时它也不是字符串,不能被转换成字符串常量。所有关系运算的返回值都为布尔型,主要用于条件运算。,23,3. 基本数据类型,(4)字符类型(char),字符类型表示Unicode字符,一个字符占用16位。,字符常量的两种表示法: 用单引号将可见ASCII字符括起来;例如A 用Unicode值表示,前缀是“u”,表示范围为 u0000uFFFF;例如u0041表示A。,不可见的ASCII控制字符(如换行符、回车符等)用转义字符表示,转义字符的前缀是“”。 Java转义字符表,24,3. 基本数据类
10、型,(4)字符类型,25,变量在程序执行中其值可以发生变化的量。,三. 变量与常量,1.变量(variable),变量的4个基本要素:名字、类型、值和作用域。, 变量声明,修饰符 类型 变量 =表达式,变量= 表达式,注:和中均是可选项,-可以重复0至1次,-可以重复0至多次。,变量参与的运算和操作 取决于变量的数据类型。,26,三. 变量与常量,2. 最终变量,最终变量Java语言提供一种特殊的变量,只能进行一次赋值。采用关键字final声明。,例如:final int value; /声明最终变量,声明时没有赋值value=100; /最终变量只能进行一次赋值,27,三. 变量与常量,3.
11、 常量,常量在程序执行中其值不能被改变的量。, 直接常量,直接常量指在程序中直接引用的常量,包括数值型常量和非 数值型常量。 数值型常量包括整数和浮点数; 非数值型常量包括字符常量、字符串常量和布尔常量。,28,三. 变量与常量,3. 常量,以标识符形式出现的常量,在程序中不能改变其值,采用关键字final声明。 Java语言约定常量标识符全部用大写字母表示。, 符号常量,例如:final int MAX=10;,29,四. 运算符与表达式,1. 运算符 2. 运算符的优先级 3. 运算符的结合性 4. 表达式书写的注意事项 5. 运算的类型兼容原则 6. 运算的正确性判断,30,四. 运算符
12、与表达式,(1) 算术运算符 (2) 关系运算符 (3) 位运算符 (4) 逻辑运算符 (5) 赋值运算符 (6) 强制类型转换符,1. 运算符,(7) 条件运算符 (8) 括号运算符 (9) 字符串连接运算符 (10) 点运算符 (11) 对象运算符 (12) 逗号运算符 (13) new运算符,31,算术运算符:+(正)、-(负)、+、-;/单目运算+(加)、-(减)、*、/(除)、%(取余);/双目运算,1. 运算符,四. 运算符与表达式,关系运算符:=、=、=,位运算符: (非)、&(与)、|(或)、(异或)、 (右移位)、(无符号右移位),逻辑运算符:&(与)、|(或)、!(非)、(
13、异或)、&(条件与)、|(条件或),32,四. 运算符与表达式, 赋值运算符:= 、+=等, 强制类型转换符:(数据类型) 表达式, 条件运算符:表达式1 ? 表达式2:表达式3, 括号运算符: ()、,字符串连接运算符:+ System.out.println(“max = “+max);,33,四. 运算符与表达式,【例2.1】 求明天是星期几。,【例2.2】 判断一个年份是否为闰年。, 点运算符:., 对象运算符:instanceof, 逗号运算符:, new运算符:用于申请数组存储空间,创建对象。,34,四. 运算符与表达式,【例2.2】判断一个年份是否为闰年.(演示布尔类型的运算),
14、闰年的规定说明: (1)不能被100整除但能被4整除的年份是闰年; (2)能被400整除的年份是闰年。,思考: (1)如果要求任意一年是否为闰年程序怎么改? (2)输入的年份是否应该有个合法范围?,35,不同的运算符具有不同的优先顺序 可以用( )来改变优先顺序或使表达式更容易理解,2. 运算符的优先级,四. 运算符与表达式,表2-7 运算符的优先级及结合性,36,四. 运算符与表达式,3. 运算符的结合性,(1)单目运算符的结合性,从左至右:括号运算符、(),即操作数在运算符的左边;,从右至左:+、-、!、new和类型强制转换符(),即操作数在运算符的右边;,37,四. 运算符与表达式,3.
15、 运算符的结合性,(1)单目运算符的结合性,两种结合性:+、-;,单独运算时,两种结合性运算结果一致。 例如:i+; / 从左至右 +i; /从右至左,当与其它运算符结合时,就表现出两种结合性。 例如:int i=0, j;j=i+; /左结合,先赋值再自增,等价于j=i; i+;j=+i; /右结合,先自增再赋值,等价于i+;j=i;,38,四. 运算符与表达式,3. 运算符的结合性,(2) 双目运算符的结合性,从左至右:其他双目运算符;,从右至左: 赋值和复合赋值运算符;,例如: int m,n;m=n=2; m+=n+=2;,/结果为m=2, n=2/结果为m=6, n=4,39,四.
16、运算符与表达式,4. 表达式书写的注意事项,乘法运算的运算符*不能省略;数学运算的、必须分别写成!=、=、=;数学中的分式必须写成除式;只有圆括号()能够改变运算次序,不能使用或改变运算次序。,40,四. 运算符与表达式,5. 运算的类型兼容原则,(1)类型相容(type compatibility),指两个不同的数据类型具有某些相同的性质,其变量能够 参加共同的运算。,例如:1.0+1 /结果数据类型为浮点型,41,四. 运算符与表达式,5. 运算的类型兼容原则,(2) 赋值相容(assignment compatibility),指一种数据类型的值可以通过赋值操作赋给另一种数据类型的变量。
17、,赋值相容具有方向性,是不对称的关系,即赋值时,变量数据类型必须比表达式数据类型占用的字节数长,Java会自动将表达式转化为较长的数据类型后再赋值。,赋值不相容时, 有些情况可以通过强制类型转换实现。,42,四. 运算符与表达式,6. 运算的正确性判断,43,2.2 流程控制语句,一. 流程控制结构 二. 顺序结构语句 三. 选择语句 四. 循环语句 五. 转移语句,44,一.流程控制结构,1. 程序的三种基本结构,顺序结构、分支结构、循环结构,45,三种基本结构的共同特点:,1.程序的三种基本结构,只有一个入口点,并且只有一个出口点; 结构内的每一部分都有机会被执行到;例图(1) 结构内没有
18、“死循环”(无终止的循环)。例图(2),46,2. Java语句分类,47,二. 顺序结构语句,1. 赋值语句 表达式;,2. 空语句 i=1;,3. 复合语句变量声明或常量声明;语句序列;,48,1. if语句,三. 选择语句if 语句,A. if语句的语法格式 if ( 布尔表达式 )语句1; else语句2;,49,三. 选择语句if 语句,【例2.3】 求三个整数中的最大值。,注意:对比if语句与条件表达式的使用,课后练习:用条件表达式求最大值;用if语句求最小值。,50,if语句,if-else语句,三. 选择语句if 语句,B. if语句两种形式,51,C. If 语句嵌套,三.
19、选择语句if 语句,例:if (n=100)if (n=999)语句1;else语句2;,修改配对关系: if (n=100) if (n=999)语句1;else语句2;,Java语言规定:else总是与最近的一个if语句匹配。,注:缩进书写格式本身与匹配无关。,52,2. switch语句,switch (表达式) case 常量表达式1: 语句序列1;break;case 常量表达式2: 语句序列2;break;default: 语句序列; ,三. 选择语句switch 语句,53,三. 选择语句switch 语句,说明:,(1)和 的数据类型必须是整数或字符类型,不能为布尔类型,并且两
20、者的数据类型必须一致; (2)在语句体中,每个常量表达式出现的先后次序没有限制,但常量结果值必须唯一; (3)不同的常量表达式可以公用一些语句序列; (4)每个分支的语句序列通常以break语句结束,break语句的作用是强制退出switch语句。,54,三. 选择语句switch 语句,【例2.4】求一个日期(年月日)对应的是星期几。P40,55,四. 循环语句while语句,1. while语句,A. while语句语法:while (布尔表达式)语句;,【例2.5】 用while语句求110的累加和。P41,思考:,(1)如果改变循环体内两条语句的次序,则如何修改while语句以实现相同
21、功能?,(2)如何显示:,Sum=1+10=55,Sum(8)=1+2+3+4+5+6+7+8+9+10=36,i=0; while(in),56,class Sum_while public static void main(String args) int i=1, n=10,s=0;System.out.println(“s= ” + s);System.out.println(“i= ” + i); ,四. 循环语句while语句,while (i = n) s+= i;i+;,运行结果:s=55i=11,57,四. 循环语句while语句,B. while语句循环执行次数问题讨论,循
22、环条件永远为true出现死循环;,“先判断后执行”循环最少执行0次;,避免死循环的相关条件循环条件表达式中的变量;,【例2.6】用辗转相除法求两个整数的最大公因数。P42 练习,58,四. 循环语句do-while语句,2. do-while语句,A. while语句语法: do 语句; while (布尔表达式);,59,图2.5 while与do-while语句执行流程,四. 循环语句do-while语句,60,四. 循环语句do-while语句,【例2.5-1】 用do-while语句求累加和。P44,对比: 例2.5 例2.5-1 例2.8while语句do-while语句for语句,
23、61,四. 循环语句do-while语句,public class Sum_dowhile public static void main(String args) int i=1, n=10,s=0;System.out.println(“s= ” + s);System.out.println(“i= ” + i); ,do s+= i;i+; while (i = n),运行结果:s=55i=11,62,B. do-while语句循环执行次数问题讨论,四. 循环语句do-while语句,“先执行后判断”循环最少执行1次;,循环条件永远为true出现死循环;,避免死循环的相关条件循环条件表
24、达式中的变量;,【例2.7】 计算Fibonacci序列。 练习P44,63,A. for语句语法: for (表达式1; 表达式2; 表达式3 )语句;,四. 循环语句for语句,3. for语句最有效、最灵活的循环结构,3个表达式的作用:,(1)给循环变量赋初值; (2)给出循环条件,结果为布尔值; (3)给出循环变量的变化规律,通常是递增或递减的。,64,四. 循环语句for语句,【例2.8】 用for语句求累加和并显示计算公式。P45,对比: 例2.5 例2.5-1 例2.8while语句do-while语句for语句,65,四. 循环语句for语句,例:如果一个人出生于1970年,那
25、么他这一辈子能有几个闰年(以70岁为寿命长度)int length = 70;int firstYear = 1970;int year;for (int i =0; i length; i+) year = firstYear + i; if( (year%4=0,1972 1976 1980 1984 1988 1992 1996 2000 2004 2008 2012 2016 2020 2024 2028 2032 2036,66,四. 循环语句for语句,B.for语句循环执行次数问题讨论,for语句循环执行次数最少是0次; 条件不合适时,for语句也会出现死循环。,for(i=0;
26、i0;i+) for(i=0;i=0;i+) for(i=0;i10;i+) for(i=1;i=10;i+) for(i=1;i10;i-),/循环次数为0 /循环执行1次,/循环执行10次,i取值为0-9 /循环执行10次,i取值为1-10,/死循环,例如:,67,四. 循环语句for语句,for语句中,循环变量的变化规律由给出,不只是增1或减1运算,B.for语句循环执行次数问题讨论,for(i=1;i=8;i+=2),例如:,/循环执行4次,i取值为1、3、5、7,由for语句自动执行,循环体中不需要改变循环变量的值。如果循环体中改变了循环变量的值,则会改变循环的实际执行次数。,例如:
27、,for(i=1;i=10;i+)i+,/表面循环10次,实际循环5次,68,四. 循环语句for语句,C.使用for语句需要注意的问题, for语句中,在条件表达式之后没有分号,在语句之后才有分号;,for语句中的和都可以是逗号表达式,并且 还可以声明变量,此处所声明变量的作用域仅限于for语句的循环体。,虽然for语句中的3个表达式在语法上均可以省略,分号不能省略,但这样就体现不出for语句的长处,不是结构化程序设计的好方法,极易产生错误。,例如:,for(i=1;i=10;i+);s+=i;,例如:,for ( int i=1, j=1; i=10; i+, j+ ),例如:,for (
28、 ; ; ),/ 等价于while (true),死循环,69,1 使用while语句 int count=1; int sum=0; while(count=100)sum+=count;count+; ,3 使用dowhile语句 int count=1; int sum=0; dosum+=count;count+; while(count=100);,2 使用for语句 int sum=0,count; for(int count=0;count=100;count+)sum+=count; , 找出三种语 句形式中的组成部分? 比较三种循环语句的差异。将循环初始值count设为101
29、,观察其sum的值。,四. 循环语句总结对比,70,循环的嵌套 一个循环体内包含另一个完整的循环结构 嵌套的层次多,多重嵌套 while循环、do-while循环、for循环相互嵌套,四. 循环语句多重循环,4. 多重循环,【例2.9】 输出九九乘法表。P46 演示for-for的两重循环结构。,课下练习:,71,五.转移语句,return语句的语法格式: return 返回值;,1.return语句,功能是从当前方法中退出,并返回到调用该方 法的语句处继续执行程序,同时将方法中的运行结 果也带回到调用方法中。,72,switch中用到的(已介绍),用来中止一个语句序列。 break可以用来退
30、出一个循环。 带标号的break,跳出标号表示的循环体。,五. 转移语句,break语句立即退出当前switch语句或循环语句。,2.break语句,73,不带标号的break语句class Test public static void main(String args) for (int j = 1; j 6; j+)if (j =3) break; System.out.print(“j=“ + j);System.out.println(“ stop”); ,j=1 j=2 stop,五. 转移语句,74,用来略过并跳到本次循环体的结尾,结束本次循环,回到循环条件,继续判断是否执行下一
31、次循环。 即如果想循环继续,但是要忽略本次重复剩余的循环体语句时,就应采用continue。,五.转移语句,3.continue语句,continue可以用来退出一次循环过程。 带标号的continue,跳出本次循环,进入标号表示的循环体。,75,五.转移语句,不带标号的continue语句 class Test public static void main(String args) for (int k = 6; k =0; k-=2) if (k = 4)continue;System.out.print(“k=“ + k + “t”); ,k=6 k=2 k=0,76,2.3 数组,
32、在Java中数组是相同类型的对象的集合,并通过一个名称(就是数组名)来引用这个集合。 可以声明任何类型的数组,无论是Java基本数据类型,还是类。,77,2.3 数组, 数组是一组同类型的变量或对象的集合 * 数组的类型可以是基本类型,或类和接口 *数组中每个元素的类型相同 *引用数组元素通过数组名下标 *数组下标(数组的索引)从0开始 数组是一种特殊的对象(Object) * 定义类型 (声明) *创建数组 (分配内存空间) : new * 释放 (Java虚拟机完成) 一维数组、多维数组,78,2.3 数组,一维数组 二.二维数组,79,2.3 数组,一维数组,1. 声明一维数组变量 2.
33、 使用new为数组分配空间 3. 数组长度length 4.数组元素表示及运算 5. 数组声明时赋初值 6. 数组元素的初始化 7. 数组的引用模型 8. 复制数组,80,一.一维数组,1.声明一维数组变量,注意:是数组元素的数据类型; 是用户声明的标识符; 方括号是必需的括号运算符,不是可选项,一对表示一维数组。,数据类型 数组变量 数据类型 数组变量,例如:int a 或int a; /声明数组变量a,中没有长度,a没有获得内存空间,81,一. 一维数组,2.使用new为数组分配空间,数组变量 = new 数据类型长度,注意:是数组元素的数据类型;该数据类型必需与的数据类型匹配; 是数组申
34、请的存储单元个数;必需为大于0的正整数。,例如: a=new int5; /数组a获得5个存储单元的内存空间,存储单元的大小由元素的数据类型决定 int a=new int5; /声明数组变量时,也可以申请存储空间,82,一. 一维数组,3.数组长度length,数组变量.length,Java语言自动为每个数组变量提供length属性表示数组占用的存储单元个数。,4.数组元素表示及运算,数组变量下标,一维数组的一个元素由一个下标唯一确定。 是确定数组元素位置的表达式,其数据类型是整数类型,取值为0a.length-1。 数组元素可以参加其数据类型所允许的运算。,83,一. 一维数组,4.数组
35、元素表示及运算,Java将严格检查数组下标范围:程序运行时如果下标i取值超出范围,则作为错误处理。产生“数组下标越界”异常,程序运行终止。,图2.8 一维数组,84,一. 一维数组,5.数组声明时赋初值,例如: int a=1,2,3,4,5;,数组变量在声明时可以赋初值。,6.数组元素的初始化,Java对所有使用new运算符动态分配的存储单元都进行初始化工作,变量根据其所属的数据类型获得相应初值。,【例2.10】 用一维数组保存Fibonacci序列值。P49,85,一. 一维数组,7.数组的引用模型,Java语言不支持C/C+中的指针类型,所以对数组的操作只能使用下标,不能使用指针。 Ja
36、va的数组都是动态数组,并且是引用数据类型。,引用数据类型与基本数据类型变量: 共同点:都需要声明,都可以赋值; 不同点:存储单元的分配方式不同,两个变量之间的赋值方式也不同。,86,一. 一维数组,7.数组的引用模型,(1)基本数据类型变量的传值赋值 基本数据类型的变量获得存储单元的方式是静态的,声明了变量就意味着该变量占据了存储单元。 变量保存数据值,两个变量之间赋值,传递的是值。,图2.9 基本数据类型变量赋值时传递值,87,一. 一维数组,7.数组的引用模型,(2)数组变量的引用赋值 引用数据类型的变量获得存储单元的方式都是动态的,必须使用new运算符申请并动态获得存储单元。引用变量保
37、存地址、长度、引用计数等特性。 数组是引用数据类型。一个数组变量保存一个数组的引用,即该数组占用的一块存储空间的首地址、长度及引用计数等特性。两个数组变量之间的赋值是引用赋值,传递地址等引用特性,没有申请新的存储空间。,例如:int a=1,2,3,4,5, b;b=a;b1=10;,88,一. 一维数组,7.数组的引用模型,(2)数组变量的引用赋值,图2.10 一维数组的引用模型,89,一. 一维数组,7.数组的引用模型,(2)数组变量的引用赋值,图2.10 一维数组的引用模型,90,一. 一维数组,7.数组的引用模型,(2)数组变量的引用赋值,使用关系运算(=、!=)能够判断两个数组变量是
38、否引用同一个数组。,例如: a=b; /结果为true时引用同一个数组b=new int4; /可以再次为数组变量分配存储空间,通常程序不需要释放数组,Java将自动收回不再使用的数组占用的存储空间。特殊需要时,可将数组变量赋值为null(引用数据类型空值),释放数组空间。,例如: b=null; /对数组变量初始化或释放数组空间,91,一. 一维数组,8. 复制数组,Java的System类提供复制数组的arraycopy()方法。,public static void arraycopy ( Object src, int srcPos, Object dest,int destPos,
39、int length ),arraycopy()方法将src数组从srcPos下标开始的length个元素复制到dest数组从destPos开始的若干个存储单元中。,例如: int a=1,2,3,4,5, b;arraycopy(a,0,b,1,4); /将a数组的前4个元素复制到b数组,92,2.3 数组,二.二维数组,1. 声明二维数组 2. 二维数组的引用模型 3. 不规则的二维数组,93,二.二维数组,1.声明二维数组,在声明二维数组变量及申请存储空间时,用括号运算符标明二维。 数组声明后不能被访问,因为未为数组元素分配内存空间。,int mat; /声明一个二维数组变量mat ma
40、t = new int23; /申请23个存储单元 int mat = new int23; /声明和申请存储空间可以合起来写 int mat = 1,2,3,4,5,6; /声明时可以为二维数组赋初值,将值用多层花括号括起来 二维数组变量下标下标; matij /表示第i行第j列的数组元素,94,二.二维数组,2. 二维数组的引用模型,图2.11 二维数组的引用模型,95,二.二维数组,2. 二维数组的引用模型,例如:mat.length /返回二维数组的长度,即二维数组的行数mat0.length /返回一维数组的长度,即二维数组的列数,【例2.11】 幻方。P52,96,二.二维数组,3
41、. 不规则的二维数组,例如:int mat; mat = new int2; /申请第一维的存储空间mat0=new int2; /申请第二维的存储空间mat1=new int3;,由于Java的二维数组采用动态引用模型,二维数组mat中每个一维数组mat0、mat1等是分散存储的,因此各一维数组mat0、mat1等占用的存储空间可以分多次申请,且长度可不相同。,97,二.二维数组,3. 不规则的二维数组,图2.15 多次申请二维数组存储空间,98,2.4 静态方法,函数:实现特定功能的、可被调用执行并能返回值的程序段。 函数=函数声明+函数体 函数声明:定义函数名、形式参数及返回值。 函数体
42、:由执行操作的语句序列组成。 函数调用必须指定函数名和实际参数,函数执行后返回结果值。,Java语言没有全局函数,函数声明在类中,称为成员方法,分静态方法和实例方法两种。,99,2.4 静态方法,方法声明与调用 二.参数传递 三.方法重载 四.递归方法,100,一.方法声明与调用,1. 方法声明,修饰符 返回值类型 方法 ( 参数列表 ) 语句序列;return 返回值; ,:指定方法的访问权限等特性; :声明形式参数的数据类型,参数名是标识符,多个参数之间以逗号分隔;即使没有参数,()也不能省略。 :描述实现该方法所要求功能的操作,最后用return语句给出方法返回值,该值的数据类型必须与方
43、法声明的返回值类型匹配;没有返回值时,该语句可以省略。,101,一.方法声明与调用,1. 方法声明,局部变量:在方法体中声明的变量; 局部变量和形式参数的作用域都是局部的,仅限于声明它的方法之内。 Java不支持类之外的全程变量。 局部作用域,既使得变量不会被非法访问或修改,增加了安全性,又可在不同作用域中声明同名变量,不会互相干扰。,102,一.方法声明与调用,2. 方法调用,方法(参数列表),方法调用执行方法体,返回结果值,方法返回值可以参加其数据类型所允许的运算。,103,一.方法声明与调用,3. 声明main方法,public static void main(String args)
44、,参数args是一个字符串数组,它接受命令行参数。 main()方法能够调用该类中的其他静态方法,也可通过对象调用实例成员方法。 main()方法只能被Java虚拟机调用执行,不能被其他方法调用。,【例2.12】 输出指定范围内的素数。P55,104,2.4 静态方法,二.参数传递,方法调用时给出的参数是实际参数,可以为常量、变量、表达式或方法调用等。 实际参数必须在数据类型、参数个数和次序等三个方面与形式参数一一对应。 形式参数若是基本数据类型,方法调用时则传递值;若是引用数据类型,方法调用时则传递引用。同样,方法返回值也因数据类型不同,分别传递值或引用。,105,2.4 静态方法,二.参数
45、传递,【例2.13】 交换两个变量值问题讨论。P56 说明基本数据类型和引用类型在作为方法形式参数时的 参数传递原则。 不能实现交换两个变量值的方法 能够交换两个数组元素值,106,2.4 静态方法,二.参数传递,【例2.14】 合并两组数 P57 演示数组作为方法的参数和返回值。,申请到一个数组,该数组的地址和长度就是确定的,不能更改。当数据容量不够时,不能就地扩容。解决数据溢出的办法是,动态申请另一个更大容量的数据并进行数组元素复制。,【例2.15】 杨辉三角。P58课下练习,107,2.4 静态方法,三.方法重载,方法的重载:一个类中如果有多个同名方法但带有不同的参数列表。 重载的参数列
46、表不同:指参数的数据类型或个数或次序不同。 重载方法之间必须以参数列表相区别,不能以返回值相区别。,例如:static int abs(int a) static long abs (long a)static float abs (float a)static double abs (double a),重载的价值:为一个功能提供多种实现形式。,108,四.递归方法,1. 递归定义 递归是数学中的一种重要的概念定义方式,即用一个概念本身直接或间接地定义它自己。,递归的两个基本要素: 边界条件至少有一个初始定义是非递归的。 递推通式由已知函数值逐步递推计算出未知函数值。,109,四.递归方法,
47、2. 递归算法,递归算法存在直接或间接调用自身的算法。 递归定义的问题可用递归算法求解,按照递归定义将问题简化,逐步递推,直到获得一个确定值。,【例2.16】 求n!的递归方法。P60,【例2.17】 求Fibonacci数列第n项的递归方法。P61,110,【例2.16】 求n!。 f(n) = n*f(n-1)5!=5*4*3*2*1=5*4!0! = 1 或 1! = 1 n! = n*(n-1)!,四.递归方法,111,2.5 字符串,字符串:字符的有限序列。Java的字符串String是一个类,属于引用数据类型。 String类的特殊之处在于它具有某些基本数据类型的特性。,112,2.5 字符串,字符串的基本数据类型特性 二.字符串的类特性,113,一.字符串的基本数据类型特性,1. 字符串常量,字符串常量:由双引号括起来表示的字符序列,可包含转义字符。,例如: “hello!”、“汉字n”、 “”等。,字符串只能在同一行内,不能换行。 字符串长度指其中包含的字符个数。 约定字符串中第一个字符的序号为0,-1表示某字符不在指定字符串中。,114,一.字符串的基本数据类型特性,2. 字符串变量及运算,(1) 赋值运算String str = “abc”; /字符串变量赋值为字符串常量String str2 = str; /两个字符串变量赋值,