《第2章Java语言编程基础(贾克).ppt》由会员分享,可在线阅读,更多相关《第2章Java语言编程基础(贾克).ppt(73页珍藏版)》请在三一文库上搜索。
1、第2章 Java语言编程基础,主讲:贾克,复习与思考,1、举例说明什么是对象,什么是类,类和对象有什么不同? 2、举例说明类的继承性。,2.1 Java语言的基本组成,2.1.1 分隔符 1空白符:换行、回车、空格、tab 2注释语句:例题参见P25 / 一行的注释内容 /*一行或多行的注释内容*/ /*文档注释内容*/ 3普通分隔符: ; , :共4种,2.1 Java语言的基本组成,2.1.2 关键字 所有的关键字都是小写的。参见P25 const和goto是java的保留字,但已经不再使用 then和sizeof都不是java的关键字,大写的NULL不是java语言的关键字,String
2、是java语言的一个封装类的类名,也不是关键字,使用时要注意。,2.1 Java语言的基本组成,2.1.3 Java语言标识符 首字符必须是字母(大小写均可)、下划线或美元符$ 标识符可以由数字(0-9)、所有从A-Z的大写字母、a-z的小写字母和下划线、美元符$和所有在十六进制0xc0前的ASCII码等构成 长度不限,2.1 Java语言的基本组成,2.1.4 Java的编码规范 包package:包名采用完整的英文描述符,全由小写字母组成 类class和接口interface:类名采用完整的英文描述符,所有单词的第一个字母均大写 组件/部件(Component):使用完整的英文描述来说明组
3、件的用途,末端应接上组件类型,2.1 Java语言的基本组成,2.1.4 Java的编码规范 异常(Exception):通常采用字母 e 表示异常的实例 变量variable和方法method:采用完整的英文描述,第一个字母小写,后面任何单词的首字母大写 静态常量字段(static final):全部采用大写字母,单词之间用下划线分隔,2.2 基本数据类型,数据类型,2.2 基本数据类型,2.2.1 基本数据类型 1布尔型boolean 也称为逻辑型,只有两个取值:true表示逻辑真,false表示逻辑假,这种变量称为boolean型变量 2字符型char char型是用来表示字母的,它仅能
4、表示一个单一的Unicode字母,其值用16位无符号整数表示(2个字节,因此可以存放汉字),范围是065535,2.2 基本数据类型,2字符型char 例:下面分别输出什么? char a=a; System.out.println(a); int a=a; System.out.println(a); char a=a+1; System.out.println(a);,2字符型char 在java中,对char进行运算的时候,就是将其当作其ASCII码对应的整数。,2.2 基本数据类型,2.2.1 基本数据类型 3.整型 在Java语言中,提供了4种整型数据类型:byte、short、in
5、t、long,它们都是定义了一个整数,但它们能够表示数据的范围不同。 byte 1个字节 -128127 -21*8-1 21*8-1-1 short 2个字节 -22*8-1 22*8-1-1 int 4个字节 -24*8-1 24*8-1-1 long 8个字节 -28*8-1 28*8-1-1,2.2 基本数据类型,2.2.1 基本数据类型 3.整型 判断输出 byte a=128; System.out.println(a); int a=077; System.out.println(a); int a=0X77; System.out.println(a);,2.2 基本数据类型,
6、2.2.1 基本数据类型 4浮点型 在Java语言中有两种浮点数类型:float、double 区别在于表示范围不一样。 float 4个字节 double 8个字节 浮点数常量是double类型 如果要求是float型实数,必须加上F标志,判断输出 float a=3.4; System.out.println(a); 问题: float 也叫单精度,double双精度,他们表示的精度有什么差别吗?,2.2 基本数据类型,2.2.2 数据类型转换 自动类型转换 判断对错: int a=3.4; double a=3.4; 强制类型转换 int a=(int)3.4;,2.2 基本数据类型,2
7、.2.2 类型转换 计算中类型转换: 整型、实型、字符型数据可以进行混合运算。运算时,不同类型的数据先转换成同一类型后再参与运算,转换的原则是位数少的类型转换成位数多的类型,称为自动类型转换,例:下面会出现何种情况? int a =3; int b=a+3.4; int a=15; float b=3.0f; System.out.println(“a=“+a+“,b=“+b+“n“); System.out.println(“a/b=“+a/b+“n“);,例: int a=7; int b=3; float g,h; System.out.println(“a=“+a+“,b=“+b);
8、g=a/b; System.out.println(“a/b=“+g+“n“); System.out.println(“a=“+a+“,b=“+b); h=(float)a/b; /若此处改为=(float)(a/b); System.out.println(“a/b=“+h);,2.3 运算符与表达式,2.3.1 算术运算符 1. 双目算术运算符 双目算术运算符包括+、-、*、/和%(取模)五种运算符。 例:用java编写程序计算两个数是否能够整除,public class $2 public static void main(String args) int a =3; int b=6;
9、 if (b%a=0) System.out.println(“yes“); else System.out.println(“no“); ,2.3 运算符与表达式,2.3.1 算术运算符 2单目算术运算符 +,+,-,- int i=10,j,k,m,n; j=+i; k=-i; m=i+; m=+i; n=i-; n=-i;,2.3 运算符与表达式,2.3.2 关系运算符 = = = != 注意:=不是关系运算符,而是赋值运算符,2.3 运算符与表达式,2.3.3 逻辑运算符 &、|、!、&、|、 &、| 为双目运算符,实现逻辑与、逻辑或。 &、| 非简洁运算 对于布尔逻辑运算,先求出运算
10、符左边的表达式的值,对或运算如果为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算;同样,对与运算,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false,这种逻辑运算又称为逻辑短路与和逻辑短路或。,2.3.3 逻辑运算符 int i=10; boolean k=(true|(9i+); System.out.println(“i=“+i); System.out.println(“k=“+k); int i=10; boolean k=(true| (9i+); System.out.println(“i=“+i); System.o
11、ut.println(“k=“+k);,2.3 运算符与表达式,2.3.4 位运算符 按位取反 & 按位与 | 按位或 按位异或 op1右移op2位 op1无符号右移op2位 注意:0和1如何进行位运算,int i=1; int j=2; int flag=i|j; System.out.println(“flag=“+flag); int flag=ij;,同的区别:最高位的填充 -42; -1 最高为填充与原最高位相同 -42; 1073721823 最高位一律填充0,2.3 运算符与表达式,2.3.5 赋值运算符= 1.赋值运算符 赋值运算符“=”把一个数据赋给一个变量,在赋值运算符两侧
12、的类型不一致的情况下,进行类型转换 2.扩展赋值运算符 在赋值符“=”前加上其它运算符,即构成扩展赋值运算符 a +=3等价于a=a+3,2.3 运算符与表达式,2.3.6 条件运算符 条件运算符 ?:为三目运算符,它的一般形式为: expression? statement1: statement2 例: int a=2,b=3 int maxValue= ab?a:b,2.3.7 表达式 计算优先级大体上 由高到低排列为: 一元运算符算数运算符关系和逻辑运算符赋值运算符 a=b&cd|e=f,复习提问,1、指出下面的标识符,哪些合法,哪些非法? char i90 integer_2 71s
13、tring myFile-2 文件1 I love Java! 2、&运算与&运算有什么区别? 3、643 = ?,2.4 数组,Java语言把内存分两种: 栈内存:存放基本类型的变量和对象的引用变量 例:int a=6; char b=k; Cat cat1=new Cat(); 内存cat1内存放的是堆cat1的首地址 堆内存:存放由New运算符创建的对象和数组 例: Cat cat1=new Cat();,2.4 数组,2.4.1 一维数组 1.一维数组的定义 int a ; 或 int a ; 2一维数组元素的引用 定义了一个数组,并用运算符new为它分配了内存空间后,就以引用数组中的
14、每一个元素了。 a=new int3; 数组元素的引用方式为:数组的第一个元素:a0,二:a1,三:a2,2.4.1 一维数组 int a; a=new int3; int a=new int5;,2.4 数组,2.4.1 一维数组 3一维数组的初始化 对数组元素可以先声明再进行赋值。也可以在定义数组的同时进行初始化。 int a=new int3; a0=1; a1=2; a2=3; 如:int arr=2,4,6,8,4; 但int arr5=2,4,6,8,4;非法,例:方老太养了6只鸡,体重分别 1kg,2kg,3kg,3kg,4kg,5kg,求这些鸡的总体重, 体重分别1kg,2kg
15、,3kg,3kg,4.4kg,5.2kg,求平均体重。 数组的定义,初始化,赋值,引用,int a; a=new int6; a0=1; a1=2; a2=3; a3=4; a4=5; a5=6; int i; int sum=0; for(i=0;ia.length;i+) sum=sum+ai; System.out.println(“sum=“+sum);,float a=1,2,3,3,4.4f,5.2f; int i; float sum=0,aver=0; for(i=0;ia.length;i+) sum=sum+ai; aver=sum/6; System.out.printl
16、n(“aver=“+aver);,数组不能越界 int a=new int3; a3=4; 如何知道数组的长度 a.length,例2-8:求Fabonacci数组的前10项。 int f; f1=1; f2=1;,int f,i; f=new int10; f0=1; f1=1; for(i=2;i10;i+) fi=fi-1+fi-2; for(i=0;i10;i+) System.out.println(“f“+i+“=“+fi);,既然int,float,double都可以有数组,那么,可不可以有对象数组呢? 养鸡厂有4只鸡,求这些鸡体重最大和最小那只的名字,class Chick S
17、tring name; float weight; public class $2 public static void main(String args) float maxweight=0,minweight=4.5f; int maxnum=0,minnum=0; Chick chicks=new Chick4; chicks0=new Chick(); /此行特别注意 chicks0.name=“小白“; chicks0.weight=4.5f; chicks1=new Chick(); chicks1.name=“小黑“; chicks1.weight=5.5f; chicks2=n
18、ew Chick(); chicks2.name=“小花“; chicks2.weight=4; chicks3=new Chick(); chicks3.name=“小雪“; chicks3.weight=5f; for(int i=0;imaxweight) maxweight=chicksi.weight; maxnum=i; else if (chicksi.weightminweight) minweight=chicksi.weight; minnum=i; System.out.println(“体重最大的鸡的名字为“+chicks maxnum.name+“,体重最轻的鸡的名字
19、为“+chicksminnum.name); ,上机练习 要求:在歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。如果已知每个评委的评分,求该选手的得分。 该题实际上涉及到求数组的最大值、最小值,以及求数组中所有元素的和,也是数组方便统计的用途体现。 实现思路:求出数组元素的最大值、最小值以及和,然后使用和减去最大值和最小值,然后除以8获得得分。,判断一个数组中是否存在相同的元素,如果存在相同的元素则输出“重复”,否则输出“不重复”。 该题中如果需要判断数组中元素是否重复,则需要对数组中的元素进行两两
20、比较,如果有任意一组元素相等,则该数组中的元素存在重复,如果任意一组元素都不想等,则表示数组中的元素不重复。 实现思路:假设数组中的元素不重复,两两比较数组中的元素,使用数组中的第一个元素和后续所有元素比较,接着使用数组中的第二个元素和后续元素比较,依次类推实现两两比较,如果有一组元素相同,则数组中存储重复,结束循环。把比较的结果存储在一个标志变量里,最后判断标志变量的值即可。,要求:判断数组元素是否对称。例如1、1,2,0,2,1,1,2,3,3,2,1这样的都是对称数组。 该题中用于判断数组中的元素关于中心对称,也就是说数组中的第一个元素和最后一个元素相同,数组中的第二个元素和倒数第二个元
21、素相同,依次类推,如果比较到中间,所有的元素都相同,则数组对称。 实现思路:把数组长度的一半作为循环的次数,假设变量i从0循环到数组的中心,则对应元素的下标就是数组长度-i-1,如果对应的元素有一组不相等则数组不对称,如果所有对应元素都相同,则对称。,考察题,要求:统计一个整数中出现最多的数字。如果数字个数一样,则以最大的数字为准,例如1输出1,121输出1,23231输出3。 该题是一个综合的题目,在实际分析时可以分解成三个问题:1、把整数中的每个数字拆分出来,2、统计拆分出的数字中0-9每个的个数,3、获得数字个数的最大值。 实现思路: 1、 拆分数字:整数和10取余可以获得该整数的个位值
22、,然后用该整数除以10可以去掉个位(整数除法),按照这种结构实现循环,并把拆分出的数字(也就是余数)存储到数组中。 2、 统计数字:声明一个长度是10的整型数组,使用这个数组中的第一个元素保存数字0出现的次数,第二个元素保存数字1出现的次数,依次类推。使用循环实现数字个数的统计。 3、 获得最大值对应的数字:获得个数数组中最大值的下标,就是需要的数字。,2.4 数组,2.4.2 多维数组 1二维数组的定义 int a; a=new int 34; 直接分配每维空间:int arr=new int23; 也可从高维开始,分别为每一维分配空间: int arr=new int2; arr0=new
23、 int3;/特别注意,此处要用new创建 arr1=new int3;,2.4 数组,2.4.2 多维数组 Java的二维数组和C的二维数组的区别在哪里? 在C语言中定义一个二维数组,必须是一个m*n二维矩阵块, Java语言的多维数组不一定是规则的矩阵形式 int a=new int2; arr0=new int2; arr1=new int3;,/定义第二维长度不同的二维数组 int a=new int2; a0=new int2; a00=1; a01=2; a1=new int3; a10=3; a11=4; a12=5; for(int i=0;ia.length;i+) for(
24、int j=0;jai.length;j+) System.out.print(aij+“,“); System.out.print(“n“); ,2.4 数组,2.4.2 多维数组 2二维数组的初始化 直接对每个元素赋值 如:int a=2,3,1,5,3,4; 定义的同时初始化: int arr=3,4,7,1,-4,12;,2.4.2 多维数组 如何求多维数组的总元素个数 一维数组a.length 二维数组a.length表示数组a的行数,int a=2,3,4,5,6,7; int num=0; for(int i=0;ia.length;i+) for(int j=0;jai.len
25、gth;j+) num+; System.out.println(num);,实例2-10:矩阵的乘法运算,public class array public static void main(String args) int a; a=new int32; a00=1; a01=1; a10=1; a11=1; a20=1; a21=1; for(int i=0;ia.length;i+) for(int j=0;jai.length;j+) System.out.print(“a“+i+“+j+“=“+aij+“,“); System.out.print(“n“) ; /*int b=ne
26、w int2; b0=new int3; b1=new int3; b00=1; b01=2; b02=3; b10=4; b11=5; b12=6;*/ /上面注释部分等同于下面一行代码 int b=1,2,3,4,5,6; System.out.println(“下面是矩阵b:“) ; for(int i=0;ib.length;i+) for(int j=0;jbi.length;j+) System.out.print(“b“+i+“+j+“=“+bij+“,“); System.out.print(“n“) ; int c; c=new int33; for(int i=0;i3;i
27、+) for(int j=0;j3;j+) cij=0; for(int k=0;k2;k+) cij+=aik*bkj; System.out.println(“下面是矩阵c:“) ; for(int i=0;ic.length;i+) for(int j=0;jci.length;j+) System.out.print(“c“+i+“+j+“=“+cij+“,“); System.out.print(“n“) ; ,2.4 数组,2.4.3 与数组有关的系统函数(方法) 1.数组复制System.arraycopy() 格式:public static void arraycopy(Ob
28、ject src,int srcPos,Object dest,int destPos,int length) arraycopy(source,o,dest,o,x)表示复制源数组中从下标0开始的x个元素到目标数组,从目标数组下标0对应的位置开始存放。 2数组排序Array.sort() 格式:Array.sort(数组变量名) 功能:将元素由小到大排序,结果仍然放在原数组中。,2.4 数组,实例:数组排序 public class ArrSort public static void main(String args) int ia=4,18,6,10,25,3; Arrays.sorts
29、(ia); for (int i=0;iia.length;i+) System.out.print(iai); ,复习提问,1、数组下标变量是从哪个数字开始编号的?假如有一个数组a,其长度怎么表示? 2、指出下面数组定义中有没有错误: int 46 intStudentNo; int a=new int3; int a=new int2; int a5=1,2,3,4,5; 3、定义一个整形数组myArray大小为4,并赋值(任意数),写出代码段,2.5 控制结构,2.5.1 分支语句 1. 条件语句 if-else 格式: if(boolean-expression) statement1
30、; else statement2; 实例1:判断今年是否为闰年,2.5 控制结构,闰年规则:年份用4位数表示且符合2个条件之一 1、能被4整除,但不能被100整除; 2、能被400整除 即可以表示为:,(year%4=0&year%100!=0)|(year%400=0),找出三个整数中的最大值和最小值,int a=0,b=3,c=9,max,min; max=ab?a:b; min=ab?b:a; max=cmax?c:max; min=cmin?c:min; System.out.println(“a=“+a+“,b=“+b);,2.5 控制结构,2.5.1 分支语句 2多分支选择语句s
31、witch switch (expression) case value1 : statement1;break; case value2 : statement2;break; case valueN : statemendN;break; default : defaultStatement; 实例2:根据运算符输出结果,int a=1,b=2; float r=0; char c=+; switch(c) case +:r=a+b;break; case -:r=a-b;break; case *:r=a*b;break; case /:r=(float)(a/b);break; def
32、ault:r=0; System.out.println(“result is:“+r);,2.5 控制结构,2.5.1 分支语句 3break语句:在switch语中,break语句用来终止switch语句的执行,使程序从switch语句后的第一个语句开始执行。 格式1: break /直接中止并退出 格式2:break blockLabel;/ blockLabel:代码块 4返回语句return 格式1:return expression /返回一个值,相当于定义一个函数 格式2:return /不返回任何值,用于void方法,2.5 控制结构,/SwitchOp.java,对例2程序的
33、修改 public class SwitchOp public static void main(String args) float a=9; float b=3; float result; char op=+; switch(op) case +: result=a+b;break; case -: result=a-b;break; case *: result=a*b;break; case /: result=a/b;break; default: result=0; System.out.println(“result=“+result); ,2.5 控制结构,2.5.2 循环语
34、句 1while语句 格式: initialization while (terminationCondition) body; iteration; /反复执行或者返回结果 ,2.5 控制结构,2.5.2 循环语句 2do-while语句 格式: initialization do body; iteration; while (terminationCondition);,2.5 控制结构,2.5.2 循环语句 3for语句 格式: for (initialization; terminationCondition; iteration) body; ,2.5 控制结构,2.5.2 循环语
35、句 4continue语句 格式1:continue; 格式2:用continue跳转到括号指明的外层循环中:continue outerLable; outer: for( int i=0; ii ) continue outer; ,2.5 控制结构,2.5.2 循环语句 实例3:输出120之内的单数 public class ContinueOp public static void main(String args) int n; for(n=1;n=10;n+) if (n%2=0) System.out.println(“n=“+n); ,continue;,2.5 控制结构,2.5.2 循环语句 实例4:计算10的阶乘,DoWhileOp.java public class DoWhileOp public static void main(String args) int n=10; result=1; do result*= ; while(n=1); System.out.println(“10!=“+result); ,long,n-,
链接地址:https://www.31doc.com/p-2120641.html