1、第2章 Java语言基础,2.1 标识符 2.2 变量和常量 2.3 基本数据类型 2.4 赋值语句 2.5 运算符和表达式 2.6 流程控制语句 2.7 程序注释 2.8 数组 2.9 字符串,2.1 标识符,Java语言的字符使用Unicode字符集。Unicode字符集中的每个字符为16位编码 标识符是由字母、数字、下划线(_)、美元符($)组成的、必须以字母、下划线或美元符开头的、字符个数有限的字符序列。如i、count、myStack、GetValue、_length等 标识符可以用来命名变量名、常量名、类名等 有固定含义的标识符称作关键字。用户不允许用关键字定义标识符。如for、i
2、f等,2.2 变量和常量,2.2.1 变量 2.2.2 常量,2.2.1 变量,变量是一个保存数据的内存区域的名字。变量必须先声明,然后才能使用 变量声明是指示编译器为特定数据类型的数值保存分配适当的内存空间 变量声明的格式为:; 变量的使用范围称作变量的作用域。变量的使用范围是定义该变量的程序块,2.2.2 常量,在整个程序运行期间保持不变的量称作常量。或者说,常量是数值不变化的量 定义常量的方法是在定义变量的语句最前面加上关键字final。例如, final int MAXSIZE = 100;,2.3 基本数据类型,数据类型规定了一类数据的数据位长度(或称字符个数)、取值范围以及对该类数
3、据所能进行的操作 Java语言定义的8种基本数据类型及相应的关键字如下: 整型: byte 、short、 int、 long 浮点型:float、double 逻辑型:boolean 字符型:char,1. 整型,byte 、short、 int、 long整型只是数据的范围不同 整型数可以表示为十进制、八进制或十六进制: 十进制:用若干个09之间的数字表示,并规定首位不能为0。如123,-100。 八进制:以0打头,后跟若干个07之间的数字。如0123。 十六进制:以0x或0X打头,后跟若干个09之间的数字以及af之间的小写字母或AF之间的大写字母,af或AF分别表示数值10 15。如0X
4、123E,2. 浮点型,float和double型数只是数据位(或数值范围)不同 浮点型数由整数部分和小数部分组成。浮点数有两种表示方式: 标准记数法:由整数部分、小数点和小数部分构成。如123.123,123.0 科学记数法:由整数、小数点、小数和指数部分构成,指数部分由一个e或E后跟带正负号的整数表示。如123.123用科学记数法可表示为1.23123E+2 规定:未明确定义的浮点型都隐含为double型。若要将一个浮点型明确地表示为float型时,需在后面加F或f,如123.123F或1.23123E+2f,3. 逻辑型,逻辑型用来定义保存逻辑值的变量 逻辑型也称为布尔型 逻辑值只有真(
5、true)和假(false)两个值。 所有逻辑运算(如ab)的运算结果值都是逻辑值,如当a = 4,b = 6时,逻辑运算ab的结果值就是true,4. 字符型,一个Unicode标准下的编码称作一个字符 Unicode标准用16位编码表示一个字符。如a、A、#等都是字符型 一些控制字符不能在屏幕上直接显示,使用转义字符的表示方法,2.4 赋值语句,赋值语句的语法形式: = ; 类型相同。可正确赋值。例如:int smallValue =100;long bigValue = 100L; 类型兼容。可正确赋值。例如:long bigval = 100;double x = 12.345F; 类
6、型不兼容。编译时会出错。例如:int smallValuel = 100L; /100L是long类型 float x = 12.345; /12.345是double类型,2.5 运算符和表达式,Java语言在基本关键字、运算符、表达式、赋值语句、流程控制语句等和C/C+基本相同 2.5.1 运算符及其分类 2.5.2 运算符的优先级 2.5.3 表达式,2.5.1 运算符及其分类,Java的运算符可分为4类: 算术运算符 关系运算符 逻辑运算符 位运算符,1.算术运算符,一元运算符。有+、+、。例如,int i=6,j,k,m,n;k = -i;m = i+; 二元运算符。有+、*、%a%
7、b的计算公式为:a % b = a (a / b) * b7 / 3 /整除,运算结果为27.0 / 3 /除法,运算结果为2.333337 % 3 /取余,运算结果为17.0 % 3 /取余,运算结果为1.0,2. 关系运算符,用于比较两个数值之间的大小,其运算结果为一个逻辑类型的数值 关系运算符有六个:= = 、! = 、 、 = 、 = 8.8 /运算结果为trueA a /运算结果为true,3. 逻辑运算符,逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。逻辑运算符有:&、|、! 、&| &和&的运算规则基本相同。区别是:&和 | 运算是把逻辑表达式全部计算完,而&和
8、 | 运算具有短路计算功能 所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。例如,有如下逻辑表达式:(i=1) & (i=100),4. 位运算符,位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。位运算符有: int z = xy /z等于二进制数的00010001,5. 其他运算符,条件运算符(?:) 语法为:表达式1?表达式2:表达式3 运算方法:先计算表达式1的值,当表达式1的值为true时,则将表达式2的值作为整个表达式的值;当表达式1的值为false时,则将表达式3的值作为整个表达式的值。如:int a=1,b
9、=2,max;max = ab?a:b; /max等于2 强制类型转换符。将一个表达式的类型强制转换为某一指定数据类型。语法形式为:(类型) 表达式,2.5.2 运算符的优先级,教材中的表2.8按优先级从高到低的次序列出Java语言中的所有运算符 表中结合性一列中的“左右”表示其运算次序为从左向右,“右左”表示其运算次序为从右向左,2.5.3 表达式,用运算符和圆括号把运算对象连接起来的、符合Java语言语法规则的式子称作表达式。有算术表达式、关系表达式、逻辑表达式、位表达式。 如: int i=5; (i100) /结果为boolean型 (i-2)*8+5 /结果为int型 “Abcde”
10、+“12345” /结果为String型,2.6 流程控制语句,2.6.1 分支语句 2.6.2 循环语句 2.6.3 break语句和continue语句 2.6.4 return语句,2.6.1 分支语句,分支结构是指程序按照当前的分支条件控制程序流程的执行。有:if语句和switch语句 if语句实现二路分支,switch语句实现多路分支,1. if语句,(1) 基本的if 语句if (逻辑表达式 )语句组1;else 语句组2; (2) if语句嵌套。if语句中又包括另一个if语句。 if (n = 1) if (n = 100) else ,2. switch语句,switch语句是
11、多个分支的流程控制语句。语法为:switch (表达式)case常量1:语句组1;break;case常量2:语句组2;break; default:语句组,3. switch语句中的break语句,switch语句本身并不能保证执行完一组case后的语句或语句组后,跳过随后的case判断,通常情况下,此时需要用break语句来跳过随后的case语句 break语句的语法形式是:break; switch语句中的break语句的语义是:跳过break语句所在位置随后所有的case语句,即结束switch语句的执行,1. for语句,for语句的语法形式为:for (表达式1;表达式2;表达式3
12、)循环体; 例 求1到10累加和for(i = 1; i = n; i+)sum = sum + i; 说明:无论是表达式1还是表达式2或者是表达式3,都可以任选,2. while语句,while语句的语法形式为:while (逻辑表达式)循环体;求1到10累加和int i = 1,n = 10,sum = 0; while (i = n) sum = sum + i;i+;,3. do-while语句,语法形式为:do语句组; while (逻辑表达式) ; do-while语句和while语句的惟一差别是:do-while语句至少执行一次循环体(因其结束条件判断在后面进行);而对于whil
13、e语句来说,当一开始循环条件就不满足时,循环体将一次也不执行,4. 多重循环,如果循环语句的循环体内又有循环语句,则构成多重循环结构。多重循环结构中的循环语句,可以是前面讨论过的for语句、while语句或do-while语句中的任何一种 当应用问题复杂时,程序一般需要有多重循环结构,此时最重要的是要把程序设计的思路梳理清楚,而其中的每一重循环结构都可以按单重循环结构设计,例 求1到10累加和,int i = 1,n = 10,sum = 0; while (i = n) sum = sum + i;i+; 和for语句相比,while语句循环中的循环变量赋初值(i = 1)、循环过程结束判断
14、(i = n)和循环变量修改(i+)三个部分都有,只是放在了不同的地方,2.6.2 循环语句,循环结构是指程序按照当前的循环条件控制程序流程的执行 Java语言有三种循环结构的语句:for语句、while语句和do-while语句 这三种循环语句虽然控制循环的方式不同,但实现循环的功能相同。换句话说,对于任何一个循环问题,这三种循环语句都可以实现。但是,不同的循环问题,使用这三种循环语句的简便程度不同。因此,一个好的程序设计者,应该学会针对不同的循环问题,选择最简便的循环语句,2.6.3 break语句和continue语句,break语句通常是和switch语句或循环语句配合使用,conti
15、nue语句通常是和循环语句配合使用。 break语句 continue语句,1. break语句,break语句的语法形式是:break; 在循环语句中,break语句的功能是跳出循环体 特别说明,当break语句位于多重循环语句的内层时, break语句只能跳出它当前所处的那层循环体,2. continue语句,continue语句的语法形式为: continue; continue语句主要用于循环语句中,continue语句的语义是:若循环体中遇到continue语句,则本次循环体的后续语句被忽略,回到循环条件判断处,判断是否执行下一次循环体。换句话说,continue语句仅跳过当前层循环
16、体的剩余语句,2.6.4 return语句,return语句的语法形式为:return ; 语义是:使函数返回原调用处,且带回返回值。如果函数为void类型,则return语句后没有;如果函数为非void类型,则return语句后需要有,并且的类型必须和函数的类型一致。 当return语句不带,并且位于函数的最后时,return语句可以省略,2.7 程序注释,Java语言有三种形式的注释: 单行注释/ 注释内容 多行注释/* 多行注释内容*/ 文件注释 /* 文件注释内容 */,2.8 数组,数组是连续内存单元中一组名字和数据类型相同的数据元素的有限集合。数组可以用来保存和处理一组数据类型相同
17、的数据元素。数组中的每个数据元素称作一个数组元素 2.8.1 一维数组 2.8.2 二维数组 2.8.3 不规则的二维数组,生活案例:博物架,为什么需要数组3-2,字画类,好办法分类放,易于找1、格子提供了存储空间 2、每一类别都起一个名字 3、每件物品都有个标号,古玩类,类比博物架:可不可以把数据归类存放? 分类存放不同类型的数据,为什么需要数组3-3,int类型,double类型,char类型,数组在内存中的存储,80,内存,整型数组 int b = 100,98,;,整型变量 int a = 80;,数组定义,数组是一个变量,存储相同数据类型的一组数据,int类型,元素,博物架名,标识符
18、,古玩,物品编号,元素下标,物品类型,元素类型,数据,小结1,1、使用数组的好处是什么?2、下列哪组数据能存储在数组中?数组的类型是什么? “刘星”,“夏雨”,“夏雪” 8,98,c,23 98.1,341.2,34.3,数组中的所有元素必须属于相同的数据类型,String型,double型,使用数组四步走: 1、声明数组2、分配空间3、赋值4、处理数据,如何使用数组,int a;,a = new int5;,a 0 = 8;,a 0 = a0 * 10;,a,8,80,a0,数组的声明,int score1; /Java成绩 int score2 ; /C#成绩 String name; /
19、学生姓名,声明数组: 告诉计算机数据类型是什么,1,数据类型 数组名 ;,数据类型 数组名 ;,数组初始化,score = new int30; avgAge = new int6; name = new String30;,30,分配空间: 告诉计算机分配几个格子,数组属于引用数据类型,2,数据类型 数组名 = new 数据类型大小 ;,声明数组并分配空间,数组赋值,score0 = 89; score1 = 79; score2 = 76; ,赋值:向分配的格子里放数据,30,score0,score1,score2,89,79,76,太麻烦!能不能一起赋值?,3,数组赋值,方法1: 边声
20、明边赋值方法2:动态地从键盘录入信息并赋值,解决,int score = 89, 79, 76;,Scanner input = new Scanner(System.in); for(int i = 0; i 30; i +)scorei = input.nextInt(); ,int score = new int 89, 79, 76;,使用数组求平均值2-1,int score = 60, 80, 90, 70, 85; double avg; avg = (score0 + score1 + score2 + score3 + score4)/5;,int score = 60, 8
21、0, 90, 70, 85; int sum = 0; double avg; for(int index = 0; index score.length; index+)sum = sum + scoreindex; avg = sum / score.length;,成绩单,访问数组成员:使用“标识符下标”,访问成员,数组的length属性,对数据进行处理:计算5位学生的平均分,4,使用数组求平均值2-2,回顾问题1:,令狐冲的班里有30位学生,使用动态录入并赋值的方式计算平均分,public class HelloAccp2public static void main(String a
22、rgs)int score = new int ;score0 = 89;score1 = 63;System.out.println(score0); ,常见错误3-1,编译出错,没有写明数组的大小,public class HelloAccp3public static void main(String args)int score = new int2;score0 = 89;score1 = 63;score2 = 45;System.out.println(score2); ,常见错误3-2,编译出错,数组越界,常见错误3-3,public static void main(Stri
23、ng args)int score = new int5;score = 60, 80, 90, 70, 85;int score2;score2 = 60, 80, 90, 70, 85; ,编译出错,创建数组并赋值的方式必须在一条语句中完成,public class HelloAccp4public static void main(String args)int score = new int3;score0 = 89;System.out.println(score1); ,int数组元素缺省值为0,0,输出结果,小结2,使用数组的步骤是什么?有一个数列:8,4,2,1,23,344,
24、121)循环输出数列的值2)求数列中所有数值的和3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数,2、从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分,求最大值3-1,打擂台,擂台,求最大值3-1,根据打擂台的规则:,max = stu0 ; if (a1max )max=a1 ; if (a2max )max=a2 ; if (a3max )max=a3 ; ,使用循环 来解决,求最大值3-3,/计算成绩最大值max = score0;for (int index = 1;index max) max = scoreindex;System.out.println(“
25、本次考试的五位学生的最高分是: “ + max);,循环打擂,使用max存储擂主初始值:第一个元素为擂主,小结3,小明要去买一部手机,他询问了4家店的价格,分别是2800元,2900元,2750元和3100元,显示输出最低价,int min = list0; /存储最小值 for ( int i = 0; i listi ) min = listi; /交换 ,数组的优点是什么? 数组的3种声明方式是什么? 如何引用数组中的元素? 求数列的平均值、最大值?,总结,回顾,阅读下面代码,哪个有错误?说明理由填代码:逆序输出数组中的元素,double a = new double ;,double
26、a = new double51,2,3,4,5,;,double a = 1,2,3,4,5;,int a = new int 1,2,3,4,5; for (_; _; _ )System.out.println(ai); ,int i = a.length -1,i = 0,i- -,预习检查,如何定义一个字符串? 使用什么方法可以获得字符串的长度? 如何定义一个StringBuffer类的对象?,掌握String的基本用法 如何定义、初始化字符串 如何访问字符串长度 如何比较、连接、提取字符串 会使用带参数的方法 会使用StringBuffer类的方法对字符串进行操作,本章目标,无处不
27、在的字符串,生活中的字符串使用String对象存储字符串String类位于java.lang包中,具有丰富的方法 计算字符串的长度 连接字符串 比较字符串 提取字符串,频繁使用的字符串,“有志者事竟成 ”,“离奥运会开幕还有380天”,“教育改变生活”,String s = “有志者事竟成“;,String s = new String(“有志者事竟成“);,字符串长度2-1,package s1java.sg.chap9; import java.util.*; public class HelloAccp1 public static void main(String args) Syst
28、em.out.print(“请随机输入你想到的名字: “);Scanner input = new Scanner(System.in);String name = input.next();System.out.println(“这个名字的长度是: “ “ + name.length()+ “ “);,随机输入你心中想到的一个名字,然后输出它的字符串长度,调用字符串的length()方法可以获得字符串的长度,要想打印输出引号(”),必须在字符串中使用转义序列”,字符串长度2-2,计算字符串长度,字符串,长度,调用length() 方法获得,返回字符串中的字符数,调用方法:,字符串标识符.le
29、ngth();,方法原型:,public int length() ,字符串比较4-1,两个学员输入各自最喜欢的课程名称,判断是否一致,/判断课程名称是否相同if(favCourse1.equals(favCourse2)System.out.println(“最喜欢的课程相同“);elseSystem.out.println(“最喜欢的课程不相同“);,比较两个字符串是否相等,字符串比较4-2,equals()方法比较原理输入的“Java”和“java”代表同一课程,如何解决? 使用equalsIgnoreCase()方法 结合toUpperCase()或toLowerCase(),字符串
30、1,字符串 2,检查组成字符串内容的字符是否完全一致,字符串比较4-3,使用equalsIgnoreCase()方法解决,比较时忽略大小写形式,if(favCourse1.equalsIgnoreCase(favCourse2)System.out.println(“最喜欢的课程相同“);elseSystem.out.println(“最喜欢的课程不相同“);,字符串比较4-4,结合toUpperCase()方法解决,Java,使用 toUpperCase( ) 方法,JAVA,Java,使用 toLowerCase( ) 方法,java,if(favCourse1.toUpperCase()
31、.equals(favCourse2.toUpperCase()System.out.println(“最喜欢的课程相同“); elseSystem.out.println(“最喜欢的课程不相同“); ,小结1,学员进行入学注册,输入两次密码,如果相同,提示注册成功,如果不相同,提示重新输入密码,选用哪个方法更合适?,参考代码,字符串连接2-1,令狐冲的Java成绩如表所示,输出他的成绩单,public static void main(String args) int sqlScore = 80; /sql成绩int javaScore = 90; /java成绩double htmlSco
32、re = 86.7; /html成绩/创建成绩单String scoreSheet = “SQL:“ + sqlScore + “ Java:“ + javaScore + “ HTML:“ + htmlScore; /打印成绩单System.out.println(“*令狐冲成绩单*“);System.out.println(scoreSheet);,“+”连接字符串,String scoreSheet = “SQL:t“ + sqlScore + “nJava:t“ + javaScore + “nHTML:t“ + htmlScore;,数值型变量自动转换成String类型,字符串连接2
33、-2,方法1:使用“+”方法2:使用String类的concat()方法,你好,张三!,String s = new String(“你好,“); String name = new String(“张三!“); String sentence = s.concat(name); System.out.println(sentence);,输出结果,A.concat(B): B字符串将被连接到A字符串后面,字符串常用提取方法4-1,使用作业提交系统提交Java作业,输入java源代码文件名,并输入自己的邮箱,提交前对Java文件名以及邮箱有效性进行检查。编码实现,合法的文件名应该以.java结
34、尾 合法的邮箱名中至少要包含“”和“.”, 并检查“”是否在“.”之前,字符串常用提取方法4-2,常用提取方法举例,返回出现第一个匹配的位置, 如果没有找到字符或字符串,则返回-1,0 1 2 3,位置,字符串常用提取方法4-3,beginindex: 字符串的位置从0开始算;endindex: 字符串的位置从1开始算,字符串常用提取方法4-4,/检查Java文件名int index = fileName.lastIndexOf(“.“);if(index!=-1 ,/检查你的邮箱格式 if (email.indexOf() !=- 1 ,完整代码演示,作业提交系统,小结2,如果要打印输出“小
35、鱼儿”,应填入的代码是什么?,String word = “Hello, “; word = word.trim(); String s = word.concat(“小鱼儿!“); int index1 = s.indexOf(,); int index2 = s.indexOf(!); System.out.println(s.substring(_, _);,index1+1,index2,带参数的方法就在身边,public String concat (String str) public int indexOf (String value) public String substri
36、ng (int index) 方法实施时需要接收某个值进行处理,返回值类型,方法名,参数,为什么要用带参数的方法,工作原理,新鲜桃汁,新鲜苹果汁,新鲜梨汁,输出三种果汁,如何使用带参数的方法,定义带参数的方法调用带参数的方法,public class Zhazhi /定义带参数的zhazhi方法public String zhazhi ( String fruit ) String juice = fruit + “汁“;return juice; ,/*调用zhazhi方法*/ Zhazhi myZhazhi = new Zhazhi(); String myFruit = “苹果“; St
37、ring myJuice = myZhazhi.zhazhi(myFruit); System.out.println(myJuice);,参数列表: (数据类型 参数1,数据类型 参数2),调用方法,传递的参数要与参数列表一一对应,完整代码演示,完整代码演示,带参数的方法应用2-1,输入学期代码,输出该学期的课程信息,if (courseCode.equalsIgnoreCase(“s1“)System.out.println(“第一学期的课程是:“);for(int i = 0; i s1Course.length; i+)System.out.println(s1Coursei);els
38、e if (courseCode.equalsIgnoreCase(“s2“)System.out.println(“第二学期的课程是:“);for(int i = 0; i s2Course.length; i+)System.out.println(s2Coursei);else if (courseCode.equalsIgnoreCase(“y2“)System.out.println(“第三学期的课程是:“);for(int i = 0; i y2Course.length; i+)System.out.println(y2Coursei);,重复代码: 实现相同的功能“根据不同的课
39、程代号输出相应课程信息”,使用方法可以增加代码重用,完整代码演示,带参数的方法应用2-2,更高效的代码,public class AccpSchool public void courseInfo(int courseCode, String course)System.out.println(courseCode + “的课程是:“);for(int i = 0; i course.length; i+)System.out.println(coursei); ,定义AccpSchool类的带参方法:输出课程信息,AccpShool school = new AccpSchool(); sc
40、hool.courseInfo(courseCode, s1);,调用courseInfo方法,并传入相应的课程代号和课程信息数组,完整代码演示,小结3,实现MP3播放器:1)播放录入的音乐名称 2)外放正在播放的歌曲,StringBuffer,StringBuffer:String增强版 StringBuffer声明StringBuffer的使用,StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer(“aaa“);,创建空字符串,创建一个变量存储字符串aaa,sb.toString(); /转化为St
41、ring类型,sb.append(“*“); /追加字符串,StringBuffer的用武之地,/声明课程信息字符串StringBuffer course = new StringBuffer();System.out.println(“请输入S1课程信息: “);Scanner sc = new Scanner(System.in);/循环从键盘接收字符串String input;while(!(input = sc.next().equals(“#“)course.append(input);course.append(“n“);System.out.println(“s1的课程信息是:“
42、 + course);,定义StringBuffer的实例,存储课程字符串,循环追加字符,使用StringBuffer,效率高!,从控制台接收课程信息,不断累加直到输入“#”键结束,并输出全部课程信息,完整代码演示,Java语言特点总结,简单易学 丰富且功能强大的类库(Java Doc我们的法宝) java.lang.*:提供利用 Java 编程语言进行程序设计的基础类 java.util.*:提供集合框架,Collection类,日期,实用工具等类 java.io.*:提供强大的系统输入和输出 javax.sql.*: javax.xml.*: 提供强大的网络支持(后续课程:深入OOP、JSP B/S开发技术),总结,如何定义一个String类的实例? 使用什么方法可以实现以下功能: 获得字符串的长度 在原始字符串后追加另一个字符串 如何比较两个字符串的内容是否相等 如何定义和使用带参数的方法? 使用StringBuffer的优点是什么?,