《java变量与基础语法.ppt》由会员分享,可在线阅读,更多相关《java变量与基础语法.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、JAVA变量与基础语法变量与基础语法 标识符与关键字基本数据类型运算符与表达式程序的流程结构(分支,循环)数组方法基本的输入与输出本章目标本章目标简单输出语句简单输出语句如果要将某些信息打印到屏幕上,就必须使用输出语句;使用System.out.println()实现换行输出效果;使用System.out.print()实现输出但不换行效果;无论输出什么类型的数据,只需将数据作为参数传递给它们即可,而无需像C语言中那样,使用%s、%d之类的控制字符,如:int a=10;float f=3.14f;System.out.println(a);System.out.print(f);System
2、.out.println(X);简单简单输入语句输入语句使用System.in.read()实现输入效果;read()函数的返回值是字符的Unicode值,是int类型的。public static void main(String args)throws IOException int charc=System.in.read();System.out.printf(%c,charc);JDK5中还增加了Scanner类用于,可用于输入。概念概念:在编写程序时,对各种变量,方法和类等要素命名时使用的字符序列称为标识符。命名规则:命名规则:只能由字母,下划线,美元符或数字组。只能由字母,下划线
3、”_”和美元符”$”开头。不能是java中的关键字和保留字。说明:说明:java中严格区分大小写,所以标识符也是大小写敏感的,但长度没有限制。约定俗成:java标识符的选取要做到”见名知其意”且不能为java语言中的关键字。定义时尽量不要与预定义标识符重名。标识符标识符关键字关键字:java中一些赋予特定的含义,用做专门用途的字符串称为关键字(Keyword)。说明:在一些编辑器和IDE中会将关键字使用特殊方式和颜色标出来。在java中所有的关键字都是英文小写。在java中goto和const虽然从未被使用,也当作关键字保留了下来。保留字:保留字:不是关键字,但在程序中又不能作为用户定义标识符
4、的字符串(reservedwords)。Java中的保留字有:true,false,和null。关键字与保留字关键字与保留字JAVA中的关键字中的关键字abstractcontinuefornewswitchassert*defaultgoto*packagesynchronizedbooleandoifprivatethisbreakdoubleimplements protectedthrowbyteelseimportpublicthrowscaseenum*instanceofreturntransient catchextendsintshorttrycharfinalinterfa
5、cestaticvoidclassfinallylongstrictfp*volatileconst*floatnativesuperwhile关键字说明关键字说明*not used*added in 1.2*added in 1.4*added in 5.0标识符举例标识符举例合法标识符非法标识符非法说明TeStHello World含有空格A11A数字开头$absb含有不合法字母mainboolean关键字Truetrue保留字_booleanjava的常量类型:整型常量:十进制(12),十六进制(0 x12),八进制(012)长整型常量:13L单精度浮点数:5.1f,.4f,2e3f,0
6、f双精度浮点数:5.1,.4,2e-3,0d说明:单精度浮点数和双精度浮点数统称为实型数。默认的小数为双精度浮点数。逻辑常量:true和falseJava常量常量字符常量:a,8,u0027r表示接受键盘输入,相当于按下了回车键;n是换行;t是制表符,相当于table键;b是退格键,相当于BackSpace;是单引号,而“是双引号;是一个斜杠“”。字符串常量:“helloproject”注意点:字符串常量和字符常量的区别。注意常量这个名词的应用语境,有时候,常量这个名词应用在其他语境中表示值不可变的变量。参见”final关键字”。Java常量常量概念概念:变量是系统为程序分配的一块内存存储单元
7、,用来存储各种数据类型的数据,根据所存储的变量值的数据类型不同,可以划分为各种不同数据类型的变量,其要素为变量名,数据类型,变量值和作用域。可以根据变量名称来访问其对应内存存储单元中的变量值.如下定义了一个变量:intage=20;(其在内存表示如右图)Java变量变量age20age表示变量名20表示存储单元名称为age中的值请参见java变量按数据类型划分的图Java变量数据类型变量数据类型数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte,int,short,long)浮点类型(float,double)类(class)接口(interfa
8、ce)数组byte占用一个字节,数字大小为-2727-1short占用两个字节,数字大小为-215215-1int占用四个字节,数字大小为-231231-1long占用八个字节,数字大小为-263263-1float占用四个字节,数字大小为1.4E-453.4E+38,-1.4E-45-3.4E+38。用二进制的指数形式表示一个浮点数的格式,如:101*22,101*2-3double占用八个字节,数字大小为4.9E-3241.7E+308,-4.9E-324-1.7E+308。char占两个字节,数字大小为0216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字
9、符变量。boolean占一个字节,其取值只有两个,true和false。JAVA变量字节大小及有效取值范围变量字节大小及有效取值范围 变量定义:变量定义:java程序中每个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:dataTypevariableName=variableValue;变量声明举例:变量声明举例:intage=20;floatprice=20.06f;doubled1,d2,d3=0.456;intx=1,y;y=x+3;注意:从本质上讲,变量其实是内存中的一小块内存单元,可以通过其名字(变量名)来访问这块区域,因此,每个变量使用前必须要先申请(声明),然后必须
10、对其进行赋值,才可以使用。Java变量的定义变量的定义JAVA变量的默认值变量的默认值Data TypeDefault Value(for fields)byte0short0int0long0Lfloat0.0fdouble0.0dcharu0000String(or any object)nullbooleanfalse按被声明的位置划分局部变量::方法的参数列表中和方法内部以及语句块中声明的变量。成员变量:方法外面且在类的里面声明的变量。静态成员变量:用static关键字修饰的成员变量。注意:java语言中,类外面(与类对应的大括号外面)不能有变量的声明.按所属的数据类型划分基本数据类型
11、变量引用数据类型变量Java变量的分类变量的分类初始化问题:初始化问题:Java的成员变量在声明时,如果没有指定初始化的值,系统会根据成员变量的数据类型给出默认的值,但局部变量在声明时候没有初始化,则系统不会给出默认的初始化值,如果在使用前,没有对其进行初始华,在编译时就会报错。请看下面的代码:publicvoidmethodName()intheight;intwidth=height+5;/编译出错,height还没有被初始化.Java的局部变量和成员变量的局部变量和成员变量分类:分类:自动类型转换(也叫隐式类型转换)强制类型转换(也叫显式类型转换)类型转换的原理及什么时候要用强制类型转换
12、表达式的数据类型自动提升分析System.out.println(a+1)与System.out.println(“”+a+1)的区别。Java数据类型转化数据类型转化 byteshortcharintlongfloatdouble变量的作用域指变量起作用的范围,说明变量在什么部分可以被访问;变量的生命周期是指变量在内存中存在的周期,即什么时候分配空间,什么时候销毁;变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。JAVA变量的生命周期与作用域变量的生命周期与作用域publiccla
13、ssTestScopepublicstaticvoidmain(Stringargs)intx=12;intq=96;/x和q都可用intx=3;/错误的定义,Java中不允许有这种嵌套定义System.out.println(xis+x);System.out.println(qis+q);q=x;/*错误的行,只有x可用,q超出了作用域范围*/System.out.println(xis+x);JAVA变量的生命周期与作用域变量的生命周期与作用域运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种:算术运算符赋值运算符比较运算符逻辑运算符移位运算
14、符java中的运算符中的运算符 算术运算符算术运算符“+”除字符串相加功能外,还能把非字符串转换成字符串,如:“x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。intx=3510;x=x/1000*1000;实际运行结果是3000,想想为什么?算术运算符的注意问题算术运算符的注意问题赋值运算符赋值运算符 注1:在JAVA里可以把赋值语句连在一起,如:x=y=z=5;在这个语句中,所有三个变量都得到同样的值5。注2:x+=3等效于
15、x=x+3,等于*=,-=,/=依此类推。比较运算符比较运算符 注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“=”不能误写成“=”,切记!切记!逻辑运算符逻辑运算符 注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。注2:“&”和“&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&”的左边为false,则将不会计算其右边的表达式。“|”和“|”的区别与“&”和“&”的区别一样。publicclassTestAndpublicstaticvo
16、idmain(Stringargs)intx=0;inty=3;if(x!=0&y=y/x)System.out.println(y=+y);上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错“&”和和“&”的区别分析的区别分析移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。对于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a33和a
17、1结果是一样的,a32的结果还是a原来的数字。对于long型整数移位时ab,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a1;在一行语句中单独存在,毫无意义。x1的结果和x/2的结果是一样的,x2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y=1x;移位运算注意事项移位运算注意事项运算符的优先级运算符的优先级 我们可以使用括号改变运算赋的优先级,分析int a=2;int b=a+3*a;语句的执行过程 与int a=2;int b=(a+3)*a;语句的执行
18、过程的区别。对于inta=2;intb=a+3*a+;这样的语句,b最终等于多少呢?作者试验得到的结果是8。对于inta=2;intb=(a+)+3*a;这样的语句,b最终等于多少呢?如何避免多个运算符带来的问题如何避免多个运算符带来的问题与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。对于优先级顺序,读者不用刻意去记,有个印象就行如果你实在弄不清这些运算先后关系的话,就用
19、括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,这也是软件编码规范的一个要求。如何避免多个运算符带来的问题如何避免多个运算符带来的问题表达式:表达式:表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。一些表达式的例子:语句:语句:空语句:空语句:复合语句:复合语句:代码块:代码块:表达式和语句表达式和语句顺序结构顺序结构选择结构选择结构循环结构循环结构顾名思义,顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。程序的流程控制程序的流程控制 if(表达式)语
20、句;if(表达式)语句1;else语句2;if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式2)语句3;else语句n;if语句的选择结构语句的选择结构 每个语句可以是使用每个语句可以是使用 组成的复合语句。组成的复合语句。条件表达式:条件表达式:变量变量 布尔表达式?语句布尔表达式?语句1:语句语句2;If语句还可以嵌套使用语句还可以嵌套使用if(表达式1)if(表达式2)语句1;else语句2;esle if(表达式2)语句3;else语句4;嵌套时最好使用确定层次界限,举例说明。if语句的选择结构语句的选择结构 Switch(表达式)case常量表达式1:语句1
21、;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n;default语句是可选的,它接受除上面接受值的其他值,通俗的讲,就是谁也不要的都归它。case后面可以跟多个语句,这些语句可以不用大括号括起来。switch语句判断条件可接受int,byte,char,short型,不可以接受其他类型。一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的代码都会被执行,直到碰到break语句为止。我们可以利用这个特点来用同一段语句处理多个case条件。switch语句的选择
22、结构语句的选择结构 While(表达式)语句;intx=1;while(x3)System.out.println(x=+x);x+;脚下留心:while表达式的括号后面一定不要加“;”while循环语句循环语句 do语句;while(表达式);publicclassTestDopublicstaticvoidmain(Stringargs)intx=3;while(x=0)System.out.println(ok1);x+;inty=3;do System.out.println(ok2);y+;while(y=0);do-while循环语句循环语句编写一个程序,这个程序不断地读取从键盘上
23、输入的字符,直到读到字符q时,程序结束。提示:调用System.in.read();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,你一定能体会到在什么样的情况下,用do-while循环语句比while循环语句方便。do-while循环语句循环语句for(表达式1;表达式2;表达式3)语句;for循环的三个表达式中的任意一个都可以省略,甚至是三个都可以省略,但是两个“;”是不能省略的。如下面几种写法是等价的:for(intx=1;x10;x+)System.out.println(x=+x);等效于for循环语句循环语句 intx=1;for(;x10;x+)System.out.pr
24、intln(x=+x);等效于intx=1;for(;x=10)break;System.out.println(x=+x);x+;for循环语句循环语句 break语句可以中止循环中的子语句和switch语句。一个无标号的break语句会把控制传给当前(最内)循环(while,dofor或Switch)的下一条语句。如果有标号,控制会被传递给当前方法中的带有这一标号的语句。如:st:while(true)while(true)breakst;break语句语句 continue语句只能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩
25、余语句块,接着执行下一次循环。用continue语句的打印出0到10之间的所有奇数的程序例子。for(inti=0;i10;i+)if(i%2=0)continue;System.out.println(i);continue语句语句 Java中的原始数据类型与C语言中的基本数据类型一样,其变量都是在栈中分配空间;而除了8种原始数据类型以外,其它的任何数据都不可以在栈中分配,只能到堆中开辟空间,而在堆中分配的空间又只能通过指针访问;通过指针访问堆内存的方式,在Java中被称作引用数据类型;可以认为,Java中的引用就类似于C语言中的指针,只是对指针进行了一定程度上的包装,避免了因直接操作指针而
26、造成的数据意外损坏,从而导致程序错误的情况。Java中的内存分配中的内存分配数组用于将相同类型的数据存储在连续的存储单元中;可以通过指定数组的名称和长度来声明数组;一旦声明数组的大小,就不能再修改;数组元素通过数组名和索引来访问,索引从0开始;数组可以是一维,也可以是多维。数组数组 在Java中,不允许将数组分配在栈内存中,只能分配在堆内存中;Java中没有类似于malloc、calloc、realloc和free等函数,取而代之的是new关键字;new是Java中内置的操作符;new操作符用来从堆中分配指定类型的内存空间,并返回相应类型的引用,其作用类似于malloc函数。new关键字关键字
27、Java中声明数组的几种方式中声明数组的几种方式/仅声明数组的引用,但没有分配内存空间仅声明数组的引用,但没有分配内存空间float fAry;/声明数组的同时,根据指定的长度分配内存,但数组中声明数组的同时,根据指定的长度分配内存,但数组中没有值没有值char chAry=new char10;/声明数组并分配内存,同时将其初始化声明数组并分配内存,同时将其初始化int ary1=new int1,2,3,4,5;/与前一种方式相同,仅仅只是语法相对简略与前一种方式相同,仅仅只是语法相对简略int ary2=1,2,3,4,5;C语言中,不可以将数组直接赋值给另一个数组;在Java中,语法上
28、允许这样做,但实际得到的效果是两个数组引用指向同一块内存。int ary1=2,4,6,8,10;int ary2;ary2=ary1;数组之间赋值数组之间赋值108642堆堆栈栈ary1ary2在Java中,程序员可以不再关注数组的长度,数组自带的length属性将负责保管数组的长度;C语言不检查数组的边界,数组索引完全由程序员掌握;Java对数组下标越界情况强加约束;如果试图访问不在有效索引以内的元素,将会引发运行错误。关于数组长度关于数组长度数组赋值示例数组赋值示例public class ArrayDemo public static void main(String args)int
29、 ary1=2,4,6,8,10;/声明并初始化数组声明并初始化数组1 int ary2;/声明数组声明数组2 ary2=ary1;/将数组将数组1赋值给数组赋值给数组2 ary23=1024;/通过数组通过数组2修改其中一个元素的值修改其中一个元素的值 /打印出数组打印出数组1中的元素中的元素 System.out.println(数组数组1中的元素:中的元素:);for(int i=0;i ary1.length;i+)System.out.println(ary1i);/打印出数组打印出数组2中的元素中的元素 System.out.println(数组数组2中的元素:中的元素:);for
30、(int i=0;i ary2.length;i+)System.out.println(ary2i);如何理解多维数组,类似我们的棋盘。java中并没有真正的多维数组,只有数组的数组,Java中多维数组不一定是规则矩阵形式。多维数组多维数组 多维数组中元素的引用方式,如:x12。规则矩阵数组可以在一条语句中产生,如:intxx=newint23;多维数组的静态初始化,如:intxx=3,2,7,1,5,6;多维数组多维数组定义一个多维数组intxx;xx=newint3;xx0=newint3;xx1=newint2;多维数组多维数组 使用循环作数组复制int arr1=1,2,3,4,5;
31、int arr2=new int5;for(int i=0;i arr1.length;i+)arr2i=arr1i;for(int i=0;i arr2.length;i+)System.out.print(arr2i+);System.out.println();数组复制数组复制不可用=比较两个数组的元素值是否相等intarr1=1,2,3,4,5;intarr2=1,2,3,4,5;inttmp=arr1;System.out.println(arr1=tmp);System.out.println(arr2=tmp);数组比较数组比较foreach与数组与数组加强的for循环(Enha
32、ncedforLoop)for(typeelement:array)System.out.println(element).J2SE5.0之前intarr=1,2,3,4,5;for(inti=0;iarr.length;i+)System.out.println(arri);在J2SE5.0之后intarr=1,2,3,4,5;for(intelement:arr)System.out.println(element);foreach与数组与数组如果是对象的话二维数组String names=caterpillar,momor,bush;for(String name:names)Syste
33、m.out.println(name);int arr=1,2,3,4,5,6,7,8,9;for(int row:arr)for(int element:row)System.out.println(element);函数(子程序)的概念与作用。定义一个函数的格式:返回值类型函数名(参数类型形式参数1,参数类型形式参数2,.)程序代码return 返回值;返回值;其中:形式参数:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型参数类型:就是该形式参数的数据类型。返回值:返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:返回值类型:函数要返回的结果的数据类型。如没有返
34、回值,则为void。实参:实参:调用函数时实际传给函数形式参数的数据。函数函数java中函数参数的传递和C语言中一样,都是值传递。classtestpasspublicstaticvoidswap(intx,inty)inta=x;x=y;y=a;System.out.println(“x=”+x+”y=”+y);publicstaticvoidman()inta=2,b=3;swap(a,b);System.out.println(“a=”+a+”b=”+b);函数参数的传递函数参数的传递Java语言中参数传递的规则,和其它程序设计语言类似,Java语言的参数传递也分为两种:按值传递按值传递
35、(by value)适用范围:8种基本数据类型、String对象特点:在内存中复制一份数据,把复制后的数据传递到方法内部作用:在方法内部改变参数的值,外部数据不会跟着发生改变按址传递按址传递(by address)适用范围:数组、除String以外的其他所有类型的对象特点:将对象的地址传递到方法内部作用:在方法内部修改对象的内容,外部数据也会跟着发生改变Java语言中的参数传递语言中的参数传递以上特性是Java语言中的规定,在语法上无法指定参数传递是按值传递还是按址传递,但是可以通过下面的变换实现:对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现。对于按地址传递的参
36、数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创建该对象实现。Java语言中的参数传递语言中的参数传递不定长度自变量不定长度自变量J2SE5.0之后开始支持不定长度自变量(Variable-lengthArgument)实际上nums是一个数组 public static int sum(int.nums)/使用.宣告参数 int sum=0;for(int num:nums)sum+=num;return sum;不定长度自变量不定长度自变量宣告的参数必须设定在参数列的最后一个,下面的方式是合法的下面的方式是不合法的public void someMethod(int a
37、rg1,int arg2,int.varargs)/.public void someMethod(int.varargs,int arg1,int arg2)/.不定长度自变量不定长度自变量public void someMethod(int.varargs1,int.varargs2)/.public void someMethod(SomeClass.somes)/.递归方法递归方法在方法中呼叫自身同名方法,而呼叫者本身会先被置入内存堆栈(Stack)中堆栈是一种先进后出(Firstin,lastout)的数据结构 private static int gcd(int m,int n)if(n=0)return m;else return gcd(n,m%n);总结:总结:Java中的数据类型大体上分为两种:原始数据类型和引用数据类型;变量是存储数据的基本单位;运算符和流程控制基本上与C相似;Java中数组是引用数据类型;数组必须由new关键字为其分配内存;