回顾Java语言概述●Java的历史与发展●Java的特点●Java开发环境的搭建●Java的程序结构(application,applet)复习●源程序格式●关键字和标识符●基本数据类型(常量,变量)●运算符●程序的控制流程●String类●StringBuffer类●数组●输入输出第二章Java编程基础●Java源程序格式Packagedeclaration包的申明Importstatements导入语句Classdefinitions类的定义修饰符class类名{}●Java严格区分大小写●Java是一种自由格式语言●文件名以.java结尾;一个源文件中最多包含一个public类,和多个非public的类;源文件名与public类名相同例:FormatTest.java●Java的注释//单行注释/**/多行注释/***/形成专业文档●不会出现在可执行程序中●多行注释不能嵌套●关键字和标识符abstractdefaultifprivatethisbooleandoimplementsprotectedthrowbreakdoubleimportpublicthrowsbyteelseinstanceofreturntransientcaseextendsintshorttrycatchfinalinterfacestaticvoidcharfinallylongstrictfpvolatileclassfloatnativesuperwhileconstfornewswitchcontinuegotopackagesynchronizedassertfalsenulltrue●关键字不可作为标识符;全部为小写●关键字和标识符●标识符(identifiers)第一个字符:字母$_其他字符:字母$_数字注意:字母包括在某种语言中代表字母的任何unicode字符以下为合法的标识符:A98_23_abc$Usdollarsusername以下为非法的标识符:A-43_1Helloworldclass●直接量(literals)●整型直接量:–32位(默认)和64位(长整型L/l)–28(十),034(八),0X1C(十六)●浮点直接量:–32位(F/f)和64位(双精度D/d,默认)–19.4(一般表示)1.94E1(指数表示)●boolean直接量:true,false–不能转化为int型在程序中直接出现的不变值例:LiteralTest.java●直接量(literals)●字符型直接量:用单引号界定–‘c’,‘\u0063’–采用Unicode码●字符串直接量:用双引号界定–“HELLO,WORLD”–+号的特殊用法●直接量(literals)●特殊字符引用方法意义‘\b’回退‘\t’水平制表符tab‘\n’换行‘\r’回车‘\”’双引号‘\’’单引号‘\\’反斜线●数据类型整数类型(byte,short,int,long)浮点类型(float,double)基本数据类型字符型(char)数据类型(primitive)布尔型(boolean)引用数据类型类(reference)接口数组JDK5中增加了枚举类型●基本数据类型数据类型关键字位数缺省数值布尔型boolean8false字符型char16‘\u0000’字节型byte80短整型short160整型int320长整型long640单精度型float320.0F双精度型double640.0D注意:变量的取值范围;作用域;初始化(成员变量,自动变量,类变量)final申明常量;常量必须在使用前说明和初始化,一旦初始化就不能再改变它的值例:VariableTest.java●变量类型转换●自动转换conversion(赋值、方法调用、数学运算)●强制转换casting(目标类型)charintlongfloatdoublebyteshort●自动提升(arithmeticpromotion)byte,short,char--------intdouble,float,long例:TypeConversionTest.java●运算符●算术运算符●赋值运算符●关系运算符●逻辑运算符●位运算符●算术运算符●双目运算符+,-,×,/,%(取余)+号:可连接字符串“He”+“llo”为“Hello”●单目运算符(自运算符)•++,--,运算符的位置决定自运算的顺序a=3,b=5;c=(a++)*b;a=?,c=?•-,+:一元减号,加号例:OperatorTest.java●赋值运算符=op=例如:x+=45;●关系运算符对两运算量大小关系的比较,结果是布尔量,,=,=,!=,==(与=不同)●逻辑运算符●表示两布尔量的逻辑关系,结果仍为布尔量&|^!&&||注意:短路与&&与&,短路或||与|的区别&&||:如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了例:OperatorTest.java●位运算符●按位运算:~,&,|,^●移位运算:,,注意:移位运算符适合byte,short,char,int,long;byte,short,char转换成int;ab,若a为int,则b对32取模;若为long,则b对64取模用符号位填充高位;用0填充高位x二进制表示x2x2x23000011110011110000000011100000111-1711101111101111001111101100111011例:OperatorTest.java●运算符的优先级见核心技术43页●表达式不宜太复杂●程序的流程控制●顺序●分支(if,switch)●循环(while,dowhile,for)●if条件语句●if(条件语句){执行语句块}●if(条件语句){执行语句块1}else{执行语句块2}●if(条件语句1){执行语句块1}elseif(条件语句2){执行语句块2}…elseif(条件语句n){执行语句块n}else{执行语句块n+1}●if语句的嵌套●条件语句必须为boolean型●Switch选择语句switch(表达式){case取值1:语句块1;break;…case取值n:语句块n;break;default:语句块n+1;break;}例:SwitchTest.java●表达式为int,byte,char,short,枚举类型●注意break●default为可选●取值是直接量,所有case子句中的值应是不同的。●while循环语句while(条件表达式语句){执行语句}●dowhile循环语句do{执行语句}while(条件表达式语句);●for循环语句for(表达式1;表达式2;表达式3){执行语句}注意:若表达式1中声明了一个变量,则其作用域为for循环体内部例:ForLotteryTest.javafor(variable:collection){执行语句}注意:变量用于暂存集合中的每一个元素,集合是一个数组或实现了Iterable接口的类对象●break与continuebreak:退出内层循环,退出switch语句带标签的break:用于退出多重循环,跳转到带标签的语句块末尾continue:跳出当前循环的剩余语句,接着执行下一次循环带标签的continue:跳到与标签匹配的循环的首部例:ContinueBreakTest.java●尽量少用带标签的break和continue●String类栈某方法的栈空间堆...0x3000newString(“abc”)abcStringx0x3000Stringx=newString(“abc”)Stringx=“abc”;Stringx=newString(“abc”);x=newString(“def”);def0x30100x3010●内容不可改变的字符串●String类栈某方法的栈空间堆...0x3000abcxStringx=“abc”;Stringy=“abc”;Stringz=newString(“abc”);Strings=newString(“abc”);abc0x30100x40000x4000y0x3010z0x3000sabc0x4000●String类●串连接+●子串substring(position1,position2)●串编辑length(),charAt(n),indexOf(),trim(),replace(char1,char2)●测试串是否相等equals(),equalsIgnoreCase()Strings=“Hello,”;Stringt=“Java!”;Stringn=s+t;intage=13;Stringm=“Hisageis”+age;Strings=“Hello”;Stringt=s.substring(0,4)Strings=“hello”;intn=s.length();charlast=s.charAt(4);intm=s.indexOf(‘e’);intm=s.indexOf(“llo”);●String类●串连接+●子串substring(position1,position2)●串编辑length(),charAt(n),indexOf(),trim(),replace(char1,char2)●测试串是否相等equals(),equalsIgnoreCase()●其他方法见JDK文档Strings=“Hello”;Stringt=“Hello”;s.equals(t);s==t:测试两个串是否放在同一位置例:StringTest.java●StringBuffer●用于可改变的字符串(例:StringBufferTest.java)●构造方法:StringBuffer()StringBuffer(intcapacity)StringBuffer(StringintialString)●常用方法:StringBufferappend(Stringstr)StringBufferinsert(intoffset,Stringstr)StringBufferreverse()StringBuffersetCharAt(intoffset,charnewChar)StringBuffersetLength(intnewLength)●StringBuilder的用法类似,用于单线程●一维数组●声明(declaration)typearrayName[];type[]arrayName;注意:类型(type)可以为Java中任意的数据类型,包括基本类型和引用类型;不允许指定数组的大小;推荐使用第二种写法。intintArray[];int[]intArray;String[]stringArray;●创建(construction)arrayName=newtype[数组大小];注意:创建时,数组元素被自动初始化;数组创建后不能修改大小。int[]intArray;//声明intArray=newint[3];//创建int[]intArray=newint[3];●一维数组栈某方法的栈空间0x3000堆newint[3](construction)000int[]x0x3000x=newint[3]●一维数组●初始化(initialize)int[]intArray={1,2};int[]intArray=newint[]{1,2};String[]stringArray={abc,How,you};int[]intArray;intArray=newint[5];for(inti=0;i5;i++)intArray[i]=i*i;String[]stringArray;stringArray=newString[3];stringArray[0]=How;stringArray[1]=are;stringArray[2]=you;int[]intArray;i