第3周 Java基本语法(数据类型、运算、表达式、数组)_第1页
第3周 Java基本语法(数据类型、运算、表达式、数组)_第2页
第3周 Java基本语法(数据类型、运算、表达式、数组)_第3页
第3周 Java基本语法(数据类型、运算、表达式、数组)_第4页
第3周 Java基本语法(数据类型、运算、表达式、数组)_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3周Java基本语法3.1Java语言的基本元素3.2数据类型3.3运算符与表达式3.4数组习题例3.1编写一个简单的JavaApplication源程序:Welcome2.java。程序的运行结果是输出一句话“欢迎使用Java”,如图3.1所示。3.1Java语言的基本元素//这是一个简单的JavaApplication源程序classWelcome2{

publicstaticvoidmain(Stringargs[]){

System.out.println(″欢迎使用Java″); }//结束main方法定义}//结束类Welcome2定义图3.1可以知道Java语言包含标识符、关键字、运算符和分隔符等元素。这些元素有着不同的语法含义和组成规则,它们互相配合,共同组成Java的语句。在Java中,变量以及类和方法都需要一定的名称,这种名称就叫做标识符。所有的标识符都必须是以一个字母、下划线或美元符号“$”开头的一串字符,后面的字符可以包含字母、数字、下划线和美元符号。表1标识符命名正误对照表3.1.1标识符合法标识符非法标识符合法标识符非法标识符MyClassclassi2anIntintONE_HUNDREDONE-HUNDREDgroup77group

标识符是由程序员自己定义的名称,可按上面的规则随意选取。不过,Java中有一个标识符命名约定:常量用大写字母,变量用小写字母开始,类以大写字母开始。如果一个变量名由多个单词构成,第一个单词后面的单词以大写字母开始,例如anInt。下划线虽然可以作为标识符的一员,但常用于常量名的单词分隔,因为常量名都是以大写字母单词命名的。还要注意一点,Java严格区分字母大小写,标识符中的大小写字母被认为是不同的两个字符。例如以下是4个不同的合法标识符:ad、Ad、aD、Da。关键字是Java语言本身使用的标识符,它有其特定的语法含义。

如public表示公有的,static为静态的。所有的Java关键字将不能被用作标识符,如for、while、boolean等都是Java语言的关键字。关键字用英文小写字母表示,参见表3.2。3.1.2关键字表3.2Java关键字

注:带*号的关键字现在已不使用。abstractdefaultgoto*nullswitchbooleandoifpackagesynchronizedbreakdoubleimplementsprivatethisbyteelseimportprotectedthrow/throwscaseextendsinstanceofpublictransientcatchfalseintreturntruecharfinalinterfaceshorttryclassfinallylongstaticvoidconst*floatnativestrictfpvolatilecontinuefornewsuperwhile1.注释符注释是程序员为了提高程序的可读性和可理解性,在源程序的开始或中间对程序的功能、作者、使用方法等所写的注解。注释仅用于阅读源程序,系统编译程序时,忽略其中的所有注释。注释有两种类型:(1)//单行注释。可放在某个语句的后面。(2)/*…*/多行注释。(3)/**…*/文档注释。javadoc命令产生的html文件中,用来说明类、方法、变量等。3.1.3分隔符(注释、空白、分隔)

2.空白符空白符包括空格、回车、换行和制表符(Tab键)等符号,用来作为程序中各种基本成份之间的分隔符。各基本成份之间可以有一个或多个空白符,其作用相同。系统编译程序时,只用空白符区分各种基本成份,然后忽略它。3.普通分隔符普通分隔符和空白符的作用相同,用来区分程序中的各种基本成份,但它在程序中有确定的含义,不能忽略。Java有以下普通分隔符:.点号,分隔包、类或分隔引用变量中的变量和方法;

;分号,是Java语句结束的标志;

,逗号,分隔方法的参数和变量说明等;

