【文档说明】第2章Java语言编程基础(贾克)课件.ppt,共(73)页,415.012 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45193.html
以下为本文档部分文字说明:
第2章Java语言编程基础主讲:贾克复习与思考1、举例说明什么是对象,什么是类,类和对象有什么不同?2、举例说明类的继承性。2.1Java语言的基本组成2.1.1分隔符1.空白符:换行、回车、空格、tab2.注释语句:例题参见P25//一行的注释内容/*一行或多行的注释内容*//**文档
注释内容*/3.普通分隔符:{};,:共4种2.1Java语言的基本组成2.1.2关键字所有的关键字都是小写的。参见P25const和goto是java的保留字,但已经不再使用then和sizeof都不是java
的关键字,大写的NULL不是java语言的关键字,String是java语言的一个封装类的类名,也不是关键字,使用时要注意。2.1Java语言的基本组成2.1.3Java语言标识符首字符必须是字母(大小写均可)、下划线_或美元符$标识符可以由数字(0--9)、所有从A-
-Z的大写字母、a--z的小写字母和下划线_、美元符$和所有在十六进制0xc0前的ASCII码等构成长度不限2.1Java语言的基本组成2.1.4Java的编码规范包package:包名采用完整的英文描述符,全由小写字母组成类cl
ass和接口interface:类名采用完整的英文描述符,所有单词的第一个字母均大写组件/部件(Component):使用完整的英文描述来说明组件的用途,末端应接上组件类型2.1Java语言的基本组成2.1.4Java的编码规范异常(Exception):通常采用字母e表示异常的实例变量va
riable和方法method:采用完整的英文描述,第一个字母小写,后面任何单词的首字母大写静态常量字段(staticfinal):全部采用大写字母,单词之间用下划线分隔2.2基本数据类型数据类型2.2基本
数据类型2.2.1基本数据类型1.布尔型boolean也称为逻辑型,只有两个取值:true表示逻辑真,false表示逻辑假,这种变量称为boolean型变量2.字符型charchar型是用来表示字母的,它仅能表示一个单一
的Unicode字母,其值用16位无符号整数表示(2个字节,因此可以存放汉字),范围是0~655352.2基本数据类型2.字符型char例:下面分别输出什么?chara=‘a’;System.out.println(a);
inta=‘a’;System.out.println(a);chara='a'+1;System.out.println(a);2.字符型char在java中,对char进行运算的时候,就是将其当作其ASCII码对应的整数。2.2基本数据类型2.2.1基本数据
类型3.整型在Java语言中,提供了4种整型数据类型:byte、short、int、long,它们都是定义了一个整数,但它们能够表示数据的范围不同。byte1个字节-128~127-21*8-1~21*8-1-1short2个字节-22*8-1~22*8-1-1int4个字节-24
*8-1~24*8-1-1long8个字节-28*8-1~28*8-1-12.2基本数据类型2.2.1基本数据类型3.整型判断输出bytea=128;System.out.println(a);inta=077;System.out.println(a);
inta=0X77;System.out.println(a);2.2基本数据类型2.2.1基本数据类型4.浮点型在Java语言中有两种浮点数类型:float、double区别在于表示范围不一样。float4
个字节double8个字节浮点数常量是double类型如果要求是float型实数,必须加上F标志判断输出floata=3.4;System.out.println(a);问题:float也叫单精度,double双精度,他们表示的精度有什么差别吗?2.2基本数据类型2.2.2
数据类型转换自动类型转换判断对错:inta=3.4;doublea=3.4;强制类型转换inta=(int)3.4;2.2基本数据类型2.2.2类型转换计算中类型转换:整型、实型、字符型数据可以进
行混合运算。运算时,不同类型的数据先转换成同一类型后再参与运算,转换的原则是位数少的类型转换成位数多的类型,称为自动类型转换例:下面会出现何种情况?inta=3;intb=a+3.4;inta=15;floatb=3.0f;System.out.prin
tln("a="+a+",b="+b+"\n");System.out.println("a/b="+a/b+"\n");例:inta=7;intb=3;floatg,h;System.out.println("a="+a+",b="+b);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.printl
n("a/b="+h);2.3运算符与表达式2.3.1算术运算符1.双目算术运算符双目算术运算符包括+、-、*、/和%(取模)五种运算符。例:用java编写程序计算两个数是否能够整除publicclass$2{publicstaticvoidmain(Stringargs[]){in
ta=3;intb=6;if(b%a==0){System.out.println("yes");}elseSystem.out.println("no");}}2.3运算符与表达式2.3.1算术运算符2.单
目算术运算符+,++,-,--inti=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逻辑运算符&&、||、!、&、|、^&&、||为双目运算符,实现逻辑与、逻辑或。&、|非简洁运算对于布尔逻辑运算,先求出运算符左边的表达式的值,对或运算如果为true,则整个表达式的结果为true,不
必对运算符右边的表达式再进行运算;同样,对与运算,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false,这种逻辑运算又称为逻辑短路与和逻辑短路或。2.3.3逻辑运算符inti=10;booleank=(
true||(9>i++));System.out.println("i="+i);System.out.println("k="+k);inti=10;booleank=(true|(9>i++));System.out.println("i="+i)
;System.out.println("k="+k);2.3运算符与表达式2.3.4位运算符~按位取反&按位与|按位或^按位异或>>op1右移op2位<<op1左移op2位>>>op1无符号右移op2位注意:0和1如何进行位运算inti=1;intj=2;intflag=i|j;Syste
m.out.println("flag="+flag);intflag=i<<j;Inti=8,j=2;intflag=i>>j;>>同>>>的区别:最高位的填充-4>>2;-1最高为填充与原最高位相同-4>>2;1073721823最高位一律填充02.3运算
符与表达式2.3.5赋值运算符=1.赋值运算符赋值运算符“=”把一个数据赋给一个变量,在赋值运算符两侧的类型不一致的情况下,进行类型转换2.扩展赋值运算符在赋值符“=”前加上其它运算符,即构成扩展赋值运算符a+=3等价于a=a+32.3运算符与表达式2.3.6条件运算
符条件运算符?:为三目运算符,它的一般形式为:expression?statement1:statement2例:inta=2,b=3intmaxValue=a>b?a:b2.3.7表达式计算优先级大体上由高到低排列为:一元运算符
〉算数运算符〉关系和逻辑运算符〉赋值运算符a>=b&&c<d||e==f复习提问1、指出下面的标识符,哪些合法,哪些非法?chari90integer_271stringmyFile-2文件1IloveJava!2、&运算与&&运算有什么区别?3、64>>3=?2.4数组
Java语言把内存分两种:栈内存:存放基本类型的变量和对象的引用变量例:inta=6;charb=‘k’;Catcat1=newCat();内存cat1内存放的是堆cat1的首地址堆内存:存放由New
运算符创建的对象和数组例:Catcat1=newCat();2.4数组2.4.1一维数组1.一维数组的定义inta[];或int[]a[];2.一维数组元素的引用定义了一个数组,并用运算符new为它分配了内存空间后,就以引用数组中的每一个元素了。a=newin
t[3];数组元素的引用方式为:数组的第一个元素:a[0],二:a[1],三:a[2]2.4.1一维数组inta[];a=newint[3];inta[]=newint[5];2.4数组2.4.1一维数组3.
一维数组的初始化对数组元素可以先声明再进行赋值。也可以在定义数组的同时进行初始化。inta[]=newint[3];a[0]=1;a[1]=2;a[2]=3;如:intarr[]={2,4,6,8,4};但intarr[5]={2,4,6,8,4};非法例:方老太养了6只鸡,
体重分别1kg,2kg,3kg,3kg,4kg,5kg,求这些鸡的总体重,体重分别1kg,2kg,3kg,3kg,4.4kg,5.2kg,求平均体重。数组的定义,初始化,赋值,引用inta[];a=newint[6];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5
;a[5]=6;inti;intsum=0;for(i=0;i<a.length;i++){sum=sum+a[i];}System.out.println("sum="+sum);floata[]={1,2,3,3,4.4f,5.2f};inti;floatsum=0
,aver=0;for(i=0;i<a.length;i++){sum=sum+a[i];}aver=sum/6;System.out.println("aver="+aver);数组不能越界inta[]=new
int[3];a[3]=4;如何知道数组的长度a.length例2-8:求Fabonacci数组的前10项。intf[];f[1]=1;f[2]=1;intf[],i;f=newint[10];f[0]=1;f[1]=1;for(i=2;i<10;i++)f
[i]=f[i-1]+f[i-2];for(i=0;i<10;i++)System.out.println("f["+i+"]="+f[i]);既然int,float,double…..都可以有数组,那么,可
不可以有对象数组呢?养鸡厂有4只鸡,求这些鸡体重最大和最小那只的名字鸡的名字体重小白4.5kg小黑5.5kg小花5kg小雪4kgclassChick{Stringname;floatweight;}publicclass$2{publicstaticvoidmain(Stringargs[]){
floatmaxweight=0,minweight=4.5f;intmaxnum=0,minnum=0;Chickchicks[]=newChick[4];chicks[0]=newChick();//此行特别注意chicks[0].name="小白";chicks[0].we
ight=4.5f;chicks[1]=newChick();chicks[1].name="小黑";chicks[1].weight=5.5f;chicks[2]=newChick();chicks[2].name="
小花";chicks[2].weight=4;chicks[3]=newChick();chicks[3].name="小雪";chicks[3].weight=5f;for(inti=0;i<chicks.length;i++){if(chicks[i].we
ight>maxweight){maxweight=chicks[i].weight;maxnum=i;}elseif(chicks[i].weight<minweight){minweight=chicks
[i].weight;minnum=i;}}System.out.println("体重最大的鸡的名字为"+chicks[maxnum].name+",体重最轻的鸡的名字为"+chicks[minnum].name);}}上机练习要求:在歌唱比赛中,共
有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。如果已知每个评委的评分,求该选手的得分。该题实际上涉及到求数组的最大值、最小值,
以及求数组中所有元素的和,也是数组方便统计的用途体现。实现思路:求出数组元素的最大值、最小值以及和,然后使用和减去最大值和最小值,然后除以8获得得分。判断一个数组中是否存在相同的元素,如果存在相同的元素则输出“重复”,否则输出“不重复”。该题中如果需要判断数组中元素是否重复,则需要对数组中的元
素进行两两比较,如果有任意一组元素相等,则该数组中的元素存在重复,如果任意一组元素都不想等,则表示数组中的元素不重复。实现思路:假设数组中的元素不重复,两两比较数组中的元素,使用数组中的第一个元素和后续所有元素比较,接着使用数组中的第二个元素和后续元素比较,依次类推实现
两两比较,如果有一组元素相同,则数组中存储重复,结束循环。把比较的结果存储在一个标志变量里,最后判断标志变量的值即可。要求:判断数组元素是否对称。例如{1}、{1,2,0,2,1},{1,2,3,3,2,1}这样的都是对称数组。该题中用于判断数组中的元素关于中心对称,也就是
说数组中的第一个元素和最后一个元素相同,数组中的第二个元素和倒数第二个元素相同,依次类推,如果比较到中间,所有的元素都相同,则数组对称。实现思路:把数组长度的一半作为循环的次数,假设变量i从0循环到数组的中心,则对应元素的下标就是数组长度-i-1,如果对应的元素有一组不相等则数组不对
称,如果所有对应元素都相同,则对称。考察题要求:统计一个整数中出现最多的数字。如果数字个数一样,则以最大的数字为准,例如1输出1,121输出1,23231输出3。该题是一个综合的题目,在实际分析时可以分解成三个问题:1、把整数中的每个数字拆分出来,2、统计
拆分出的数字中0-9每个的个数,3、获得数字个数的最大值。实现思路:1、拆分数字:整数和10取余可以获得该整数的个位值,然后用该整数除以10可以去掉个位(整数除法),按照这种结构实现循环,并把拆分出的数字(也就是余数)存储到数组中。2、统计数字:声明一个长度是10的整型数组,使用这个数组中的第一
个元素保存数字0出现的次数,第二个元素保存数字1出现的次数,依次类推。使用循环实现数字个数的统计。3、获得最大值对应的数字:获得个数数组中最大值的下标,就是需要的数字。2.4数组2.4.2多维数组1.二维数组的定义int
a[][];a=newint[3][4];直接分配每维空间:intarr[][]=newint[2][3];也可从高维开始,分别为每一维分配空间:intarr[][]=newint[2][];arr[0]=newint[3];//特
别注意,此处要用new创建arr[1]=newint[3];2.4数组2.4.2多维数组Java的二维数组和C的二维数组的区别在哪里?在C语言中定义一个二维数组,必须是一个m*n二维矩阵块,Java语言的多维数组不一定是规则的矩阵形式inta[][]=newint[2
][];arr[0]=newint[2];arr[1]=newint[3];//定义第二维长度不同的二维数组inta[][]=newint[2][];a[0]=newint[2];a[0][0]=1;a[0][1]=2;a[1]=newint[
3];a[1][0]=3;a[1][1]=4;a[1][2]=5;for(inti=0;i<a.length;i++){for(intj=0;j<a[i].length;j++)System.out.print(a[i][j]+",");S
ystem.out.print("\n");}2.4数组2.4.2多维数组2.二维数组的初始化直接对每个元素赋值如:inta[][]={{2,3},{1,5},{3,4}};定义的同时初始化:intarr[][]={{3,4},{7,1},{-4,12}};2.4.2多维数组如何求多维数
组的总元素个数一维数组a.length二维数组a.length表示数组a的行数inta[][]={{2,3},{4,5},{6,7}};intnum=0;for(inti=0;i<a.length;i++)for(int
j=0;j<a[i].length;j++)num++;System.out.println(num);实例2-10:矩阵的乘法运算publicclassarray{publicstaticvoidmain(Stringargs[]){inta[][];a=newin
t[3][2];a[0][0]=1;a[0][1]=1;a[1][0]=1;a[1][1]=1;a[2][0]=1;a[2][1]=1;for(inti=0;i<a.length;i++){for(i
ntj=0;j<a[i].length;j++){System.out.print("a["+i+"]["+j+"]="+a[i][j]+",");}System.out.print("\n");}/*intb[][]=newint[2][];
b[0]=newint[3];b[1]=newint[3];b[0][0]=1;2.4数组2.4.3与数组有关的系统函数(方法)1.数组复制System.arraycopy()格式:publicstaticvoidarraycopy(Ob
jectsrc,intsrcPos,Objectdest,intdestPos,intlength)arraycopy(source,o,dest,o,x)表示复制源数组中从下标0开始的x个元素到目标数组,从目标数组下标0对应的位置开
始存放。2.数组排序Array.sort()格式:Array.sort(数组变量名)功能:将元素由小到大排序,结果仍然放在原数组中。2.4数组实例:数组排序publicclassArrSort{publicstaticvoidmain(String[]a
rgs){intia[]={4,18,6,10,25,3};Arrays.sorts(ia);for(inti=0;i<ia.length;i++)System.out.print(ia[i]);}}复习提问1、数组下标变量是从哪个数字开始编号的?假如有一个数组a,其长度怎么表示?2、
指出下面数组定义中有没有错误:int[46]intStudentNo;inta[][]=newint[][3];inta[][]=newint[2][];inta[5]={1,2,3,4,5};3、定义一个整形
数组myArray大小为4,并赋值(任意数),写出代码段2.5控制结构2.5.1分支语句1.条件语句if-else格式:if(boolean-expression)statement1;[elsestatement2;]实例
1:判断今年是否为闰年2.5控制结构闰年规则:年份用4位数表示且符合2个条件之一1、能被4整除,但不能被100整除;2、能被400整除即可以表示为:(year%4==0&&year%100!=0)||(year%400==0)找出三个整数中的最大值和最小值inta=0,b=3,c=9,
max,min;max=a>b?a:b;min=a>b?b:a;max=c>max?c:max;min=c<min?c:min;System.out.println("a="+a+",b="+b);2.
5控制结构2.5.1分支语句2.多分支选择语句switchswitch(expression){casevalue1:statement1;break;casevalue2:statement2;break;…………casevalueN:statemendN;break;[
default:defaultStatement;]}实例2:根据运算符输出结果inta=1,b=2;floatr=0;charc='+';switch(c){case'+':r=a+b;break;case'-':r=a-b;break;case'*':r=a*b
;break;case'/':r=(float)(a/b);break;default:r=0;}System.out.println("resultis:"+r);2.5控制结构2.5.1分支语句3.break语句:在switch语中,break语句用来终止switch语
句的执行,使程序从switch语句后的第一个语句开始执行。格式1:break//直接中止并退出格式2:breakblockLabel;//blockLabel:代码块4.返回语句return格式1:returnexpression//返回一个值,相当于定义
一个函数格式2:return//不返回任何值,用于void方法2.5控制结构//SwitchOp.java,对例2程序的修改publicclassSwitchOp{publicstaticvoidmain(Stringargs
[]){floata=9;floatb=3;floatresult;charop='+';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循
环语句1.while语句格式:[initialization]while(terminationCondition){body;[iteration;]//反复执行或者返回结果}2.5控制结构2.5.2循环语句2.d
o-while语句格式:[initialization]do{body;[iteration;]}while(terminationCondition);2.5控制结构2.5.2循环语句3.for语句格式:for(initialization;terminati
onCondition;iteration){body;}2.5控制结构2.5.2循环语句4.continue语句格式1:continue;格式2:用continue跳转到括号指明的外层循环中:continueouterLable;outer:for(inti=0;i<10;i++)
{//外循环for(intj=0;j<20;j++){//内循环if(j>i){……continueouter;}……}……}2.5控制结构2.5.2循环语句实例3:输出1—20之内的单数publiccla
ssContinueOp{publicstaticvoidmain(Stringargs[]){intn;for(n=1;n<=10;n++){if(n%2==0)System.out.println("n="+n);
}}}continue;2.5控制结构2.5.2循环语句实例4:计算10的阶乘,DoWhileOp.javapublicclassDoWhileOp{publicstaticvoidmain(Stringargs
[]){intn=10;result=1;doresult*=;while(n>=1);System.out.println("10!="+result);}}longn--