【文档说明】Java语言基础知识课件.ppt,共(74)页,621.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7167.html
以下为本文档部分文字说明:
第二章Java语言基础知识1第1页,共75页。主要内容1、Java语言基本元素2、Java数据类型3、运算符与表达式4、Java控制语句(自学)课后参考:thinkinginJava第二章(2.1~2.7),第三章,第四章4.5数组的初始化2
第2页,共75页。1、Java语言基本元素1)标示符(identifier)标识符是程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括:类名、变量名、常量名、方法名…标识符的第一个字符必须是下列字符之一:•大写字母(
A-Z)•小写字母(a-z)•下划线(_)•美元符号($)•标识符的第二个字符及后继字符必须是:•上述列表中的任意字符•数字字符(0-9)3第3页,共75页。2)保留字具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(rese
rvedword)abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfloatforfinallyimporti
mplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicfinalreturnswitchsynchroni
zedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidwhileif4第4页,共75页。•保留字注意事项:•Java中,true、false和null都是小写的。
区别于C++中大写的TRUE、FALSE和NULL。•Java采用Unioncode编码,使用2个字节表示每个字符。•所有数据类型在任何一种机器中的大小都是相同的,因此在Java中没有sizeof操作符。•不能更改或重复定义保留字,也不能将Java保留字用作用户自定义标示符。5第5页,共75页。3
)变量即程序中的基本存储单元,其定义包括变量名、变量类型和变量值几个部分,定义格式:typevarName=value;intn=3,n1=4;type为数据类型名;var为变量名,value为变量的值。6第6页,共
75页。与C++不同,作为类里定义的变量,其默认初值都是确定的:•布尔变量的初值为:false•整数变量的初值为:0•浮点数变量的初值为:0.0•引用(类)变量的初值为:null•但是在方法(函数)实
现中定义的变量必须程序员自己初始化;7第7页,共75页。4)常量•Java中的常量值是用文字串表示的,它区分为不同的类型,如整型常量123,实型常量1.23,字符常量‘a‟,布尔常量true、false以及字符串常量"Thisisaconst
antstring."。•与C、C++不同,Java中不能通过#define命令把一个标识符定义为常量,而是用关键字final来定义,其定义格式为:•finalTypevarName=value;finalintglobalAccount=100,nati
onalAccount=50;finaldoublePI=3.14159;8第8页,共75页。2、Java数据类型9Javatypesystemprimitivereferencenullcharnumericbooleanclassinterfa
cearrayintegralfloating-pointbyteshortintlongfloatdouble基本数据类型引用数据(类)类型第9页,共75页。2.1基本数据类型•所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。•所有基本类型的关键词都是小写的。10
数据类型所占位数数的范围char160~65535byte8-27~27-1short16-215~215-1int32-231~231-1long64-263~263-1float323.4e-038~3.4e+038double641.7e-308~1.7e+308第10页,共75页。1)布尔
类型(boolean)•布尔型数据用于确定真假条件,只有两个值true和false。布尔型变量的定义如:booleanb=true;•布尔型数据只能参与逻辑关系运算:•&&||==!=!•示例:•booleanb1;•booleanb2
=true;•b!=b2;11第11页,共75页。2)字符类型(char)•字符型数据代表16位的Unicode字符•字符常量是用单引号括起来的一个字符•‘a‟„B‟„\n‟„\u0030‟•字符型数据的取值范
围为•0~65535•示例•charc1;\\缺省值为0•charc2=„0‟;\\赋初值为字符‘0‟•charc3=32;\\用整数赋初值为空格12第12页,共75页。•特殊字符的常量表示法:•反斜线(Backslash)‘\\‟•退格(Backs
pace)‘\b‟•回车(Carriagereturn)‘\r‟•进纸符(Formfeed)‘\f‟•制表符(Formfeed)‘\t‟•换行(Newline)‘\n‟•单引号(Singlequote)‘\‟‟•八进制数(‘\0‟~‘\377‟)‘\DDD‟•Unicode字符‘\uHHHH
‟13第13页,共75页。3)整数类型(byte,short,int,long)•整型常量•1.十进制整数•如123,-456,0•2.八进制整数•以0开头,如0123表示十进制数83,-011表示十进制数-9。•3.十六进制整数•以0x或0X开头,如0x123表示十进制数291,-0X12表
示十进制数-18。•整型变量类型为byte、short、int或long,整型变量的定义如:intx=123;//指定变量x为int型,且赋初值为123byteb=8;shorts=10;longy=123L;longz=123l;
14第14页,共75页。•示例•byteb1;\\缺省值为0•byteb2=127;\\赋初值为127•shorts1=(short)(b1+b2);\\强制类型转换•shorts2=(short)(b1+123)\\强制类
型转换•intn=b1+b2;\\不需要强制类型转换•longl1=2343;\\不需要强制类型转换•longl2=4294967296L;\\必须用L或l结尾•longl3=65536*63356;\\乘法运算越
界,l3为0•longl4=65536L*63356;\\l4为4294967296L15第15页,共75页。4)浮点数类型,实型(float,double)•实型常量1.十进制数形式•由数字和小数点组成,且必须有
小数点,如0.123,.123,123.,123.02.科学计数法形式•如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。•32位浮点数形式:0.23f,1.23E-4f,.18F16第16页,共75页。•
数据类型转换•自动类型转换整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级:低----------------------------------------------------->高•byte,short,char—>int—
>long—>float—>double•数据类型转换必须满足如下规则:•不能对boolean类型进行类型转换。•不能把对象类型转换成不相关类的对象。•允许把容量小的类型转换为容量大的类型17第17页,共75页。•在
把容量大的类型转换为容量小的类型时必须使用强制类型转换。•转换过程中可能导致溢出或损失精度inti=8;byteb=(byte)i;•浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入(int)23.7==23;(int)-45.89f==-45;18第18页,共75页。•Jdk7在语
法上的新特性:(1)可以用二进制来表示整数(byte,short,int和long)。只要在二进制数值前面加0b或者0B例:bytenByte=(byte)0b0001;shortnShort=(short)0B0010;intnI
nt=0b0011;longnLong=0b0100L;19第19页,共75页。•(2)数字可以出现下划线,对于比较大的数字,下划线可以出现在数字里。例:inta=10_0000_0000;longb
=0xffff_ffff_ffff_ffffl;bytec=0b0001_1000;20第20页,共75页。•(3)字符串终于可以switch啦.Strings=...switch(s){case"qu
ux":processQuux(s);case"foo":case"bar":processFooOrBar(s);break;case"baz":processBaz(s);default:processDefault(s);break;}21第21页,共75页。2.2引用数据类型•引用数
据类型是一种组合型数据类型,即把若干个数据类型组合在一起.•Java一共有四种引用类型,分别是类类型,接口类型,数组类型和枚举类型。22第22页,共75页。•关于引用类型,需要注意以下两点:•与基本数据类型不一样,创建引用类型并不分配任何存储空间,
也就是当声明一个引用类型时,编译程序并不会分配任何空间。如:Strings;23第23页,共75页。一旦对它作初始化或创建一个新对象,就在内存里为它分配了一定空间。Strings=“asdf”;//初始化
Strings=newString(“asdf”);//创建一个String对象并初始化。RectangleoneRec=newRectangle();//创建一个Rectangle对象并初始化。24第24页
,共75页。2.3枚举类型Java5.0以后新增添了枚举类型(Enumerate),使用关键字enum,用常量来设臵一组常量。例如:EnumSeasons{SPRING,SUMMER,AUTUMN,WINTER};每个枚举常量实际上就是一个整数值,四个Seasons值分别为0,1,
2,3。25第25页,共75页。2.4Java数组•在java里,数组也是对象,也就是数组类型是引用类型。•数组采用new分配空间。•每个数组都有一个由publicfinal修饰的成员变量:length,即表示数组含有元素的个数(length可以
是正数或零)•得到数组的大小:myArray.length//yes•不可以写为:myArray.lengh()//No!No!No!26第26页,共75页。2.4.1数组的声明声明(Declaration)•使用数组前必须对它进行声明,声明
数组时无需指明数组元素的个数,也不为数组元素分配内存空间。•不能直接使用,必须经过初始化分配内存后才能使用。27第27页,共75页。Type[]arrayName;例如:int[]a1;String[]stringArray;或者按照C/
C++程序员的习惯TypearrayName[];例如:inta1[];StringstringArray[];28第28页,共75页。2.4.2数组的创建•正如处理类类型一样,用new创建一个新的数组。给它分配空间。intcarrot[];//声明carrot=new
int[100];//创建29第29页,共75页。或者可以将数组的声明和创建一并执行intcarrot[]=newint[100];注意:在java中,决不能像C语言那样在声明中指定数组的大小:intcarrot[256];/
/NO!NO!NO!30第30页,共75页。2.4.3数组元素的初始化•声明数组名时,直接对它的各个元素进行初始化:inta[]={22,33,44,55};Stringwkdays[]={“mon”,”Tue”,”Wed‟,“Thu”,“Fri
”};31第31页,共75页。•比C/C++优越的是,创建数组的时,如果没有指定初始值,数组便被赋予默认值初始值。•基本类型数值数据,默认的初始值为0;•boolean类型数据,默认值为false;•类类型元素的默认值为null。32第32页,共75页。•数
组在使用前,必须以适当的数值为数组元素赋值。例如:intcarrot[]=newint[256];//creates256ints,initialvalue0carrot[7]=32;//ok,accesses1element33第33页,共75页。•如果是类类型数组,则需要为对象变量分配空间
,也必须先进行赋值。如欲使用一个类Timestamp:classTimestamp{inthh,intmm,intss;}Timestampappts[]=newimestamp[256];//creates256nullreferenceappts[7
].hh=10;//NO!appts[7]isstillnull!!!34第34页,共75页。•在能够访问对象之前,需要对每个引用元素赋值,使之不再是null,指向一个具体的对象:Timestampapp
ts[]=newTimestamp[256];for(inti=0;i<appts.length;i++){appts[i]=newTimestamp();}appts[7].hh=10;//nowOK!注意:创建对象数组时出现失误是Java初学者常犯的错误,一旦出
错,将会引起NullPointerExecption异常35第35页,共75页。2.4.4数组的使用•通过下面的表达式使用数组的一个元素:arrayName[index]•下标从零开始计数.•元素的个数即为数组的长
度,可以通过arryName.length引用•元素下标最大值为length–1,如果超过最大值,将会产生数组越界异常(ArrayIndexOutOfBoundsException)36第36页,共75页。•例:打印数组
的值•publicclassMyArray{•publicstaticvoidmain(String[]args){•intmyArray[];//声明数组•myArray=newint[10];//创建数组•System.out.println
("Index\t\tValue");•for(inti=0;i<myArray.length;i++)•System.out.println(i+"\t\t"+myArray[i]);•//证明数组元素默认初始化为0•//myArray[10]=100;//将产生数
组越界异常•}•}37第37页,共75页。•例:length.java获取main()中参数数组的长度publicclasslength{publicstaticvoidmain(Stringargs[]){System.o
ut.println("numberofStringargs:"+args.length+"\n");for(inti=0;i<args.length;i++{System.out.println("arg["+i+"]="+args[i]);System.
out.println("lengthof"+i+"'thString:"+args[i].length()+"\n");}}}38第38页,共75页。2.4.5数组的复制•数组的复制可以用System类中的方法实现:publicstaticvoida
rraycopy(Objectsource,intsrcIndex,Objectdest,intdestIndex,intlength)40第40页,共75页。例子publicclassArrayCopy{publicstaticvoidmain(String[]args){int
I;intarr1[]={1,2,3,4,5,6,7,8,9,10};intarr2[]=newint[10];System.arraycopy(arr1,0,arr2,0,arr1.length);for(
I=0;i<arr2.length;i++)System.out.println(arr2[i]+““);System.out.println();}}运行结果为:1234567891041第41页,共75
页。2.4.6二维数组int[][]gradeTable;……gradeTable[0][1]为42gradeTable[3][4]为93gradeTable[6][2]为7842第42页,共75页。2.4.6.1二维数组的声明和构造•int[][]myArray
;•myArray可以存储一个指向2维整数数组的引用。其初始值为null。•int[][]myArray=newint[3][5];•建立一个数组对象,把引用存储到myArray。这个数组所有元素的初始值为零。•int[][
]myArray={{8,1,2,2,9},{1,9,4,0,3},{0,3,0,0,7}};•建立一个数组并为每一个元素赋值。例:MyArray2.java43第43页,共75页。publicclassMyArray2{publicstati
cvoidmain(String[]args){intmyArray[][];//声明数组myArray=newint[5][10];//创建数组inttotal=0;for(inti=0;i<myArray.length;
i++)for(intj=0;j<myArray[i].length;j++)myArray[i][j]=i*10+j;//为每个数组元素赋值for(inti=0;i<myArray.length;i++
)for(intj=0;j<myArray[i].length;j++)total+=myArray[i][j];System.out.println("Thesumis:"+total);}}44第44页,共75页。2.4.6.2
二维数组的长度classUnevenExample2{publicstaticvoidmain(String[]args){int[][]uneven={{1,9,4},{0,2},{0,1,2,3,4}};System
.out.println("Lengthis:"+uneven.length);}}45运行结果:Lengthis:3第45页,共75页。•每行的长度:classUnevenExample3{publicstaticvoidmain(St
ring[]arg){//声明并构造一个2维数组int[][]uneven={{1,9,4},{0,2},{0,1,2,3,4}};46第46页,共75页。//数组的长度(行数)System.out.println("Lengthofa
rrayis:"+uneven.length);//数组每一行的长度(列数)System.out.println("Lengthofrow[0]is:"+uneven[0].length);System.out.println("Lengthofrow[1]is:"+uneven[1].lengt
h);System.out.println("Lengthofrow[2]is:"+uneven[2].length);}}47运行结果:Lengthofarrayis:3Lengthofrow[0]is:3Lengthofrow[1]is:2Lengthofrow[2]is:5第47页,共75
页。3、基本数据类型的对象包装•Java中,除了引用类型外,基本数据类型也被封装为类类型。•在Java库中,8种基本数据类型都有一个相应的,预定的类类型。•例如,其中存在一个相应于整数的java.la
ng.Interger,这些类类型称为对象包装(objectwrappers),48第48页,共75页。•其设计目的是借助于类,把基本数据类型对象化,为基本数据类型的运算提供必要的方法,如实现基本数据类型的数值与可打印字符串之间的转换。•参看java
docAPI49第49页,共75页。•例如:inti=15;IntegermyInt=newInteger(i);//wrapanint//inaobject//gettheprintablerepresentationofanInteger;Strings=myInt.toStr
ing();注意:JDK1.5版引入了自动封装(autoboxing)的特性,上述例子可以直接赋值:inti=15;IntergermyInt=i;(autoboxing)即把基本数据类型变量int封装成I
nterger对象。50第50页,共75页。•解封(Unboxing)是反向操作,即从封装的对象类型转换为与之相应的基本数据类型。DoubledObj=27.0;//autoboxdoubled=dObj;//unbox,getsvalue27.051第51页,共7
5页。基本数据类型的对象包装类基本数据类型相应的包装类booleanjava.lang.Booleancharjava.lang.Charaterintjava.lang.Integerlongjava.lang
.Longbytejava.lang.Byteshortjava.lang.Shortdoublejava.lang.Doublefloatjava.lang.Float52第52页,共75页。生成包装类对象的方法•生成包装类对象的方法•从基本数据类型的变量或常量生成包装类对象d
oublex=1.2;Doublea=x;Doubleb=newDouble(-5.25);•从字符串生成包装类对象Doublec=newDouble("-2.34");Integeri=newInteger("1234");•已知字符串,可使用valueOf方法将其转换成
包装类对象:Integer.valueOf("125");Double.valueOf("5.15");53第53页,共75页。从包装类数据转换为基本数据类型数据的方法•转换为基本数据类型数据的方法1、每一个包装类都提供相应的方法将包装类对象转换回基本数据类型的数据anI
ntegerObject.intValue()//返回int类aCharacterObject.charValue()//返回char类型的数据54第54页,共75页。2、Integer、Float、Double、Long、Byte及Short类提供了特殊的方法能够将字符串类型的对象直
接转换成对应的int、float、double、long、byte或short类型的数据Integer.parseInt(“234”)//返回int类型的数据Float.parseFloat(“234.78”)//返回float类型的数据例:example.java一个从键盘接受输入的例
子:AcceptInput.java从对话框接受输入的例子:GreatestNumber.java55第55页,共75页。4、运算符与表达式•(1)运算符•算术运算符:+,―,*,/,%,++,――•关系运算符:>,<,>=,<=,==,!=•布尔
逻辑运算符:!,&&,||•位运算符:>>,<<,>>>,&,|,^,~•赋值运算符:=,及其扩展赋值运算符如+=,―=,*=,/=等。•条件运算符:?:56第56页,共75页。•其它•分量运算符·,•下标运算符[],•实例运算符instanceof,
•内存分配运算符new,•强制类型转换运算符(类型),•方法调用运算符()•…•由于数据类型的长度是确定的,所以没有长度运算符sizeof。57第57页,共75页。58运算符的优先次序1).,[],()9)&2)++,--,!,~,instanceof10)^3)new(type)11)|4
)*,/,%12)&&5)+,-13)||6)>>,>>>,<<14)?:7)>,<,>=,<=15)=,+=,-=,*=,/=,%=,^=8)==,!=16)&=,|=,<<=,>>=,>>>=第58页,共75页。(2)表达式•表达式是由操作数和运算符按一定的语法形式组成的符
号序列。•一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值;•表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。•例:•xnum1+num2a*(b+c)+d•3.14x<=(y+z)x&&y||z59第59页,共75页。5、Java控制语句(自学)•Java控制语句•Jav
a程序通过控制语句来控制方法的执行流程•Java中的流程控制结构主要有三种•顺序结构•选择结构•if语句(二路选择结构)•switch语句(多路选择结构)•循环结构•for语句•while语句•do-while语句60第60页,共75页
。if选择结构•语法形式•只有if分支,没有else分支if(boolean-expression){//statement1;}•if-else语句if(boolean-expression){//statement1;}else{//statement2;}61第6
1页,共75页。if选择结构(续)——ex3_1.java•ex3_1•输入一个年份,判断它是不是闰年。•闰年:能被4整除但不能被100整除,或者能被400整除。publicclassex3_1{publicstaticvoidmain(St
ring[]args)throwsIOException{intyear;booleanIsLeapYear;System.out.println("Entertheyear:");BufferedReaderin=newBufferedReader
(newInputStreamReader(System.in));year=(newInteger(in.readLine())).intValue();62第62页,共75页。if选择结构(续)——ex2_1.javaIsLeapYear=((year%4==0&&yea
r%100!=0)||(year%400==0));if(IsLeapYear){System.out.print(year);System.out.println("isaleapyear");}else{System.out.print(year);Syste
m.out.println("isnotaleapyear");}}}63第63页,共75页。if选择结构(续)——ifElseDemo.java•已知一个学生的分数,给出其分数等级。90-100分为A级;80-89分为B级;70
-79分为C级;60-69分为D级;0-59分为E级publicclassIfElseDemo{publicstaticvoidmain(String[]args){inttestscore=76;chargrade;if(testscore>=90){grade='A';
}elseif(testscore>=80){grade='B';}elseif(testscore>=70){grade='C';}elseif(testscore>=60){grade='D';}else{grad
e='F';}System.out.println("Grade="+grade);}}64程序输出:Grade=C第64页,共75页。switch选择结构•switch语句是多分支的选择结构swit
ch(switch-expression){casevalue1:statementsforcase1;break;casevalue2:statementsforcase2;break;...casevalueN
:statementsforcaseN;break;default:statementsfordefaultcase;break;}•注意问题•switch-expression、常量值value1到valueN必须是整形或字符型
•如果表达式的值和某个case后面的值相同,则从该case之后开始执行,直到break语句为止•default是可有可无的,若没有一个常量与表达式的值相同,则从default之后开始执行65第65页,共75页。switch选择结构(续)——用swi
tch代替ifif(i==1){statementA();}elseif(i==2){statementB();}elseif((i==3)||(i==4)){statementC();}elseif(i==5){statementD();}else{stat
ementF();}switch(i){case1:statementA();break;case2:statementB();break;case3:case4:statementC();break;case5:statementD();break;de
fault:statementF();}66第66页,共75页。switch选择结构(续)——例2_2,例2_367第67页,共75页。for循环结构•for循环结构•是Java三个循环语句中功能较强、使用较广泛的一个•
for循环可以嵌套•一般语法格式如下for(start-expression;check-expression;update-expression){//bodyoftheloop;}•解释•start-expr
ession完成循环变量和其他变量的初始化工作•check-expression是返回布尔值的条件表达式,用于判断循环是否继续•update-expression用来修整循环变量,改变循环条件•三个表达式之间用分号隔开68第68页,共75页
。while循环结构•while语句•实现“当型”循环,其一般语法格式如下:while(check-expression){//bodyoftheloop;}•解释•条件表达式(check-expression)的返回值为布尔型•循环体可以是单个语句,也
可以是复合语句块•执行过程•先判断check-expression的值,为真则执行循环体•循环体执行完后再无条件转向条件表达式做计算与判断;当计算出条件表达式的值为假时,跳过循环体执行while语句后面的语句。若为真,则继续执行循环69第69页
,共75页。while循环结构(续)•循环接受并输出从键盘输入的字符,直到输入的字符为回车为止charch=‟a‟;while(ch!=‟\n‟){System.out.println(ch);ch=(
char)System.in.read();//接收键盘输入}70第70页,共75页。do-while循环结构•do-while语句•实现“直到型”循环•一般语法结构如下do{//bodyoftheloop;}while(check-expr
ession);•其使用与while语句很类似,不同的是它首先无条件的执行一遍循环体,再来判断条件表达式的值,若表达式的值为真,则再运行循环体,否则跳出do-while循环,执行下面的语句•特点:它的循环体至少要执
行一次71第71页,共75页。do-while循环结构(续)例:ex2_4.java,ex2_5.java72//…while(i<=10){sum+=i;i++;}System.out.println("sum="+sum);//…do{sum+=i;i++;}wh
ile(i<=10);System.out.println("sum="+sum);•比较这两段程序第72页,共75页。break语句•功能•跳出循环,不再执行剩余部分•适用场合•在switch结构中,用来终止switch语句的执行•在for循环及while
循环结构中,用于终止break语句所在的最内层循环;与标号一同使用时,将跳出标号所标识的循环•也可用在代码块中,用于跳出它所指定的块例:BreakTest.java73第73页,共75页。continue语句•continue语句•必须用于循环结构
中•停止本次迭代,回到循环起始处,开始下一次迭代过程•有两种使用格式•不带标号的continue语句•终止当前这一轮的循环,跳出本轮循环剩余的语句,直接进入当前循环的下一轮•带标号的continue语句•使程序的流程直接转
入标号标明的循环层次•例:Example2_10.java,ContinueTest.java74第74页,共75页。轻松一刻•IBM通过它的Alphaworks站点推出了大量有关java实用软件,其中Robocode软件是一个非常有教育意义的系统,目的是让人们从玩游戏的过程中学习Java,可以
通过编程部署机器人坦克。•从下列站点下载:http://robocode.sourceforge.net/75第75页,共75页。