:冒号,说明语句标号;{}大括号,定义复合语句、方法体、类体及数组的初始化;[]方括号,用来定义数组类型及引用数字的元素值;()圆括号,用于在方法定义和访问中将参数表括起来,或在表达式中定义运算的先后次序。例3.2标识符、关键字和分隔符的使用。publicclassExample{ publicstaticvoidmain(Stringargs[]){ inti; ... }}Java是严格区分数据类型的语言,要求在程序中使用任何变量之前必须声明其类型。数据类型说明了常量、变量或表达式的性质。只有数据类型相同的常量、变量才可以进行运算。Java的基本数据类型长度是固定的。例如int类型在任何计算机上的长度都是32b(4B),这就使得Java的基本数据类型可以跨平台自由移植。Java的char类型采用了国际编码标准Unicode,每个码有16位(2B),可容纳65536个字符,有效地解决了用ASCII双字节码表示东方文字带来的诸多不便,使Java处理多语种的能力大大加强。3.2数据类型

Java的数据类型可分为:数据类型基本数据类型复合数据类型数值类型字符类型:char布尔类型:boolean类接口数组类型整型:byte,short,int,long浮点型:float,double3.2.1基本数据类型

数据类型名称位长/b默认值取值范围布尔型boolean1falsetrue,false字符型char16′\u0000′′\u0000′~′\uffff′字节型byte80-128~127短整型short160-32768~32767整型int320-2147483648~2147483647长整型long640-9223372036854775808~9223372036854775807浮点型float320.0±1.4E-45或±3.4028235E+38双精度型double640.0±4.9E-324或±1.7976931348623157E+308表3.3Java基本数据类型表3.3给出了Java基本数据类型。Java定义了8种基本数据类型,利用基本数据类型可以构造出复杂数据结构来满足Java程序的各种需要。注意:1、没有小数点的数字默认为int型数;带有小数点的数默认为double型。其他数值数据要在数字后面加一个大写或小写字母表示数据类型。例如4L是long型,3.14f是float型。2、对于整型,默认为十进制,首字用数字0表示八进制,0x表示十六进制。原始数据类型byte,short,int,long,float,double,char,booleanJava为它们提供了封装类Byte,Short,Integer,Long,Float,Double,Charactor,Boolean,此外还有String例如Integer.MAX_VALUE,Integer.MIN_VALUE直接量(literal)是指在程序中直接给出的一个符号串,作用是为变量赋值或参与表达式运算。直接量可以是一个具体的数值或字符串,也称常量。但Java中的常量另有所指,是用final说明的一个标识符,在很多教科书中往往不加区分地统称为常量。将一个标识符说明为常量,然后赋予它一个直接量,就在二者之间画上了等号。直接量或常量在程序执行过程中是不可更改的,它们与变量的另一区别是不占用内存。Java约定常量标识符全部使用大写字母。

3.2.2直接量与常量

1.布尔常量布尔常量只有两个值true和false,代表了两种状态:

真和假,书写时直接使用true和false这两个英文单词,不能加引号。

2.整型常量整型常量是不含小数的整数值,书写时可采用十进制、十六进制和八进制形式。十进制常量以非0开头后跟多个0~9之间的数字;八进制以0开头后跟多个0~7之间的数字;十六进制则以0x开头后跟多个0~9之间的数字或a~f之间的小写字母或A~F之间的大写字母。下面是3条赋值语句:finalintI=15;finalintJ=017;finalintK=0xF;整型常量默认为32位的int型,如果在数值后边加上L或l,则表示为64位的长整型。

3.浮点型常量Java的浮点型常量有两种表示形式:(1)十进制数形式,由数字和小数点组成,且必须有小数点,如.123、0.123、123.0;(2)科学计数法形式,如123e3或123E-3,其中e或E之前必须有数,且e或E后面的指数必须为整数。对于一个浮点数,加上f或F后缀,就是单精度浮点数;加上d或D后缀,就是双精度浮点数。不加后缀的浮点数被默认为双精度浮点数,双精度浮点数在计算机中占64位,有很高的精度。

