




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章Java语言基础第三章Java语言基础1Java基本语法Java的标识符、关键字、数据类型Java的常量与变量Java的各种运算符及表达式Java控制语句Java的数组和字符串本章内容Java基本语法本章内容23.1Java语言的基本语法Unicode字符集:16位编码标准3.1.1标识符(identifier)标识符是赋予变量、常量、数组名、文件名类或方法、对象的名称由字母、数字、_和$组成,其中字母可以是Unicode字符集中的字符,如大、小写英文字母、汉字、日文片假名和朝鲜文等,数字为0到9标识符的第一个字符不能是数字长度不限,但不宜过长区分大小写不能用关键字3.1Java语言的基本语法Unicode字符集:16位编3在Java规范中约定:关键字、变量名、对象名、方法名、包名通常全部字母小写;如果由多个单词构成标识符,则首字母小写,其后单词首字母大写,如toString;类名首字母大写,如FirstJava;常量名全部字母均大写,如BOOK。在Java规范中约定:4下面是几个有效的标识符:identifierthisoneUserName User_name_system_varl$max下面是几个非法的变量名:3maxroom#class 指出哪些标识符是不准确的,说明原因here_therethisthatit2tol_it(变量名不能以数字开头)(包含非法字符“#”)(“class”为保留字)下面是几个有效的标识符:(变量名不能以数字开头)(包含非法字5Java语言中一些被赋以特定的含义、并用做专门用途的单词称为关键字所有Java关键字都是小写的goto和const虽然从未使用,但也作被为Java关键字保留TURE、FALSE、NULL等都不是Java关键字3.1.2关键字(keyword)TURE、FALSE、NULL是合法的Java标识符吗?Java语言中一些被赋以特定的含义、并用做专门用途的单词称为6关键字-1原始数据类型byteshortintlongfloatdoublecharboolean循环关键字dowhileforbreakcontinue分支关键字ifelseswitchcasedefaultbreak方法、变量和类修饰符privatepublicprotectedfinalstaticabstractsynchronizedvolatile关键字-1原始数据类型分支关键字7异常处理trycatchfinallythrowthrows对象相关关键字 newextendsimplementsclassinstanceofthissuperinterface
字面值常量falsetruenull方法相关关键字returnvoid包相关关键字packageimport关键字-2异常处理字面值常量关键字-28圆括号“()“:用于方法参数、控制语句、数据类型转换中括号“[]“:用于数组大括号"{}“:用于构造语句块逗号“,”:在方法声明或调用时的参数列表中用于分隔多个参数,也可在一条声明语句中同时声明多个属性或局部变量时起分隔作用分号“;”:Java语句必须以分号作为结束标记,for循环语句中使用分号来分隔不同的成份空格"“:Java程序源代码中各组成部分之间可以插入任意数量的空格,包括换行圆点“.“:用于访问对象成员(属性或方法)3.1.3分隔符圆括号“()“:用于方法参数、控制语句、数据类型转换数据类型布尔(boolean)数值类型类数组字符(char)字节(byte)短整数(short)整数(int)浮点类型单精度浮点数(float)双精度浮点数(double)数据类型基本数据类型引用数据类型枚举接口定点类型长整数(long)图3-1Java数据类型3.1.4数据类型布尔(boolean)数值类型类数组字符10逻辑类型只有两个取值:true和false8位注意:Java语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算
1.布尔型booleanbool.java逻辑类型1.布尔型booleanbool.java112.整数类型:byte,short,int,long所有Java编程语言中的整数类型都是带符号的数字,不存在无符号整数长度不变类型长度字节数取值范围byte8位1字节-128~127short16位2字节-32768~32767int32位4字节-2147483648~2147483647long64位8字节-9223372036854775808~92233720368547758072.整数类型:byte,short,int,long所有12整型常量:十进制:123、234八进制:077、011//首位为“0”十六进制:0x12ABC//首位为“0x”整型常量默认为int长整型常量:后面加L或lTestInteger.java整型常量:TestInteger.java13float型:常量:123.34f、12.76F、123.0fdouble型:常量:123.34d、123.43(d可以省略)、123.0D、2.08E25浮点型常量默认为double
3.浮点类型float,double浮点类型长度字节数取值范围float32位4字节-3.40282347E+38F~3.40282347E+38Fdouble64位8字节-1.7976931348623157E+308~1.7976931348623157E+308Sa.javafloat型:3.浮点类型float,double浮点14使用char类型可表示单个字符,用单引号括起来16位字符常量:用英文单引号括起来的单个字符。如:’a’、’汉’用英文单引号括起来的十六进制字符代码值,格式为:’\u****’,其中\u是约定的前缀,****为4位十六进制数,是该字符在unicode字符集中的序号,如:’\u0061’、’\u004b’。转义字符
4.字符类型char
转义字符含义\’单引号\”双引号\b退格\t制表符\r回车符\n换行符\\反斜杠转义字符.java使用char类型可表示单个字符,用单引号括起来4.字符类型15注意:用双引号引用的文字,就是我们平时所说的字符串类型字符串类型不是原始类型,而是一个类(class)——String类String类被用来表示字符序列注意:165.类型转换将一种数据类型的常量或变量转换到另外的一种数据类型,称为类型转换类型转换有两种:隐式类型转换(自动类型转换)显式类型转换(强制类型转换)5.类型转换将一种数据类型的常量或变量转换到另外的一种数据类17(1)隐式类型转换
在实际中常会将一种类型的值赋给另外一种变量类型。如果这两种类型是兼容的,Java将执行自动类型转换。简单的说,当把占用位数较短的数据转化成占用位数较长的数据时,Java执行自动类型转换,不需要在程序中作特别的说明。例如inti=10;longj=i;类型转换从低到高级的优先关系:
byteshortintlongfloatdouble
char低高(1)隐式类型转换在实际中常会将一18(2)强制类型转换不是所有的数据类型都允许隐式自动转换。例如,下面的语句把long型数据赋值给int型数据,在编译时就会发生错误:longi=10;intj=i;//精度失真改为:longi=10;intj=(int)i;
(2)强制类型转换不是所有的数据类型都19(数据类型)变量名经过强制类型转换,将得到一个在“()”中声明的数据类型的数据,该数据是从指定变量所包含的数据转换而来的。值得注意的是,指定变量本身不会发生任何变化。注意:布尔型不能和其它类型进行转换;优先级高的值—>优先级低的值——精度失真
强制类型转换的格式是:(数据类型)变量名强制类型转换的格式是:20赋值时,必须按照”变量类型的优先级高于所赋数值的优先级”的原则,否则出错。例:floatf=8.36;(出错)改为:floatf=(float)8.36;或:floatx=8.36f;或:doubled=8.36;赋值时,必须按照”变量类型的优先级高于所赋数值的21表3-5基本数据类型的转换charch;byteb;shorts;inti;longk;floatf;doubled;charch;ch=(char)b;ch=(char)s;ch=(char)i;ch=(char)k;ch=(char)f;ch=(char)d;byteb;b=(byte)ch;b=(byte)s;b=(byte)i;b=(byte)k;b=(byte)f;b=(byte)dshorts;s=(short)ch;s=b;s=(short)i;s=(short)k;s=(short)f;s=(short)d;inti;i=ch;i=b;i=s;i=(int)k;i=(int)f;i=(int)d;longk;k=ch;k=b;k=s;k=i;k=(long)f;k=(long)d;floatf;f=ch;f=b;f=s;f=i;f=k;f=(float)d;doubled;d=ch;d=b;d=s;d=i;d=k;d=f;表3-5基本数据类型的转换charch;byteb;sh22类型提升下面的代码能通过编译吗?bytea=100;byteb=100;bytec=100;inty=a*b*csystem.out.println(y);所有的byte、short型值被提升到int若有一个操作数是long型,整个表达式被提升到long型若有一个操作数是float型,整个表达式被提升到float型若有一个操作数是double型,整个表达式被提升到double型类型提升下面的代码能通过编译吗?所有的byte、short型23常量:程序执行中其值不能改变的量直接常量符号常量:常量名一般大写finalfloatPI=3.14;publicfinalintMAX=10;变量:在程序执行期间可根据需要经常变化的值必须先声明和初始化(赋初值),然后才可以使用[修饰符]<类型><变量名>[=初始化表达式];intx,y,z=10;publicStringstr1=“姓名”;3.1.5常量和变量常量:程序执行中其值不能改变的量3.1.5常量和变量24变量的四个基本属性变量名变量的数据类型变量的当前值变量存储单元的地址变量的四个基本属性25上机练习编写Java应用程序,测试并体会各种原始类型数据的定义,赋值和输出。 输出可采用下述形式的语句:
//其中x是变量名,如a,b,c等。使用char型的三种常量声明方式为char型变量赋值并输出。System.out.println("x="+x);【例3-4】VariableDeclaration.java上机练习编写Java应用程序,测试并体会各种原始类型数据的定263.1.6运算符与表达式运算符:表示运算类型操作数:参与运算Java常用运算符:算术运算符:+,-,*,/,%,++,--关系运算符:>,<,>=,<=,==,!=布尔逻辑运算符:!,&,|,^,&&,||位运算符:&,|,^,~,>>,<<,>>>赋值运算符:= 扩展赋值运算符:+=,-=,*=,/=条件运算符:?:实例运算符:instanceof3.1.6运算符与表达式运算符:表示运算类型271.运算符算术运算符:加号(+)、减号(-)、乘号(*)除号(/)、取模(%)、自增运算符(++)、自减运算符(--)注意:整数除法会直接砍掉小数,而不是进位取模运算结果的符号与第一个操作数的符号相同取模运算符%的操作数可以为浮点数:37.2%10=7.21.运算符算术运算符:28Java对加运算符进行了扩展,使它能够进行字符串的连接,如:“abc”+“def”的运算结果为串"abcdef"前缀++、--与后缀++、--的区别:++i在使用i之前,使i的值加1--i在使用i之前,使i的值减1
i++在使用i之后,使i的值加1i--在使用i之后,使i的值减1例如:inta=5,x,y,m,n;x=++a;y=a--;m=a++;n=a--;程序依次执行以后x,y,m,n,a的值是多少?Java对加运算符进行了扩展,使它能够进行字符串的连接,如:29关系运算符:>、<、>=、<=、==、!=二元运算符,用来比较任意类型的两个值,返回布尔类型的值true或false如:10<9//结果为false3!=5//结果为true建议不要直接比较两个浮点数是否相等Math.abs(f1-f2)<ee可以是一个大于0且适当小的浮点数
关系运算符:>、<、>=、<=、==、!=30布尔逻辑运算符:&、|、!、^、&&、||&、|、^、&&、||为二元运算符,!为一元运算符逻辑运算符可以用来连接关系表达式,如:2>8&&8>2^:异或,异真同假&&、||:条件与、条件或(短路与、短路或)如果||左边表达式的值为true,则整个表达式的结果为true,不必再计算右边的表达式如果&&左边表达式的值为false,则整个表达式的结果为false,不必再计算右边的表达式布尔逻辑运算符:&、|、!、^、&&、||31表3-6布尔逻辑运算真值表OP1OP2OP1&&OP2OP1||OP2OP1^OP2!OP1OP1&OP2OP1|OP2falsefalsefalsefalsefalsetruefalsetruefalsetruetruetruetruefalsefalsetruetruefalsetruetruetruetruefalsefalse表3-6布尔逻辑运算真值表OP2OP1&&OP2OP1||32位运算符:&、|、~、^、>>、>>>和<<用于对整数或字符的二进制位进行布尔运算按位与运算(&):0&0=0,0&1=0,1&0=0,1&1=1按位或运算(|):0|0=0,0|1=1,1|0=1,1|1=1位运算符:&、|、~、^、>>、>>>和<<33按位异或运算(^):异真同假0^0=0,0^1=1,1^0=1,1^1=0按位取反运算(~):~0=1,~1=0左移位运算符(<<):执行左移位。右边的空位补0。在不产生溢出的情况下,数据左移1位相当于乘以2:inta=64,b;//a的二进制表示1000000b=a<<1; //b=128按位异或运算(^):异真同假34带符号右移运算符(>>):左边按符号位补0或1。例如: inta=16,b;//a的二进制表示10000 b=a>>2; //b=4不带符号位的右移(>>>):左边补0带符号右移运算符(>>):左边按符号位补0或1。例如:35赋值运算符:=二元运算,左边的操作元为变量,不能是常量复合赋值操作:x+=10=与==的区别!赋值运算符:=36三元条件运算符(?:):x?y:z;运算的规则是:先计算表达式x的值,若x为真,则整个运算的结果是表达式y的值;若x为假,则整个运算的结果是表达式z的值三元条件运算符(?:):37从两个数中找出较大的数的功能。inta=3,b=4;intmax=a>b?a:b;
max的值为4。三元条件运算是可以嵌套的,如:以下语句中,max表示的是a、b、c三个数中的最大值,其值为5
inta=3,b=4,c=5;intmax=(a>b?a:b)>c?(a>b?a:b):c;从两个数中找出较大的数的功能。inta=3,b=4,38实例运算符:instanceof一元运算符判断一个指定对象是否是一个指定类(或它的子类)的实例:objinstanceofmyclass其中obj是一个对象,myclass是一个类,若obj是myclass类的对象,则运算结果是true,否则是false实例运算符:instanceof392.表达式用Java运算符将操作数连接起来的、符合Java语法规则的式子运算符的优先级决定了表达式中多个运算执行的先后顺序,优先级高的先运算,优先级低的后运算,优先级相同的则由运算符的结合性确定其计算顺序运算符的结合性决定了同一优先级的多个运算符的运算顺序,包括左结合(从左向右)和右结合(从右向左)可以用圆括号改变表达式中运算符的运算次序,圆括号中的表达式称为子表达式
2.表达式用Java运算符将操作数连接起来的、符合Java语40表3-8Java运算符列表优先级分类运算符结合性描述1(高)二元.[]()左结合成员、括号new++--后置自增、自减2++---~!右结合前置自增、自减,取负,取反内存分配3二元*/%左结合乘、除4+-加、减5<<>>>>>移位6<><=>=instanceof关系、实例7==!=关系8&逻辑9^10|11&&12||13三元?:右结合条件14二元=+=-=*=/=%=&=^=|=<<=>>=>>>=赋值15(低)二元,左结合逗号表3-8Java运算符列表分类运算符结合性描述1(高)二元413.2控制语句
1.java语言语句的分类:方法调用语句:如System.out.println(“Hellojava”);表达式语句:由一个表达式构成一个语句,如赋值语句:intx=2;复合语句:用{}把一些语句括起来构成复合语句package语句和import语句:package语句指明了该源文件定义的类所在的包import语句可以引入所需要的类空语句:;控制语句3.2控制语句1.java语言语句的分类:42控制语句顺序结构选择语句循环语句转移语句表达式语句空语句复合语句条件语句if开关语句switchwhiledo-whileforbreakcontinuereturn控制语句顺序结构选择语句循环语句转移语句表达式语句空语句复合433.2.1顺序语句顺序结构语句包括:表达式语句空语句复合语句。语句1…语句n3.2.1顺序语句顺序结构语句包括:语句1…语句n443.2.2选择语句又称条件语句,通过判定条件的真假来决定执行某个分支语句if单分支语句:if(表达式){ 语句组;}3.2.2选择语句又称条件语句,通过判定条件的真假来决定执行45二路分支结构:
if(表达式){语句组1}else{语句组2}例如:if(a>b)c=a;elsec=b;布尔表达式?语句1语句2truefalse入口点出口点【例3-5】MaxMin.java二路分支结构:布尔表达式?语句1语句2truefalse入口46if语句嵌套:if(表达式1){语句组1;}elseif(表达式2){语句组2;}elseif(表达式3)……elseif(表达式n){语句组n}else{语句组n+1}【例3-7】StatementNestedScore.javaif语句嵌套:【例3-7】47switch语句:switch(表达式){case判断值1:语句块1;break;case判断值2:语句块2;break;case判断值3:语句块3;break;……case判断值n:语句块ndefault:语句块n+1;}表达式语句1语句n值1入口点出口点图3-5switch结构值2值n语句2…switch语句:表达式语句1语句n值1入口点出口点图3-548switch后面括号中表达式的值必须是符合byte,char,short,int类型的常量表达式,而不能用浮点类型或long类型,也不能为一个字符串。一个switch语句可以代替个if—else语句组成的分支结构,而switch语句从思路上显得更清晰。【例3-9】SwitchSeason.javaswitch后面括号中表达式的值必须是符合byte,cha49While循环语句while(布尔表达式){
一条语句或者多条语句;}3.2.3循环语句布尔表达式?语句truefalse入口点出口点【例3-10】WhileSum.javaWhile循环语句3.2.3循环语句布尔表达式?语句tru50do-while语句
do
{
一条语句或者多条语句;
}while(布尔表达式);布尔表达式?语句false入口点出口点true【例3-12】DoWhileSum.javado-while语句
do
{
一条语句或者多条语句51for循环语句for(表达式1;表达式2;表达式3){
一条语句或者多条语句;}表达式2表达式1false入口点出口点图3-8for语句执行流程true语句表达式3【例3-15】ForSum.javafor循环语句表达式2表达式1false入口点出口点图3-852return格式1:return;一般若方法为void类型,return可省略格式2:return返回值;该格式返回值可以是基本数据类型和引用数据类型,但必须和方法的类型一致,否则编译无法通过3.2.4转移语句return3.2.4转移语句53break终止switch语句的执行,跳出switch语句,执行switch语句后面的语句;终止循环语句序列,跳出循环结构,即跳出while、for等语句;与标号配合使用从内层循环或者内层语句块退出【例3-18】BreakStatement.javabreak【例3-18】54continue用于循环结束本次循环,转入下一次循环与标号配合使用中断内层循环【例3-19】ContinueStatement.javacontinue【例3-19】553.3数组3.3.1一维数组按序排列的同类数据元素的集合称为数组
一维数组的定义:数组类型[]数组名或数组类型数组名[]例如:intstudent[];int[]student;int[]c,d,e;intc[],d[],e[];推荐前者声明时不能指定数组长度3.3数组3.3.1一维数组推荐前者声明时不能指定数组长56用new初始化一维数组使用new分配内存空间,并按照数组的类型,为每一个数组元素建立默认值。格式:数组名=new数组元素的类型[数组元素的个数]例如:
inta[]; a=newint[6]
或
inta[]=newint[6];
或 inta[]=newint[]{1,2,3,4,5,6};
动态初始化有确定值初始化时不能指定数组长度new时必须指定数组长度用new初始化一维数组使用new分配内存空间,并按照数组的类57获取一维数组元素个数Java语言自动为每个数组变量提供length属性保存数组存储单元个数数组名.length例如:
inta[]=newint[6]; intl=a.length;获取一维数组元素个数Java语言自动为每个数组变量提供len58一维数组元素的引用和运算引用格式:数组名[下标]inta[]=newint[10];//创建数组intb=a[0]+a[9];//使用数组元素数组下标为从0到9。如果使用了a[10],程序运行时将提示错误:java.lang.ArrayIndexOutOfBoundsException一维数组元素的引用和运算引用格式:数组名[下标]59第1章-数据库概论课件60可以在声明数组的同时,给数组元素赋初值。所赋初值的个数决定数组元素的个数格式:数据类型数组名[]={初值表}例如:inta[]={1,2,3,4,5,6};赋初值初始化数组静态初始化不能指定数组长度可以在声明数组的同时,给数组元素赋初值。所赋初值的个数决定数61使用new动态分配存储单元后,将自动对数组元素进行初始化数据类型初始化值数据类型初始化值byte、short、int、long0char‘\u0000’float0.0fbooleanfalsedouble0.0引用数据类型null使用new动态分配存储单元后,将自动对数组元素进行初始化数62例:求数组元素的最小值classqiumin{ publicstaticvoidmain(Stringargs[]){ inta[]={5,8,2,4,1,9,78};//通过赋初值初始化数组 System.out.println("Theminis:"+minnum(a)); } staticintminnum(intnum[]){ intmin=num[0]; for(inti=0;i<num.length;i++){ if(min>num[i]) min=num[i]; } returnmin; }}public呢?源文件名?能编译吗?编译后的类文件名?能执行吗?例:求数组元素的最小值classqiumin{public63【例3-20】使用new创建有10个整数元素的数组//InitArray.javapublicclassInitArray{ publicstaticvoidmain(Stringargs[]) { intarray[];array=newint[10];System.out.printf("%s%8s\n","数组元素","对应的值");for(inti=0;i<array.length;i++)System.out.printf("%5d%8d\n",i,array[i]); }}intarray[]=newint[10];【例3-20】使用new创建有10个整数元素的数组//Ini64【例3-21】使用new创建有10个整数元素的数组//InitArray1.javapublicclassInitArray1{ publicstaticvoidmain(Stringargs[]){
intarray[]={32,27,64,18,95,14,90,70,60,37}; System.out.printf("%s%8s\n","数组元素","对应的值");for(inti=0;i<array.length;i++)
System.out.printf("%5d%8d\n",i,array[i]);}}数组的遍历for(inti:array)
System.out.printf("%8d\n",i);foreach循环;循环array中的每个元素【例3-21】使用new创建有10个整数元素的数组//Ini65【例3-22】用数组分析调查结果//StudentPoll.java
publicclassStudentPoll{publicstaticvoidmain(Stringargs[]){intresponses[]={1,2,6,4,8,5,9,7,8,10,1,6,3,8,6,10, 3,8,2,7,6,5,7,6,8,6,7,5,6,6,5,6,7,5,6,4,8,6,8,10};//声明长度为11的数组,用于统计1-10的打分人数intfrequency[]=newint[11];for(inti=0;i<responses.length;i++)//统计1-10中的值并把相应的结果保存到frequency数组中
++frequency[responses[i]];System.out.printf("%s%10s\n","打分值","多少人次");for(intj=1;j<frequency.length;j++)//输出分析结果System.out.printf("%6d%10d\n",j,frequency[j]);}}要求:40名学生对某个食堂的饭菜质量进行1~10的打分(1表示非常差,10是非常好)。使用数组将40个结果输入整型数组,并对打分结果进行分析。【例3-22】用数组分析调查结果//StudentPoll663.3.2二维数组数组元素中的值是数组即为多维数组二维数组较常用二维数组声明格式:数组类型数组名[][]或数组类型[][]数组名例如:
intarray_name[][]; 或 int[][]array_name;
声明时不能指明数组长度3.3.2二维数组数组元素中的值是数组即为多维数组声明时不能67二维数组的初始化声明的同时进行初始化:数据类型数组名[][]=new数据类型[行数][列数]或数据类型[][]数组名=new数据类型[行数][列数]例如: inta[][]=newint[5][6];或 int[][]a=newint[5][6];new时必须指明数组长度二维数组的初始化声明的同时进行初始化:new时必须指明数68通过赋初值初始化二维数组格式:数据类型数组名[][]={{初值表},{初值表},…,{初值表}}例如:inta[][]={{65,34,78},{81,56,92},{56,87,90},{92,69,75}}通过赋初值初始化二维数组格式:69二维数组的引用和运算二维数组元素的引用格式为: 数组名[下标1][下标2]下标1,下标2分为二维数组的第一、二维下标,同一维数组一样,也可为整型常量和表达式,数组下标从0开始二维数组元素个数:数组名.length——数组的行数数组名[i].length——数组的列数二维数组的引用和运算二维数组元素的引用格式为:70【例3-23】二维数组使用//TwoDimensionalArray.java//使用二维数组存储数据并输出二维数组中的元素。
publicclassTwoDimensionalArray{ publicstaticvoidmain(Stringargs[]){intarray1[][]={{10,2,30},{20,5,60}}; intarray2[][]={{11,21},{31},{32,5,61}};System.out.println("数组array1的数组元素为:");for(introw=0;row<array1.length;row++){ for(intcolumn=0;column<array1[row].length;column++) System.out.println(array1[row][column]);}System.out.println("数组array2的数组元素为:"); for(introw=0;row<array2.length;row++){ for(intcolumn=0;column<array2[row].length;column++) System.out.println(array2[row][column]);}}}【例3-23】二维数组使用//TwoDimensionalA71例:输出二维数组各元素的值
classQ{ publicstaticvoidmain(Stringargs[]){inta[][]={{1,2,3},{4,5,6},{7,8,9}};System.out.println("数组a各元素的值为:");for(inti=0;i<3;i++){for(intj=0;j<3;j++)System.out.print(a[i][j]+"\t");
System.out.println();
}}}例:输出二维数组各元素的值classQ{72不规则二维数组为二维数组申请存储空间,既可以一次申请所需的全部空间,也可以分多次申请。例如: intmat[][]=newint[2][3];//一次申请二维数组的全部空间多次申请空间的语句序列如下,与上述语句效果相同:intmat[][];mat=newint[2][];mat[0]=newint[3];mat[1]=newint[3];mat有2个元素,每个元素都是int类型的一维数组若令mat[1]=newint[2];mat[0]与mat[1]长度不等,即mat的两行长度不等,成为不规则数组不规则二维数组为二维数组申请存储空间,既可以一次申请所需的73第1章-数据库概论课件743.4字符串
3.4.1声明字符串变量Java使用java.lang包中的String类来创建一个字符串变量。因此,字符串变量是类类型变量,是一个对象,某个具体的字符串是String类的一个实例。3.4字符串3.4.1声明字符串变量75声明及初始化声明格式1:
Stringname;//声明一个String类的变量(对象)name=newString(“沈阳小”);//申请分配空间或者
Stringname=newString(“沈阳小”);声明格式2:
Stringname;name="沈阳小";或者Stringname="沈阳小";一般习惯使用格式2声明及初始化声明格式1:一般习惯使用格式276(1)字符串赋值:可以为其赋一个字符串常量,也可以将一个字符串变量或表达式的值赋值给字符串变量:S1=“Chinesepeople”;S2=S1;S3=“alotof“+S2;运算符“+”的将前后两个字符串连接起来。3.4.2字符串的运算(1)字符串赋值:3.4.2字符串的运算77(2)字符串连接:“+”可以将两个字符串连接起来:Stringstr="中"+"国";//字符串str的值为"中国"str1+="efgh";只有+=能用于字符串变量,其它复合赋值运算符行str1-=“efgh”;//语法错误当字符串与其它类型的值执行连接运算时,Java自动将其它类型转换为字符串:inti=96;Stringstr="Java程序设计考分为"+i;//str的值为"Java程序设计考分为96"Stringstr="Java程序设计实训成绩为"+'A';//str的值为"Java程序设计实训成绩为A
"(2)字符串连接:78(3)字符串关系运算:按照字符串中的字符次序依次比较,结果确定,就停止比较:"ABZ"<"ACX";//结果为true,由第2个字符得到比较结果"ABC">"A";//结果为true,较长的字符串较长字符串和字符不能比较(3)字符串关系运算:793.4.3String类的常用方法方法说明length()返回字符串的长度equals(ObjectanObject)将给定字符串与当前字符串相比较,若相等返回true,否则返回falsesubstring(intbeginIndex)返回字符串中从beginIndex开始的子串substring(intbeginIndex,intendIndex)返回从beginIndex开始到endIndex的子串charAt(intindex)返回index指定位置的字符indexOf(Stringstr)返回str在字符串中第一次出现的位置replace(charoldChar,charnewChar)以newChar字符替换串中所有oldChar字符trim()去掉字符串的首尾空格3.4.3String类的常用方法方法说明length()80【例3-25】使用String类中的方法判断回文字符串/*算法一:分别从前向后和从后向前依次获得原串str的一个字符ch1、ch2,比较ch1和ch2,如果不等,则肯定不是,yes=false,立即退出循环,否则继续比较,直到字符全部比较完,yes仍为true,才能肯定str是回文串*/publicclassRotorString{publicstaticvoidmain(Stringargs[]){Stringstr="rotor";if(args.length>0)//获取命令行参数,str=args[0];System.out.println("str="+str); //算法一:booleanyes=true;intn=str.length();//获取字符串长度inti=0;charch1,ch2;while(yes&&(i<n/2)){ch1=str.charAt(i);//获取最前的字符ch2=str.charAt(n-i-1);//获取最后的字符System.out.println("ch1="+ch1+"ch2="+ch2);if(ch1==ch2)i++;//比较两个字符 elseyes=false;}
System.out.println(“算法一:”+yes);
}}/*算法二:将原串str反转成temp串,再比较两串,若相等则是回文字符串*/Stringtemp="",sub1="";for(i=0;i<n;i++){sub1=str.substring(i,i+1);//获取子串
temp=sub1+temp;//连接字符串
}System.out.println("temp="+temp);System.out.println(“算法二:”+str.equals(temp));//比较字符串【例3-25】使用String类中的方法判断回文字符串/*81本章小结基本数据类型控制语句数组字符串本章小结基本数据类型82第三章Java语言基础第三章Java语言基础83Java基本语法Java的标识符、关键字、数据类型Java的常量与变量Java的各种运算符及表达式Java控制语句Java的数组和字符串本章内容Java基本语法本章内容843.1Java语言的基本语法Unicode字符集:16位编码标准3.1.1标识符(identifier)标识符是赋予变量、常量、数组名、文件名类或方法、对象的名称由字母、数字、_和$组成,其中字母可以是Unicode字符集中的字符,如大、小写英文字母、汉字、日文片假名和朝鲜文等,数字为0到9标识符的第一个字符不能是数字长度不限,但不宜过长区分大小写不能用关键字3.1Java语言的基本语法Unicode字符集:16位编85在Java规范中约定:关键字、变量名、对象名、方法名、包名通常全部字母小写;如果由多个单词构成标识符,则首字母小写,其后单词首字母大写,如toString;类名首字母大写,如FirstJava;常量名全部字母均大写,如BOOK。在Java规范中约定:86下面是几个有效的标识符:identifierthisoneUserName User_name_system_varl$max下面是几个非法的变量名:3maxroom#class 指出哪些标识符是不准确的,说明原因here_therethisthatit2tol_it(变量名不能以数字开头)(包含非法字符“#”)(“class”为保留字)下面是几个有效的标识符:(变量名不能以数字开头)(包含非法字87Java语言中一些被赋以特定的含义、并用做专门用途的单词称为关键字所有Java关键字都是小写的goto和const虽然从未使用,但也作被为Java关键字保留TURE、FALSE、NULL等都不是Java关键字3.1.2关键字(keyword)TURE、FALSE、NULL是合法的Java标识符吗?Java语言中一些被赋以特定的含义、并用做专门用途的单词称为88关键字-1原始数据类型byteshortintlongfloatdoublecharboolean循环关键字dowhileforbreakcontinue分支关键字ifelseswitchcasedefaultbreak方法、变量和类修饰符privatepublicprotectedfinalstaticabstractsynchronizedvolatile关键字-1原始数据类型分支关键字89异常处理trycatchfinallythrowthrows对象相关关键字 newextendsimplementsclassinstanceofthissuperinterface
字面值常量falsetruenull方法相关关键字returnvoid包相关关键字packageimport关键字-2异常处理字面值常量关键字-290圆括号“()“:用于方法参数、控制语句、数据类型转换中括号“[]“:用于数组大括号"{}“:用于构造语句块逗号“,”:在方法声明或调用时的参数列表中用于分隔多个参数,也可在一条声明语句中同时声明多个属性或局部变量时起分隔作用分号“;”:Java语句必须以分号作为结束标记,for循环语句中使用分号来分隔不同的成份空格"“:Java程序源代码中各组成部分之间可以插入任意数量的空格,包括换行圆点“.“:用于访问对象成员(属性或方法)3.1.3分隔符圆括号“()“:用于方法参数、控制语句、数据类型转换3.1913.1.4数据类型布尔(boolean)数值类型类数组字符(char)字节(byte)短整数(short)整数(int)浮点类型单精度浮点数(float)双精度浮点数(double)数据类型基本数据类型引用数据类型枚举接口定点类型长整数(long)图3-1Java数据类型3.1.4数据类型布尔(boolean)数值类型类数组字符92逻辑类型只有两个取值:true和false8位注意:Java语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算
1.布尔型booleanbool.java逻辑类型1.布尔型booleanbool.java932.整数类型:byte,short,int,long所有Java编程语言中的整数类型都是带符号的数字,不存在无符号整数长度不变类型长度字节数取值范围byte8位1字节-128~127short16位2字节-32768~32767int32位4字节-2147483648~2147483647long64位8字节-9223372036854775808~92233720368547758072.整数类型:byte,short,int,long所有94整型常量:十进制:123、234八进制:077、011//首位为“0”十六进制:0x12ABC//首位为“0x”整型常量默认为int长整型常量:后面加L或lTestInteger.java整型常量:TestInteger.java95float型:常量:123.34f、12.76F、123.0fdouble型:常量:123.34d、123.43(d可以省略)、123.0D、2.08E25浮点型常量默认为double
3.浮点类型float,double浮点类型长度字节数取值范围float32位4字节-3.40282347E+38F~3.40282347E+38Fdouble64位8字节-1.7976931348623157E+308~1.7976931348623157E+308Sa.javafloat型:3.浮点类型float,double浮点96使用char类型可表示单个字符,用单引号括起来16位字符常量:用英文单引号括起来的单个字符。如:’a’、’汉’用英文单引号括起来的十六进制字符代码值,格式为:’\u****’,其中\u是约定的前缀,****为4位十六进制数,是该字符在unicode字符集中的序号,如:’\u0061’、’\u004b’。转义字符
4.字符类型char
转义字符含义\’单引号\”双引号\b退格\t制表符\r回车符\n换行符\\反斜杠转义字符.java使用char类型可表示单个字符,用单引号括起来4.字符类型97注意:用双引号引用的文字,就是我们平时所说的字符串类型字符串类型不是原始类型,而是一个类(class)——String类String类被用来表示字符序列注意:985.类型转换将一种数据类型的常量或变量转换到另外的一种数据类型,称为类型转换类型转换有两种:隐式类型转换(自动类型转换)显式类型转换(强制类型转换)5.类型转换将一种数据类型的常量或变量转换到另外的一种数据类99(1)隐式类型转换
在实际中常会将一种类型的值赋给另外一种变量类型。如果这两种类型是兼容的,Java将执行自动类型转换。简单的说,当把占用位数较短的数据转化成占用位数较长的数据时,Java执行自动类型转换,不需要在程序中作特别的说明。例如inti=10;longj=i;类型转换从低到高级的优先关系:
byteshortintlongfloatdouble
char低高(1)隐式类型转换在实际中常会将一100(2)强制类型转换不是所有的数据类型都允许隐式自动转换。例如,下面的语句把long型数据赋值给int型数据,在编译时就会发生错误:longi=10;intj=i;//精度失真改为:longi=10;intj=(int)i;
(2)强制类型转换不是所有的数据类型都101(数据类型)变量名经过强制类型转换,将得到一个在“()”中声明的数据类型的数据,该数据是从指定变量所包含的数据转换而来的。值得注意的是,指定变量本身不会发生任何变化。注意:布尔型不能和其它类型进行转换;优先级高的值—>优先级低的值——精度失真
强制类型转换的格式是:(数据类型)变量名强制类型转换的格式是:102赋值时,必须按照”变量类型的优先级高于所赋数值的优先级”的原则,否则出错。例:floatf=8.36;(出错)改为:floatf=(float)8.36;或:floatx=8.36f;或:doubled=8.36;赋值时,必须按照”变量类型的优先级高于所赋数值的103表3-5基本数据类型的转换charch;byteb;shorts;inti;longk;floatf;doubled;charch;ch=(char)b;ch=(char)s;ch=(char)i;ch=(char)k;ch=(char)f;ch=(char)d;byteb;b=(byte)ch;b=(byte)s;b=(byte)i;b=(byte)k;b=(byte)f;b=(byte)dshorts;s=(short)ch;s=b;s=(short)i;s=(short)k;s=(short)f;s=(short)d;inti;i=ch;i=b;i=s;i=(int)k;i=(int)f;i=(int)d;longk;k=ch;k=b;k=s;k=i;k=(long)f;k=(long)d;floatf;f=ch;f=b;f=s;f=i;f=k;f=(float)d;doubled;d=ch;d=b;d=s;d=i;d=k;d=f;表3-5基本数据类型的转换charch;byteb;sh104类型提升下面的代码能通过编译吗?bytea=100;byteb=100;bytec=100;inty=a*b*csystem.out.println(y);所有的byte、short型值被提升到int若有一个操作数是long型,整个表达式被提升到long型若有一个操作数是float型,整个表达式被提升到float型若有一个操作数是double型,整个表达式被提升到double型类型提升下面的代码能通过编译吗?所有的byte、short型105常量:程序执行中其值不能改变的量直接常量符号常量:常量名一般大写finalfloatPI=3.14;publicfinalintMAX=10;变量:在程序执行期间可根据需要经常变化的值必须先声明和初始化(赋初值),然后才可以使用[修饰符]<类型><变量名>[=初始化表达式];intx,y,z=10;publicStringstr1=“姓名”;3.1.5常量和变量常量:程序执行中其值不能改变的量3.1.5常量和变量106变量的四个基本属性变量名变量的数据类型变量的当前值变量存储单元的地址变量的四个基本属性107上机练习编写Java应用程序,测试并体会各种原始类型数据的定义,赋值和输出。 输出可采用下述形式的语句:
//其中x是变量名,如a,b,c等。使用char型的三种常量声明方式为char型变量赋值并输出。System.out.println("x="+x);【例3-4】VariableDeclaration.java上机练习编写Java应用程序,测试并体会各种原始类型数据的定1083.1.6运算符与表达式运算符:表示运算类型操作数:参与运算Java常用运算符:算术运算符:+,-,*,/,%,++,--关系运算符:>,<,>=,<=,==,!=布尔逻辑运算符:!,&,|,^,&&,||位运算符:&,|,^,~,>>,<<,>>>赋值运算符:= 扩展赋值运算符:+=,-=,*=,/=条件运算符:?:实例运算符:instanceof3.1.6运算符与表达式运算符:表示运算类型1091.运算符算术运算符:加号(+)、减号(-)、乘号(*)除号(/)、取模(%)、自增运算符(++)、自减运算符(--)注意:整数除法会直接砍掉小数,而不是进位取模运算结果的符号与第一个操作数的符号相同取模运算符%的操作数可以为浮点数:37.2%10=7.21.运算符算术运算符:110Java对加运算符进行了扩展,使它能够进行字符串的连接,如:“abc”+“def”的运算结果为串"abcdef"前缀++、--与后缀++、--的区别:++i在使用i之前,使i的值加1--i在使用i之前,使i的值减1
i++在使用i之后,使i的值加1i--在使用i之后,使i的值减1例如:inta=5,x,y,m,n;x=++a;y=a--;m=a++;n=a--;程序依次执行以后x,y,m,n,a的值是多少?Java对加运算符进行了扩展,使它能够进行字符串的连接,如:111关系运算符:>、<、>=、<=、==、!=二元运算符,用来比较任意类型的两个值,返回布尔类型的值true或false如:10<9//结果为false3!=5//结果为true建议不要直接比较两个浮点数是否相等Math.abs(f1-f2)<ee可以是一个大于0且适当小的浮点数
关系运算符:>、<、>=、<=、==、!=112布尔逻辑运算符:&、|、!、^、&&、||&、|、^、&&、||为二元运算符,!为一元运算符逻辑运算符可以用来连接关系表达式,如:2>8&&8>2^:异或,异真同假&&、||:条件与、条件或(短路与、短路或)如果||左边表达式的值为true,则整个表达式的结果为true,不必再计算右边的表达式如果&&左边表达式的值为false,则整个表达式的结果为false,不必再计算右边的表达式布尔逻辑运算符:&、|、!、^、&&、||113表3-6布尔逻辑运算真值表OP1OP2OP1&&OP2OP1||OP2OP1^OP2!OP1OP1&OP2OP1|OP2falsefalsefalsefalsefalsetruefalsetruefalsetruetruetruetruefalsefalsetruetruefalsetruetruetruetruefalsefalse表3-6布尔逻辑运算真值表OP2OP1&&OP2OP1||114位运算符:&、|、~、^、>>、>>>和<<用于对整数或字符的二进制位进行布尔运算按位与运算(&):0&0=0,0&1=0,1&0=0,1&1=1按位或运算(|):0|0=0,0|1=1,1|0=1,1|1=1位运算符:&、|、~、^、>>、>>>和<<115按位异或运算(^):异真同假0^0=0,0^1=1,1^0=1,1^1=0按位取反运算(~):~0=1,~1=0左移位运算符(<<):执行左移位。右边的空位补0。在不产生溢出的情况下,数据左移1位相当于乘以2:inta=64,b;//a的二进制表示1000000b=a<<1; //b=128按位异或运算(^):异真同假116带符号右移运算符(>>):左边按符号位补0或1。例如: inta=16,b;//a的二进制表示10000 b=a>>2; //b=4不带符号位的右移(>>>):左边补0带符号右移运算符(>>):左边按符号位补0或1。例如:117赋值运算符:=二元运算,左边的操作元为变量,不能是常量复合赋值操作:x+=10=与==的区别!赋值运算符:=118三元条件运算符(?:):x?y:z;运算的规则是:先计算表达式x的值,若x为真,则整个运算的结果是表达式y的值;若x为假,则整个运算的结果是表达式z的值三元条件运算符(?:):119从两个数中找出较大的数的功能。inta=3,b=4;intmax=a>b?a:b;
max的值为4。三元条件运算是可以嵌套的,如:以下语句中,max表示的是a、b、c三个数中的最大值,其值为5
inta=3,b=4,c=5;intmax=(a>b?a:b)>c?(a>b?a:b):c;从两个数中找出较大的数的功能。inta=3,b=4,120实例运算符:instanceof一元运算符判断一个指定对象是否是一个指定类(或它的子类)的实例:objinstanceofmyclass其中obj是一个对象,myclass是一个类,若obj是myclass类的对象,则运算结果是true,否则是false实例运算符:instanceof1212.表达式用Java运算符将操作数连接起来的、符合Java语法规则的式子运算符的优先级决定了表达式中多个运算执行的先后顺序,优先级高的先运算,优先级低的后运算,优先级相同的则由运算符的结合性确定其计算顺序运算符的结合性决定了同一优先级的多个运算符的运算顺序,包括左结合(从左向右)和右结合(从右向左)可以用圆括号改变表达式中运算符的运算次序,圆括号中的表达式称为子表达式
2.表达式用Java运算符将操作数连接起来的、符合Java语122表3-8Java运算符列表优先级分类运算符结合性描述1(高)二元.[]()左结合成员、括号new++--后置自增、自减2++---~!右结合前置自增、自减,取负,取反内存分配3二元*/%左结合乘、除4+-加、减5<<>>>>>移位6<><=>=instanceof关系、实例7==!=关系8&逻辑9^10|11&&12||13三元?:右结合条件14二元=+=-=*=/=%=&=^=|=<<=>>=>>>=赋值15(低)二元,左结合逗号表3-8Java运算符列表分类运算符结合性描述1(高)二元1233.2控制语句
1.java语言语句的分类:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025汽车维修公司劳动合同
- 2025幼儿教育机构场地租赁合同 幼儿教育机构场地租赁合同范本
- 2025贷款公司借款合同模板
- 2025关于租赁合同模板
- 2025房产买卖合同范本
- 2025精简版借款合同协议
- 2025家具购销合同的范本
- 2025标准化的煤炭交易合同模板
- 2025年酒吧装修合同范本
- 2025合同法中的条款等同与相似的关联与差异
- 社群健康助理员职业技能鉴定考试题及答案
- 走进物理-走向统一的自然力(上)智慧树知到答案2024年广西师范大学
- 小学三年级数学两位数乘两位数笔算能力测验练习题
- 心理发展与教育智慧树知到期末考试答案章节答案2024年浙江师范大学
- MOOC 国情分析与商业设计-暨南大学 中国大学慕课答案
- MOOC 大学体育-华中科技大学 中国大学慕课答案
- 《光伏发电工程工程量清单计价规范》
- 国家卫生部《综合医院分级管理标准》
- DB64++1996-2024+燃煤电厂大气污染物排放标准
- 初中八年级数学课件-最短路径-将军饮马问题
- 信息论与编码期末考试题(全套)
评论
0/150
提交评论