版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章Java语言基础
ElementaryProgramminginJava董东计算机与网络空间安全学院1内容2.1标识符2.2基本数据类型2.3字面量2.4变量2.5运算符2.6运算符的优先级2.6表达式和语句 2.7控制台输入和输出 2.8控制结构2.9数组22.1标识符和保留字标识符必须以字母(包括Unicode字母)、下划线(_)或美元符号($)开始;除了第一个字符外,其余部分由字母、数字、下划线或美元符号组成;不能使用Java保留字作为标识符,如class、public、void等;标识符中不能含有特殊符号,即非字母、数字、下划线或美元符号。如叹号(!)at号(@)数字符号(#)百分号(%)与号(&)尖号(^)星号(*)空格
3注意不能使用Java保留字,如class、public、void等作为标识符;不要使用汉语拼音作为标识符!比如使用graduateStudent而不是yanJiuSheng。4驼峰命名法对于类名使用大驼峰命名法每个单词首字母大写如MyCar对于变量名则采用小驼峰命名法首个单词首字母小写,后续单词首字母大写如licenceNumber)5保留字6Java17基本数据类型数据类型(datatype)是包含了值以及在这些值上的操作的集合。Java中有两种类型:引用类型(referencetypes)基本数据类型(primitivetypes)引用类型包括三种:类(class)接口(interface)数组(array)基本数据类型有八种:boolean、char、byte、short、int、long、double和float。7所谓“引用”,就是用来访问对象的标识。boolean数据类型boolean表示逻辑值逻辑值只有两个:truefalse8char数据类型char表示了Unicode字符集及其上的操作9char源程序中的字符要使用单引号('')括起来。例如,'a' //字母a'\t' //制表符也可以使用Unicode编码来表示字符,如'\u0061'就是'a'。在'\u0061'中,0061是4位的十六进制数字,表示了英文字母“a”在Unicode字符集中的编号;“\u”表示把“0061”转义为1个Unicode字符而不是4个普通十六进制数字。10char字符串是字符序列。Java中使用类型String表示字符串,但是它不是基本数据类型11数值Java中把数值分成两类:整数浮点数所有数值类型都是有符号的,也就是说都有正数和负数12整数13浮点数浮点类型float共32比特(4字节)有效数字使用24比特浮点类型double共64比特(8字节)有效数字部分53比特14浮点数的“精度”指有效数字的位数注意浮点数不能精确地表示所有的实数。比如十进制数0.1只能被近似表示为二进制数0.0001100110011001100110011010。float类型的0.1与实数0.1的误差为2-25。152.3字面量字面量(literal)是值在源代码中的文本表示。根据数据类型不同,Java中字面量有:布尔字面量字符字面量整数字面量浮点数字面量字符串字面量(String类型)16字面量布尔字面量只有两个:true和false。字符字面量就是单个的Unicode字符。使用英文单引号把字符引起来以区别该符号不是标识符。例如,在源代码中使用字母a,则要写成'a'。诸如换行之类的特殊字符,则使用转义符号(\)。例如,'\n'表示换行符。17UnicodeJava将字符字面量按16位Unicode字符编译。Unicode字符集把一个字符映射到一个整数,称为Unicode代码点最小是0,最大是65535使用十六进制表示就是从0000到FFFFJava中可以使用Unicode转义'\u0000'到'\uffff'来表示单个字符,其中u的意思就是Unicode。18转义19字符串字面量字符串字面量是使用双引号引起了的字符序列例如"Java"注意无论单引号还是双引号,都是英文引号而不是中文引号20整数字面量根据进制不同,整数字面量分为十进制整数、十六进制整数、八进制和二进制整数。默认使用十进制整数,例如12。如果想使用十六进制整数,则需要在数字序列前面添加“0x”或者“0X”前缀。例如0xC表示十进制数12。要在八进制整数前添加前缀“0”,例如014表示十进制数12。Java7BinaryLiterals:0b00110101Java默认所有整数字面量的数据类型为int。如果指定整数字面量为long类型,则需要在数字的末尾添加后缀“L”或者“l”。例如12L表示整数12为long类型。21例子byteb=0x7f; //127,十六进制8位整数intx=0b101; //5,二进制32位整数inti=0x1f; //31,十六进制32位整数intj=0X1F; //31,十六进制32位整数intk=31; //31,十进制32位整数longm=200L; //200,十进制64位整数longn=200l; //200,十进制64位整数22注意不能把“宽”的字面量赋值给“窄”的变量例如byteb=0x7ff0x7ff是32位整数,赋值给8位的变量,编译会提示错误。但是编译器并不对byteb=0x7f;提示错误,这是因为编译器识别到虽然0x7f是32位整数,但高24位都是0,截断后没有损失。23浮点数字面量浮点数字面量有两种表示形式:标准形式和科学记数形式。例如583.45(标准形式)或者1.23e+2(科学记数形式)。字面量1.23e+2表示数字1.23×102=123。注意,1.23e+2与1.23e2含义相同。“e”表示指数(exponent),可以是大写“E”。Java默认浮点字面量是double类型。如果要指定为float类型,则需要在数字的末尾添加后缀“F”或者“f”。24例子floatf1=128.6F; //32-bit浮点数floatf2=128.6f; //32-bit浮点数floatf3=1e-45f; //10-45,科学记数形式floatf4=1e+9f; //109,科学记数形式doubled1=1256.8d; //64-bit浮点数doubled2=1256.8D; //64-bit浮点数doubled3=1.2568e3d; //1.2568×103
//科学记数形式25变量变量(variable)是一个命名的存储单元(cell)。该存储单元中的内容在程序运行期间可能会被改变变量的数据类型决定了存储单元的大小变量必须先声明其数据类型才能使用26变量的四种类型实例变量(InstanceVariables)每个对象都有的成员变量类变量(ClassVariables)声明成员变量时如果使用保留字static修饰,则是类变量局部变量(LocalVariables)在方法体中声明的变量称为局部变量方法每被调用一次就会为方法体中的局部变量重新分配一次存储形式参数(Parameters)方法的形式参数也是局部变量27声明变量声明变量的语法:
<数据类型><变量名>[=<初值>];28例子intx; //声明整数类型的变量,名字为x;doubleradius; //声明浮点数类型变量,名字为radius;chara; //声明字符类型变量,名字为a;//声明浮点类型变量,名字为grade,初值为0.0doublegrade=0.0;29多个变量可以一起直接声明并初始化例如:
intx,y;inta=3,b=4,c=5;30输出变量的值System.out.println()System.out.print()System是一个内置的Java类,out是System类中声明的成员变量,通过该变量引用了一个负责进行显示输出的对象。System.out.println("Hello")的意思是:执行System.out对象上的方法println()显示输出字符串“Hello”。31例子输出为:10Thevalueofx=A32intvalue=10;charx;x=‘A’;
System.out.println(value);System.out.println("Thevalueofx="+x);Java中有两种数据类型的变量:基本数据类型引用数据类型基本数据类型的变量把数据存放在该变量名标识的存储单元中;而引用类型的变量仅仅在该变量名标识的存储单元中存放实际数据的地址,即指向了存放实际数据的存储单元。33例inti=10; //基本数据类型Stringname="Donald"; //引用数据类型34类型的自动转换在进行表达式计算时,Java能够自动地把“窄”数据类型转换为“宽”的数据类型。所谓“窄”,就是该数据类型所用的存储字节少;所谓“宽”,就是该数据类型所用的存储字节多。例如,如果程序中有表达式2*0.3,那么就会把2转换为double类型,然后再和double类型的字面量0.3相乘。自动转换的规则:35转型在变量前面添加括号括起来的数据类型就能把该变量转型为此数据类型。例如,下面的的赋值语句就把long类型的变量g赋值给了int类型的i:inti;longg=100;i=(int)g;转型运算(int)把long值转换成int值。36转型的例子37publicclassCastingDemo{publicstaticvoidmain(String[]argv){inti;doublej=2.75;i=j; //编译错误
i=(int)j; //显式转型;i的值为2
System.out.printf("%s%d%n","i=",i);longb;b=i; //没有编译错误System.out.printf("%s%d%n","b=",b);}}注意在对byte、short和char这三种数据类型变量使用字面量初始化时,如果初值在其数据类型的取值范围内,编译器自动优化为该数据类型。例如,byteb=0x2A;仍然会把值42存入变量b而不会出现编译错误,虽然字面量0x2A是一个整数;在byteb=0x8A;中0X8A是正整数138,超出了byte类型的范围[-128,127],所以会出现编译错误。38运算符Java语言中的运算符有赋值运算符算术运算符关系运算符逻辑运算符条件运算符39赋值运算符赋值(assignment)运算符用以向变量名标识的存储单元中存放一个值。40inta=1; //把1赋值给变量aintb=2+3; //把表达式2+3的运算结果赋值给bStringname="Donald"; //把字符串(String对象)"Donald"的引用赋值
给引用类型变量nameintd=a=b; //把b赋值给a,然后把a赋值给d算术运算符41注意如果a和b都是整数,那么除运算/只保留商而舍弃余数。如果a和b其中有一个是浮点数,则执行浮点数的除法运算。例如5/2的结果是25.0/2、5/2.0、5.0/2.0的结果都是2.5。取余运算符%也称为模运算符,其结果是整数除法运算a/b的余数。取余运算a%b结果的符号取决于第一个操作数a。42注意如果一个运算符有两个操作数,则称其为双目运算符(binaryoperator);如果只有一个操作数,则称其为单目运算符(unaryoperator)。当算术运算符+和–用作单目运算符时,就表示正数和负数。运算符++和--也是单目运算符。增量运算符(++)把操作数增1减量运算符(--)从其操作数中减去1a++在功能上等价于a=a+1。43后缀形式和前缀形式如果++和--写在变量的后面,则称为该运算符的后缀形式(postfixform)反之,如果++和--写在变量的前面,则称为该运算符的前缀形式(prefixform)后缀形式和前缀形式表达式的计值结果是不同的。例如,假设变量i的当前值是1,下面的语句将使j的值为1而i的变为2:j=i++;但是,下面语句使i和j的值为2:j=++i;44运算符+当运算符+的两个操作数中存在字符串时则进行字符串连接运算而当操作数中存在字符时则进行整数加法运算45OperatorAdditionDemo.java关系运算符46OperatorComparisonDemo.java逻辑运算符47OperatorLogicalDemo.java条件运算符<逻辑表达式>?<表达式1>:<表达式2>max=(a>b)?a:b;48if(a>b){max=a;} else{max=b;}位运算符直接针对二进制位进行操作的运算符称为位运算符位运算符有两类:按位逻辑运算符按位与&按位或|按位异或^按位否~移位运算符左移1位<<有符号右移1位>>无符号右移1位>>>49按位逻辑运算只有当两位相同时为1时按位与&的运算结果才为1,无论是否符号位当两位中存在一位为1时按位或|的运算结果就1,无论是否符号位当两位相同时按位异或^运算结果为0;不同时运算结果为1按位非~就是把1变为0,把0变为1。50OperatorBitWiseLogicalDemo移位运算符左移运算符把二进制位向左移动指定的位数,符号位一起移动,低位补0。右符号右移运算符>>把二进制位向右移动指定的位数,符号位一起移动,高位补原符号位。无符号右移运算符>>>把二进制位向右移动指定的位数,高位补0。51OperatorShiftDemo.java运算符的优先级比如1+2*3,先算1+2,还是先算2*3?这取决于*的优先级是否高于+。52运算符优先级与结合性53表达式和语句一个字面量、一个变量就是最简单的表达式(expression),通过各类运算符连接的表达式形成新的表达式。表达式的值就是对其中字面量、变量按照运算符计值后的结果。假设x和y都是int类型变量,x中已经存储了整数2,下面都是表达式:12x12+xy=x+354这些表达式的值分别是12、2、14、5注意赋值表达式y=x+3还能用在另外一个表达式中:z=(y=x+3)*4这使得变量y中存放5,变量z中存放20。表达式中还可以包含方法调用。例如下面的表达式中包含的Math类中的方法abs()调用,用来计算绝对值:5*(Math.abs(-20)/4)55语句语句(statement)是以分号(;)结束的完整的基本执行单元。Java中的语句有表达式语句、声明语句和控制流语句。表达式语句用来改变变量的值、调用方法和创建对象。声明语句用来声明变量。控制流语句确定语句的执行顺序。56语句inti;//声明语句i=1;//表达式语句if(i<10){//控制流语句
System.out.println(i);//表达式语句}57块使用大括号把若干条语句括起来,就成为块(block)形如:58{<语句序列>}控制台输入和输出控制台(console)指的是与主机平台交互的命令行界面通过java.util.Scanner对象可以方便地从控制台中读取基本数据类型的数据Scanner默认使用空白符作为分隔符把输入串分割成词元(token)空格、制表符、回车、换行、进纸等都称为空白符59Scanner类比如以空格作为分隔符如下字符序列:123.14Car则Scanner可以识别为整数12、浮点数3.14和字符串Car三个记号。60Scanner默认Scanner使用空白符作为分隔符。空白符可以是一个或若干个空格、制表符、进纸、回车符或者换行符。61例运行程序,根据提示“Enteraninteger,adoublevalueandastring:”,输入:123.14Car注意以空格隔开这三个数据,然后回车,程序显示:Yourintegeris:12Yourdoublevalueis:3.14Yourstringis:Car62ScannerDemo.java例System.in是在System类中定义的静态变量,引用标准输入流对象,其类型为java.io.InputStream这个输入流默认连接到键盘,允许程序接收用户输入的数据以其作为参数调用Scanner类的构造方法创建了一个Scanner对象用来从控制台读入数据63System.out是System中定义的静态变量,引用标准输出流对象,默认连接显示器printf()是out的实例方法,提供了与C语言中的printf函数相同的语法和功能。64nextXxx方法Scanner类为每一种基本数据类型都提供了相应的nextXxx方法用读取该类型的值。例如:nextBooleannextBytenextShortnextLongnextDoublenextFloatnextLine其中,nextLine方法以字符串返回下一行。如果不想读取一整行,而执行读取下个记号,则使用next方法。next方法以字符串形式返回下个记号。65如果期望输入的数据类型与实际输入的数据类型不匹配,那么就会抛出InputMismatchException异常。例如期望输入一个整数12,而却错误地输入了浮点数:Enteraninteger:3.14Exceptioninthread"main"java.util.InputMismatchExceptionhasNextXxx方法booleanhasNextBoolean()booleanhasNextByte()booleanhasNextShort()booleanhasNextLong()booleanhasNextDouble()booleanhasNextFloat()booleanhasNextLine()booleanhasNext()66注意如果想仅读入一个字符,而不是字符串67CharInputDemo.java注意如果想得到字符数组,那么可以使用nextLine方法作为字符串读入一行,然后使用字符串对象的toCharArray方法把字符串转换为字符数组。68控制结构顺序结构分支结构循环结构69顺序结构70
x=5;x=x+2;活动图(activitydiagram)活动图中最主要的符号就是圆角矩形框,表示一个活动一个活动至少含有一个动作其它常用的图形符号还有初始结点、终止结点、控制流、判定、守卫条件等。一个圆角框到另外一个圆角框的带箭头的连线表示控制流,意味着一个活动执行完毕另外一个活动才能开始。初始结点使用实心圆表示;终止结点使用有环的实心圆表示。71分支结构72intx=-1;intresult=x;if(x<0){result=-x;}分支结构73其中if语句的一般形式是:if(<逻辑表达式>)<语句>;分支结构74if(<逻辑表达式>){<语句1>;<语句2>;……}例计算绝对值75其中的菱形表示判定结点,对应于程序中的分支语句。从判定结点出发的控制流上通常标记守卫条件。守卫条件是中括号括起来的逻辑表达式。意思是只有满足该条件,才能运行控制流通过。例76intx=-1;inty=0;if(x<0){y=2*x*x+1;
}else{y=6*x-4;}条件表达式:IfElseDemo.javaif-else语句77if(<逻辑表达式>){<语句1>;<语句2>;...}else{<语句3>;<语句4>;...}嵌套if语句78 if(<逻辑表达式1>){
……//块1 }elseif(<逻辑表达式2>){
……//块2 }
…… elseif(<逻辑表达式n>){
……//块n }else{
……//块n+1 }IfElseIfDemo.javaswitch语句79<表达式>是整型、字符类型、枚举类型或者字符串<语句序列>是0条或多条语句当程序执行到该语句,首先对
<表达式>计值,把计值结果与<值1>进行比较,如果匹配则执行<语句序列1>、<语句序列2>、……、<语句序列n>、<语句序列n+1>;否则与<值2>进行比较,如果匹配则执行<语句序列2>、……、<语句序列n>、<语句序列n+1>;当与<值n>匹配失败时执行default中<语句序列n+1>。switch(<表达式>){case<值1>:<语句序列1>case<值2>:<语句序列2>……case<值n>:<语句序列n>default:<语句序列n+1>}例把中文数字转换为阿拉伯数字80无break:SwitchDemo.java有break:SwitchBreakDemo.java
输入“一”,程序的输出10而不是期望的1switch语句常见形式81switch(<表达式>){case<值1>:<语句序列>break;case<值2>:<语句序列>break;default:<语句序列>}因为大多是分支都是“排他”情形,所以实践中的switch语句的每个case后面总要有break语句例把百分制的考试分数转换成A,B,C,D,E,F和I的等级成绩。82SwitchGradeDemo.java注意在switch(<表达式>)中,<表达式>是整型字符型枚举String83问题一是从第9行到第14行共享第15和第16行的语句,但读起来令人觉得莫名其妙;二是太多的break语句,读起来让人觉得啰嗦可以使用“标签规则”来解决这两个问题。84SwitchGradeArrowLabelDemo.javaswitch标签规则一个->连接的左部和右部称为一条switch标签规则。箭头左部列举各种情形;箭头右部则是一条语句或语句块:85switch(<表达式>){case<左部1>-><右部1>case<左部2>-><右部2>
……case<左部n>-><右部n>default<左部n+1>-><右部n+1>}例使用标签规则根据用户输入的菜单项索引号选择不同的功能去执行86Menu.javaMenu2.java循环控制结构while语句do-while语句for语句87while语句对<循环条件>计值;如果<循环条件>为false,跳过<语句序列>块,执行后随语句;如果<循环条件>为true,执行<语句序列>块;转到步骤(1)。88while(<循环条件>){<语句序列>}举例89把公差d为1、首项a为1、项数n为10的等差数列累加WhileLoopDemo.java循环控制结构的组成90死循环91inta=1;intn=10;intd=1;intsum=0;inti=1;while(i<=n){sum=sum+(a+(i-1)*d);}do-while语句92do{<语句序列>}while(<循环条件>);使用do-while循环对首项为1公差为1的n项等差数列累加DoWhileLoopDemo.javafor语句93for(<初始化>;<循环条件>;<步骤更新>){<语句序列>}while循环和do-while循环适合于无法预知循环次数的情况如果预先知道循环次数,则使用for循环使得代码更为简洁些。举例94执行初始化语句i=1,把1赋值给整型变量i;对循环条件i<n计值。如果为真,执行循环体;否则结束for语句执行后随语句;执行循环体中的语句:sum=sum+(a+(i-1)*d);执行<更新循环条件>:i++;转步骤2。使用do-while循环对首项为1公差为1的n项等差数列累加ForLoopDemo.java分支语句breakcontinuereturn95breakbreak语句使得程序的执行流程立即从该语句位置跳转到switch语句的后随语句,即终止了switch语句的执行转去执行其后随语句96inti=9;while(i>=1){i--;if(i==3){break;}System.out.printf("%d",i);}输出结果是87654,而不是87654321。continue仅跳过本次迭代中尚未执行的语句,进行下次迭代97inti=9;while(i>=1){i--;if(i==3){continue;}System.out.printf("%d",i);}输出结果是87654210而不是
876543210returnreturn语句用以从当前正在执行的方法中返回到调用该方法的位置。除了能够将控制流返还给方法的调用者,return语句还能交给方法的调用者一个值,称为返回值。仅需要把要返回值放在保留字return的后面即可。例如:语句return++i;返回对变量i增1后的结果。语句return"Donald";返回字符串“Donald”的引用。返回值的数据类型必须和方法声明的返回值类型兼容。如果方法声明的返回值类型是void,那么就不能返还任何值。98数组在Java中使用数组一般有四个步骤:声明数组类型的引用变量;创建数组对象,并通过前面声明的变量进行引用;初始化数组对象;访问数组对象。99声明声明数组引用的语法一般是:<元素数据类型>[]<标识符>例如:int[]a;100创建int[]a; //声明a=newint[6]; //创建对象
“newint[6]”的意思创建容量为6的数据元素类型为int的数组对象。101声明并创建对象int[]a=newint[6]; //声明并创建对象102声明时初始化int[]a={92,83,74};103创建数组时初始化也可以在创建数组对象时通过列举字面量作为数组对象的初值:inta;a=newint[]{1,3,5,6};104注意如果没有对数组进行显式初始化,那么Java会把每个数组元素设置为其数据类型的默认值。整数类型的默认值是0浮点数类型的默认值是0.0boolean类型的默认值是falsechar类型的默认值是'\u0000'。由于数组的容量是个int类型的整数,所以,其最大值就被限制为int类型的最大值:2147483647。105属性length数组对象的属性length记录着数组的容量,通过成员访问运算符“.”能够获取这个数:
intarraySize=a.length; //length是数组对象的成员变量106访问数组元素通过数组中每个元素的索引(index),或者称为下标(subscript)来访问数组元素。元素的索引是个整数,从0开始编号,范围是0到length-1。107访问数组元素使用无效的索引访问数组会产生索引越界异常108int[]a={1,3,5,6};//具有4个元素的数组a[0]=10;//把10赋值给索引为0的元素System.out.print(a[3]);//输出索引为3的数组元素ArrayExceptionDemo.java访问数组元素10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新颖游乐活动策划方案(3篇)
- 2026内蒙古昌都市丁青县消防救援大队补招政府专职消防员4人备考考试试题及答案解析
- 2026山东事业单位统考淄博高新区事业单位面向退役大学生士兵招聘综合类(专项)岗位备考考试题库及答案解析
- 2026中电科金仓(北京)科技股份有限公司校园招聘备考考试试题及答案解析
- 2026年上半年黑龙江省林业科学院事业单位公开招聘工作人员55人笔试备考试题及答案解析
- 2026甘肃兰州市安宁区人民医院招聘编外医务工作人员1名备考考试题库及答案解析
- 2026四川宜宾市屏山县融媒体中心第一次招聘编外工作人员1人参考考试题库及答案解析
- 2026浙江宁波东方蔚蓝人力资源有限公司第一期招聘2人备考考试试题及答案解析
- 2026中国科学院理化技术研究所热声热机团队招聘特别研究助理博士后1人备考考试题库及答案解析
- 2026广东茂名出入境边防检查站编制外人员招聘1人笔试模拟试题及答案解析
- 设备日常维护保养培训课件
- 生活物资保障指南解读
- 2025年浙江省委党校在职研究生招生考试(社会主义市场经济)历年参考题库含答案详解(5卷)
- DB3704∕T0052-2024 公园城市建设评价规范
- 采购领域廉洁培训课件
- 公司股东入股合作协议书
- 2025年中国化妆品注塑件市场调查研究报告
- 小儿药浴治疗
- 保险实务课程设计
- 物业管理公司管理目标标准
- 2023年重庆巴南区重点中学指标到校数学试卷真题(答案详解)
评论
0/150
提交评论