4.字符常量字符常量是由一对单引号括起来的单个字符。它可以是Unicode字符集中的任意一个字符,如a和Z。对无法通过键盘输入的字符,可用转义符表示,参见表3.4。表3.4转义符号表字符常量的另外一种表示就是直接写出字符编码,如字母A的八进制表示为′\101′,十六进制表示为′\u0041′。

转义符号Unicode编码功能转义符号Unicode编码功能\b\u0008退格\f\u000c进纸\r\u000d回车\’\u0027单引号\n\u000a换行\”\u0022双引号\t\u0009水平制表符\\\u005c反斜杠5.字符串常量字符串常量是用一对双引号括起来的字符序列。当字符串只包含一个字符时,不要把它和字符常量混淆,例如′A′是字符常量,而″A″是字符串常量。字符串常量中可包含转义字符,例如″Hello\nworld!″在中间加入了一个换行符,输出时,这两个单词将显示在两行上。声明常量的格式:final类型

常量名[,常量名]=值,…;变量在程序中为一个标识符,在内存中是一块空间,它提供了一个临时存放信息和数据的地方,具有记忆数据的功能。变量的值是可以改变的,它可以存放不同类型的数据,通常用小写字母或单词作为变量名。变量具有3个元素:

名字、类型和值。

2.2.3变量

1.变量的声明在Java中存储一个数据,必须将它保存到一个变量中。变量在使用前必须有定义,即有确定的类型和名称。声明变量的格式为:类型变量名[,变量名]=初值,…;变量声明告诉编译器以给定的数据类型和变量名创建一个变量;可以一次声明多个变量,并同时赋初值。例如:byteb1,b2;intv1=0,v2=10,v3=18;例3.3变量声明示例。使用SDK编译并运行该程序,结果如图3.2所示。publicclassV{publicstaticvoidmain(Stringargs[]){byteb=0x55;shorts=0x55ff;inti=1000000;longl=0xffffL;charc=‘c’;floatf=0.23F;doubled=0.7E-3;booleanB=true;StringS=″Thisisastring″;

System.out.println(″字节型变量b=″+b);System.out.println(″短整型变量s=″+s);System.out.println(″整型变量i=″+i);System.out.println(″长整型变量l=″+l);System.out.println(″字符型变量c=″+c);System.out.println(″浮点型变量f=″+f);System.out.println(″双精度变量d=″+d);System.out.println(″布尔型变量B=″+B);System.out.println(″字符串类对象S=″+S);}}图

3.22.变量的使用范围声明一个变量后,它将被引入到一个范围当中。也就是说,该变量只能在程序的特定范围内使用,出了这个范围,变量就消失了。在类中声明的变量称为成员变量,通常在类的开始处声明,可在整个类中使用。在方法和块中声明的变量叫局部变量,使用范围是从它声明的地方开始到它所在那个块的结束处,块是由两个大括号所定义的,如例3.4所示。

例3.4变量的使用范围。publicclassV2{

staticinti=10;

publicstaticvoidmain(Stringargs[]){ intk=10;

System.out.println(″i=″+i);

System.out.println(″k=″+k); } statics(){ k++;//编译时将出错,已出k的使用范围 }}编译程序V2.java时会出现错误,如图3.3所示。因为变量k在方法块中声明,在方法块之外它是不存在的,所以编译时会出错。图

3.33.变量类型的转换当需要把一个整数变成一个字符型数据使用时可以将整数类型数据强制转换为字符型数据。变量类型强制转换的格式为:(数据类型)数据表达式例如,下面的语句将字符型数据转换为整型数据:inta;charb;b=‘A’;a=(int)b;对于数值型数据,Java可以将低精度的数字赋值给高精度的数字型变量,反之则需要进行强制类型转换,例如将int,short,byte赋值给long型时不需要显式的类型转换,如doublet=0.9F。反之,将long型数赋值给byte,short,int型时需要强制转换inta=(int)123L。Java不允许自动类型转换,当你进行类型转换时,要注意使目标类型能够容纳原类型的所有信息。记住整型和字符型变量位长是不同的,整型是32位,而字符型是16位,所以从整型转换到字符型可能会丢失信息。同样,把64位的长整型数转换为整型数时,由于长整型有比32位更多的信息,也很可能会丢失信息。即使两个数有相同的位数,比如整型和浮点型(都是32位),从浮点型转换为整型时也会丢失信息。

表3.5不会丢失信息的类型转换

原始类型目标类型原始类型目标类型byteshort,char,int,long,float,doubleintlong,float,doubleshortint,long,float,

doublelongfloat,doublecharint,long,float,

doublefloatdoubleJava的运算符代表着特定的运算指令,程序运行时将对运算符连接的操作数进行相应的运算。运算符和操作数的组合构成表达式,表达式代表着一个确定的数值。表达式在使用上总是先计算后使用,因此,不管一个表达式有多么复杂,其最终结果都是一个有确定类型和大小的数值。按照运算符功能来分,运算符有7种:赋值运算符、算术运算符、关系运算符、条件运算符、逻辑运算符、位运算符和其他运算符。按照连接操作数的多少来分,有一元运算符、二元运算符和三元运算符。另外,算术运算符和赋值运算符可以结合在一起形成算术赋值运算符。

3.3运算符与表达式

表3.6给出了赋值运算符和功能说明(未列出包含位运算符的赋值运算符)。表3.6赋值运算符

3.3.1赋值运算符

运算符功能举例等价于=右边数赋给左边变量x=5,5赋给x

+=左右两边数相加,结果赋给左变量x=5,x+=10将15赋给xx=x+10-=左右两边数相减,结果赋给左变量x=5,x-=10将-5赋给xx=x-10*=左右两边数相乘,结果赋给左变量x=5,x*=10将50赋给xx=x*10/=右边数除左边数,结果赋给左变量x=5,x/=5将1赋给xx=x/5%=右边数除左边数,余数赋给左变量x=25,x%=7将4赋给xx=x%7由赋值运算符构成的表达式称为赋值表达式。赋值运算符的右边是一个表达式,这个表达式还可以包含一个表达式。例如:

a=b=c=0,相当于3个表达式c=0,b=c,a=b。

表3.7给出了算术运算符和功能说明。算术运算符按操作数的多少可分为一元运算符和二元运算符。一元运算符(+、-、++、--)一次对一个操作数进行运算,二元运算符一次对两个操作数进行运算。求余运算在判断两个数是否成倍数时很有用,余数为0则两数成倍数,否则两数不成倍数。一元运算i++和i--比传统写法的加减运算速度要快很多,常用作循环结构中的计数器。

3.3.2算术运算符

表3.7算术运算符

运算符功能举例说明-取负-x单目运算,将x取负值++加1i++单目运算,等价于i=i+1--减1i--单目运算,等价于i=i-1*乘5*3→15

/除5/3→1整数相除取商的整数部分%求余5%3→2两数相除取余数+加5+3→8

-减5-3→2

有一些运算符能产生布尔类型的结果,称它们为关系运算符,表3.8列出了这些运算符。表3.8关系运算符

3.3.3关系运算符

运算符含义举例说明>大于′A′>′a′→falsea的编码值大于A的编码值<小于′A′<′a′→trueA的编码值小于a的编码值>=大于等于5>=3→true

<=小于等于5<=3→false

==等于5==3→false

!=不等于(3+3)!=5→true先计算3+3的值再比较关系运算符用于两个操作数之间关系的比较。关系表达式的运算结果为布尔值,不是true就是false,操作数可以是常量、变量和表达式。关系表达式常常用作分支结构或循环结构的控制条件。注意:

Java的相等运算符“==”可能会给你带来麻烦,很多人在比较两个量时往往错用了等号“=”,以至于变成了赋值操作,编程中一定要注意比较两个量时用“==”。

条件运算符有一个“?”和一个“:”,条件运算符与上面的运算符略有不同,是三元运算符,有3个操作数。条件表达式的格式为:条件表达式?结果1:结果2;条件运算符的计算过程为:首先计算作为条件的逻辑表达式或关系表达式,条件表达式返回值为true时整个表达式的值为结果1,返回值是false时整个表达式的值为结果2。条件表达式可取代简单的二分支结构,书写简单,并有较快的运算速度。3.3.4条件运算符

例如:inta=5,b=2,result;if(a>b) result=a-b;else result=b-a;其中的分支结构可改写为:result=a>b?a-b:b-a;表3.9逻辑运算符

3.3.5逻辑运算符

运算符含义举例说明!逻辑非!(3>=5)→true将表达式的值true变false,false变true&&逻辑与(3<5)&&(6>4)→true仅当两个表达式都为true时才为true||逻辑或(3>5)||(6<4)→false仅当两个表达式都为false时才为false^逻辑异或(3<5)^(6<4)→true仅当两个表达式值相异时才为true&布尔逻辑与同&&在表达式计算上与&&不同|布尔逻辑或同||在表达式计算上与||不同关系运算只能解决一些简单条件的判定问题,对较为复杂的条件可用逻辑运算来判定。逻辑表达式通常由多个关系表达式构成,最终运算结果为布尔值true或false。“&&”连接的两个表达式中,只要有一个不为true,则整个表达式就为false。运算时只要判定左边表达式为false,就可立即得出结论,不再计算右边表达式。所以,最有可能取false值的表达式尽量放在左边,这样可提高表达式的运算速度。“&”在表达式判定上和“&&”相同,惟一不同的是它总是计算两边表达式的值。“||”连接的两个表达式中,只要有一个为true,则整个表达式就为true。运算时只要判定左边表达式为true,就可立即得出结论,不再计算右边表达式。所以,最有可能取true值的表达式尽量放在左边,以提高表达式的运算速度。“|”在表达式判定上和“||”相同,不同之处是它总是计算两边表达式的值。“^”

逻辑异或连接的两个表达式同为true或同为false时,整个表达式结果为false,其他情况下取true。

例3.5下面的程序说明了关系运算符和逻辑运算符的使用方式,其输出结果如图3.4所示。publicclassRAL{ publicstaticvoidmain(Stringargs[]){ inta=25,b=3,e=3,f=0; booleand=a<b; System.out.println(″a=25,b=3,e=3,f=0″); System.out.println(″a<b=″+d); if(e!=0&&a/e>5) System.out.println(″a/e=″+a/e); if(f!=0&&a/f>5) System.out.println(″a/f=″+a/f); else System.out.println(″f=″+f); }}图位运算符

&按位与|按位或~按位非^按位异或>>算术右移,左边高位全用符号位填,符号不变<<左移>>>算术右移,用0填充空位,符号可能改变以上是常见的分类运算符,在Java中还有一些特殊的运算符,如表3.10所示。表3.10其他运算符3.3.7其他运算符

符号功能()表达式加括号则优先运算(参数表)方法的参数传递,多个参数时用逗号分隔(类型)强制类型转换.分量运算符,用于对象属性或方法的引用[]下标运算符,引用数组元素instanceof对象运算符,用于测试一个对象是否是一个指定类的实例new对象实例化运算符,实例化一个对象,即为对象分配内存+字符串合并运算符,如″Hello″+″World!″等于″HelloWorld!″表3.11从高到低列出了运算符的优先级,同一行中的运算符优先级相同。

不论任何时候,当你一时无法确定某种计算的执行次序时,可以使用加括号的方法明确为编译器指定运算顺序,这也是提高程序可读性的一个重要方法。

3.3.8运算优先级

表3.11运算符的优先级

1.[]()expr++expr--2++expr--expr!~-3new(type)

4*/%

5+-

6<><=>=instanceof7==!=

8&

9^

10|

11&&

12||

13?:

14=opr=

数组是有序数据的集合,使用时要先声明后创建。Java中,数组是对象:动态初始化可以赋值给Object类型的变量在类Object中定义的方法都可用于数组每个数组都有一个由publicfinal修饰的成员变量:length,即数组含有元素的个数(length可以是正数或零)3.4数组

length数组是Java语言中的特殊数据类型,它们保存着能通过下标索引来引用的一组同类数据。一维数组是指一个线性数据序列,声明格式为:数据类型数组名[];或数据类型[]数组名;例如:intarr1[];char[]arr2;Java在数组的定义中并不为数组元素分配内存,因此“[]”中不用指出数组中元素的个数即数组长度,而且对于如上定义的一个数组暂时还不能访问它的任何元素。

3.4.1一维数组的声明

定义数组后,还必须为数组分配内存、初始化。1.用运算符new分配内存再赋值格式如下:数组名=new数据类型[size]其中,size指明数组的长度。例如:intintArr[]=newint[3];charchArr[]=newchar[5];数组元素赋值的方法与变量相同,例如:intArr[0]=10;intArr[1]=20;intArr[2]=30;3.4.2一维数组的创建与赋值

2.直接赋初值并定义数组的大小第二种方法是直接赋初值并定义数组的大小。初值必须用大括号括起,用逗号作分隔符,初值的个数表示数组的大小。例如:inta[]={1,2,3,4,5,6,7,8,9,10};charc[]={′a′,′b′,′c′,′北′,′京′}用关键字new构成数组的创建表达式,可以指定数组的类型和数组元素的个数。元素个数可以是常量也可以是变量基本类型数组的每个元素都是一个基本类型的变量;引用类型数组的每个元素都是对象的的引用

例3.6一维数组的使用。该程序对数组中的每个元素赋值,结果如图3.5所示。publicclassA1{publicstaticvoidmain(Stringargs[]){inta[]=newint[5];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;System.out.println(″a[″+0+″]=″+a[0]);System.out.println(″a[″+1+″]=″+a[1]);System.out.println(″a[″+2+″]=″+a[2]);System.out.println(″a[″+3+″]=″+a[3]);System.out.println(″a[″+4+″]=″+a[4]);}}图

3.5数组名是一个引用:publicclassArrays{publicstaticvoidmain(String[]args){int[]a1={1,2,3,4,5};int[]a2;a2=a1;for(inti=0;i<a2.length;i++)a2[i]++;for(inti=0;i<a1.length;i++) System.out.println("a1["+i+"]="+a1[i]);}}

字符串引用构成的数组:

String[]strArray; strArray=newString[8]; strArray[0]="Hello";strArraystrArraystrArrayHellosource数组的复制: publicstaticvoidarraycopy(Object

source,int

srcIndex,Object

dest,int

destIndex,int

length)Java将多维数组看作数组的数组。例如二维数组就是一个特殊的一维数组,它的每个元素是一个一维数组。二维数组的声明与一维数组基本相同,只是后面再加上一对中括号“[]”。创建二维数组时,可指定各维的长度或至少指定第一维的长度,也可采用直接赋值的方法确定二维数组的长度。此时,按照给定的值序依次填满数组每一行中的元素。更高维的情况是类似的。下面以二维数组为例来进行说明。例如:3.4.3多维数组

intarr1[][]=newint[3][4];intarr2[][]=newint[3][];intarr3[][]={{0,1,2},{3,4,5},{6,7,8}};Java中二维数组有一个好处是第二维的长度可以不相等。例如arr2的第二维长度可以分别选取为3、4、5,适用于数组元素不等的情况。每行的长度:classUnevenExample3{ publicstaticvoidmain(String[]arg){ //声明并构造一个2维数组

int[][]une

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论