版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA变量与基础语法
java变量与基础语法课件◆标识符与关键字◆基本数据类型◆运算符与表达式◆程序的流程结构(分支,循环)◆数组◆方法◆基本的输入与输出本章目标◆标识符与关键字本章目标简单输出语句◆如果要将某些信息打印到屏幕上,就必须使用输出语句;◆使用System.out.println()实现换行输出效果;◆使用System.out.print()实现输出但不换行效果;◆无论输出什么类型的数据,只需将数据作为参数传递给它们即可,而无需像C语言中那样,使用%s、%d之类的控制字符,如:
inta=10;
floatf=3.14f; System.out.println(a); System.out.print(f); System.out.println('X');简单输出语句◆如果要将某些信息打印到屏幕上,就必须使用输出语简单输入语句◆使用System.in.read()实现输入效果;◆
read()函数的返回值是字符的Unicode值,是int类型的。public
static
voidmain(String[]args)
throwsIOException{
intcharc=System.in.read();System.out.printf("%c",charc);}◆
JDK5中还增加了Scanner类用于,可用于输入。简单输入语句◆使用System.in.read()实现输入效◆概念:
在编写程序时,对各种变量,方法和类等要素命名时使用的字符序列称为标识符。◆命名规则:只能由字母,下划线,美元符或数字组。只能由字母,下划线”_”和美元符”$”开头。不能是java中的关键字和保留字。◆说明:java中严格区分大小写,所以标识符也是大小写敏感的,但长度没有限制。约定俗成:java标识符的选取要做到”见名知其意”且不能为java语言中的关键字。定义时尽量不要与预定义标识符重名。标识符◆概念:标识符◆关键字:
java中一些赋予特定的含义,用做专门用途的字符串称为关键字(Keyword)。
说明:
在一些编辑器和IDE中会将关键字使用特殊方式和颜色标出来。在java中所有的关键字都是英文小写。
在java中goto和const虽然从未被使用,也当作关键字保留了下来。◆保留字:
不是关键字,但在程序中又不能作为用户定义标识符的字符串(reservedwords)。Java中的保留字有:true,false,和null。关键字与保留字◆关键字:关键字与保留字JAVA中的关键字abstractcontinuefornewswitchassert***defaultgoto*packagesynchronizedbooleandoifprivatethisbreakdoubleimplementsprotectedthrowbyteelseimportpublicthrowscaseenum****instanceofreturntransientcatchextendsintshorttrycharfinalinterfacestaticvoidclassfinallylongstrictfp**volatileconst*floatnativesuperwhileJAVA中的关键字abstractcontinueforne关键字说明*notused**addedin1.2***addedin1.4****addedin5.0关键字说明*notused**addedin1.2**标识符举例合法标识符非法标识符非法说明TeStHelloWorld含有空格A11A数字开头$ab@sb含有不合法字母@mainboolean关键字Truetrue保留字_boolean标识符举例合法标识符非法标识符非法说明TeStHelloW◆java的常量类型:
◆整型常量:十进制(12),十六进制(0x12),八进制(012)
◆长整型常量:13L◆单精度浮点数:5.1f,.4f,2e3f,0f◆双精度浮点数:5.1,.4,2e-3,0d说明:单精度浮点数和双精度浮点数统称为实型数。默认的小数为双精度浮点数。◆逻辑常量:true和falseJava常量◆java的常量类型:Java常量◆字符常量:‘a’,‘8’,'\u0027'‘\r‘表示接受键盘输入,相当于按下了回车键;‘\n‘是换行;‘\t‘是制表符,相当于table键;‘\b‘是退格键,相当于BackSpace;‘\‘‘是单引号,而‘\“‘是双引号;‘\\‘是一个斜杠“\”。
◆字符串常量:“helloproject”
注意点:
◆字符串常量和字符常量的区别。
◆注意常量这个名词的应用语境,有时候,常量这个名词应用在其他语境中表示值不可变的变量。参见”final关键字”。
Java常量◆字符常量:Java常量◆概念:变量是系统为程序分配的一块内存存储单元,用来存储各种数据类型的数据,根据所存储的变量值的数据类型不同,可以划分为各种不同数据类型的变量,其要素为变量名,数据类型,变量值和作用域。可以根据变量名称来访问其对应内存存储单元中的变量值.如下定义了一个变量:intage=20;(其在内存表示如右图)
Java变量age20age表示变量名20表示存储单元名称为age中的值◆概念:Java变量age20age表示变量名20表示存储◆请参见java变量按数据类型划分的图Java变量数据类型数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte,int,short,long)浮点类型(float,double)类(class)接口(interface)数组◆请参见java变量按数据类型划分的图Java变量数据类型数byte占用一个字节,数字大小为-27—27-1short占用两个字节,数字大小为-215—215-1int占用四个字节,数字大小为-231—231-1long占用八个字节,数字大小为-263—263-1float占用四个字节,数字大小为1.4E-45~3.4E+38,-1.4E-45~-3.4E+38。用二进制的指数形式表示一个浮点数的格式,如:101*22,101*2-3double占用八个字节,数字大小为4.9E-324~1.7E+308,-4.9E-324~-1.7E+308。char占两个字节,数字大小为0—216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。boolean占一个字节,其取值只有两个,true和false。JAVA变量字节大小及有效取值范围byte占用一个字节,数字大小为-27—27-1JAVA变量◆变量定义:
java程序中每个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:
dataTypevariableName[=variableValue];◆变量声明举例:
intage=20;
floatprice=20.06f;doubled1,d2,d3=0.456;intx=1,y;
y=x+3;注意:从本质上讲,变量其实是内存中的一小块内存单元,可以通过其名字(变量名)来访问这块区域,因此,每个变量使用前必须要先申请(声明),然后必须对其进行赋值,才可以使用。
Java变量的定义◆变量定义:Java变量的定义JAVA变量的默认值DataTypeDefaultValue(forfields)byte0short0int0long0Lfloat0.0fdouble0.0dchar'\u0000'String(oranyobject)
nullbooleanfalseJAVA变量的默认值DataTypeDefaultVal◆按被声明的位置划分
◆局部变量::方法的参数列表中和方法内部以及语句块中声明的变量。
◆成员变量:
方法外面且在类的里面声明的变量。◆静态成员变量:用static关键字修饰的成员变量。
注意:java语言中,类外面(与类对应的大括号外面)不能有变量的声明.◆按所属的数据类型划分
◆基本数据类型变量
◆引用数据类型变量Java变量的分类◆按被声明的位置划分Java变量的分类◆初始化问题:Java的成员变量在声明时,如果没有指定初始化的值,系统会根据成员变量的数据类型给出默认的值,但局部变量在声明时候没有初始化,则系统不会给出默认的初始化值,如果在使用前,没有对其进行初始华,在编译时就会报错。请看下面的代码:publicvoidmethodName(){intheight;intwidth=height+5;//编译出错,height还没有被初始化.}Java的局部变量和成员变量◆初始化问题:Java的局部变量和成员变量◆分类:自动类型转换(也叫隐式类型转换)强制类型转换(也叫显式类型转换)◆类型转换的原理及什么时候要用强制类型转换◆表达式的数据类型自动提升分析System.out.println(‘a’+1)与 System.out.println(“”+’a’+1)的区别。Java数据类型转化byteshortcharintlongfloatdouble◆分类:Java数据类型转化byteshortcharin◆变量的作用域指变量起作用的范围,说明变量在什么部分可以被访问;◆变量的生命周期是指变量在内存中存在的周期,即什么时候分配空间,什么时候销毁;◆变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。JAVA变量的生命周期与作用域◆变量的作用域指变量起作用的范围,说明变量在什么部分可以被publicclassTestScope{publicstaticvoidmain(String[]args){ 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变量的生命周期与作用域JAVA变量的生命周期与作用域◆运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种:算术运算符赋值运算符比较运算符逻辑运算符移位运算符java中的运算符◆运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般◆算术运算符◆算术运算符◆“+”除字符串相加功能外,还能把非字符串转换成字符串,如:“x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。intx=3510;x=x/1000*1000;实际运行结果是3000,想想为什么?
算术运算符的注意问题◆“+”除字符串相加功能外,还能把非字符串转换成字符串,如◆赋值运算符注1:在JAVA里可以把赋值语句连在一起,如:
x=y=z=5;
在这个语句中,所有三个变量都得到同样的值5。注2:x+=3等效于x=x+3,等于*=,-=,/=依此类推。◆赋值运算符注1:在JAVA里可以把赋值语句连在一起,如:◆比较运算符注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“==”不能误写成“=”
,切记!切记!◆比较运算符注1:比较运算符的结果都是boolean型,也◆逻辑运算符注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。注2:“&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右边的表达式。“|”和“||”的区别与“&”和“&&”的区别一样。◆逻辑运算符注1:逻辑运算符用于对boolean型结果的表◆publicclassTestAnd{publicstaticvoidmain(String[]args){intx=0;inty=3;if(x!=0&&y==y/x) System.out.println("y="+y);}}上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错“&”和“&&”的区别分析◆publicclassTestAnd“&”和“&&”的◆移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。 对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字。对于long型整数移位时a>>b,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a>>1;在一行语句中单独存在,毫无意义。x>>1的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y=1<<x;
移位运算注意事项◆移位运算符适用类型有byte、short、char、int◆运算符的优先级我们可以使用括号改变运算赋的优先级,分析inta=2;intb=a+3*a;语句的执行过程与inta=2;intb=(a+3)*a;语句的执行过程的区别。◆运算符的优先级我们可以使用括号改变运算赋的优先级,分析i◆对于inta=2;intb=a+3*a++;这样的语句,b最终等于多少呢?作者试验得到的结果是8。对于inta=2;intb=(a++)+3*a;这样的语句,b最终等于多少呢?如何避免多个运算符带来的问题◆对于inta=2;intb=a+3*a+◆与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。对于优先级顺序,读者不用刻意去记,有个印象就行如果你实在弄不清这些运算先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,这也是软件编码规范的一个要求。如何避免多个运算符带来的问题◆与其去思考其中的原因,我们还不如将上面的第二句改为几条语句◆表达式:表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。一些表达式的例子:◆语句:◆空语句:◆复合语句:{}◆代码块:{}表达式和语句◆表达式:表达式和语句◆顺序结构◆选择结构◆循环结构顾名思义,顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。程序的流程控制◆顺序结构程序的流程控制◆if(表达式)语句;◆if(表达式)语句1;
else语句2;◆if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式2)语句3;
… else语句n;if语句的选择结构◆if(表达式)语句;if语句的选择结构◆每个语句可以是使用{}组成的复合语句。◆条件表达式:
变量=布尔表达式?语句1:语句2;◆
If语句还可以嵌套使用
if(表达式1) if(表达式2)语句1;
else语句2;
esle if(表达式2)语句3;
else语句4; 嵌套时最好使用{}确定层次界限,举例说明。if语句的选择结构◆每个语句可以是使用{}组成的复合语句。if语句的选择结构◆Switch(表达式){ case常量表达式1:语句1;break; case常量表达式2:语句2;break; … case常量表达式n:语句n;break; default:语句n;}default语句是可选的,它接受除上面接受值的其他值,通俗的讲,就是谁也不要的都归它。case后面可以跟多个语句,这些语句可以不用大括号括起来。switch语句判断条件可接受int,byte,char,short型,不可以接受其他类型。一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的代码都会被执行,直到碰到break语句为止。我们可以利用这个特点来用同一段语句处理多个case条件。switch语句的选择结构◆Switch(表达式)switch语句的选择结构◆While(表达式)语句;intx=1;while(x<3){System.out.println("x="+x);x++;}脚下留心:while表达式的括号后面一定不要加“;”while循环语句◆While(表达式)语句;while循环语句◆do语句;while(表达式);publicclassTestDo{publicstaticvoidmain(String[]args){ intx=3; while(x==0) { System.out.println("ok1"); x++;}inty=3;do{ System.out.println("ok2"); y++;}while(y==0);}}do-while循环语句◆do语句;while(表达式);do-while◆编写一个程序,这个程序不断地读取从键盘上输入的字符,直到读到字符’q’时,程序结束。◆提示:调用System.in.read();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,你一定能体会到在什么样的情况下,用do-while循环语句比while循环语句方便。do-while循环语句◆编写一个程序,这个程序不断地读取从键盘上输入的字符,直到读◆for(表达式1;表达式2;表达式3)语句;◆for循环的三个表达式中的任意一个都可以省略,甚至是三个都可以省略,但是两个“;”是不能省略的。◆如下面几种写法是等价的:for(intx=1;x<10;x++){System.out.println("x="+x);}等效于for循环语句◆for(表达式1;表达式2;表达式3)语句;for循环intx=1;for(;x<10;x++){System.out.println("x="+x);}等效于intx=1;for(;x<10;){System.out.println("x="+x);x++;}等效于intx=1;for(;;){if(x>=10) break;System.out.println("x="+x);x++;}for循环语句intx=1;for循环语句◆break语句可以中止循环中的子语句和switch语句。一个无标号的break语句会把控制传给当前(最内)循环(while,do.for或Switch)的下一条语句。如果有标号,控制会被传递给当前方法中的带有这一标号的语句。如:st:while(true){while(true){ breakst;}}break语句◆break语句可以中止循环中的子语句和switch语句。一◆continue语句只能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句块,接着执行下一次循环。用continue语句的打印出0到10之间的所有奇数的程序例子。
for(inti=0;i<10;i++){if(i%2==0) continue;System.out.println(i);}continue语句◆continue语句只能出现在循环语句(while,do,◆Java中的原始数据类型与C语言中的基本数据类型一样,其变量都是在栈中分配空间;◆而除了8种原始数据类型以外,其它的任何数据都不可以在栈中分配,只能到堆中开辟空间,而在堆中分配的空间又只能通过指针访问;◆通过指针访问堆内存的方式,在Java中被称作引用数据类型;◆可以认为,Java中的引用就类似于C语言中的指针,只是对指针进行了一定程度上的包装,避免了因直接操作指针而造成的数据意外损坏,从而导致程序错误的情况。Java中的内存分配◆Java中的原始数据类型与C语言中的基本数据类型一样,其◆数组用于将相同类型的数据存储在连续的存储单元中;◆可以通过指定数组的名称和长度来声明数组;◆一旦声明数组的大小,就不能再修改;◆数组元素通过数组名和索引来访问,索引从0开始;◆数组可以是一维,也可以是多维。数组◆数组用于将相同类型的数据存储在连续的存储单元中;数组◆在Java中,不允许将数组分配在栈内存中,只能分配在堆内存中;◆Java中没有类似于malloc、calloc、realloc和free等函数,取而代之的是new关键字;◆new是Java中内置的操作符;◆new操作符用来从堆中分配指定类型的内存空间,并返回相应类型的引用,其作用类似于malloc函数。new关键字◆在Java中,不允许将数组分配在栈内存中,只能分配在堆内存◆Java中声明数组的几种方式//仅声明数组的引用,但没有分配内存空间float[]fAry;//声明数组的同时,根据指定的长度分配内存,但数组中没有值char[]chAry=new
char[10];//声明数组并分配内存,同时将其初始化int[]ary1=new
int[]{1,2,3,4,5};//与前一种方式相同,仅仅只是语法相对简略int[]ary2={1,2,3,4,5};◆Java中声明数组的几种方式//仅声明数组的引用,但没有分◆C语言中,不可以将数组直接赋值给另一个数组;◆在Java中,语法上允许这样做,但实际得到的效果是两个数组引用指向同一块内存。
int[]ary1={2,4,6,8,10};
int[]ary2; ary2=ary1;
数组之间赋值108642堆栈ary1ary2◆C语言中,不可以将数组直接赋值给另一个数组;数组之间赋值1◆在Java中,程序员可以不再关注数组的长度,数组自带的length属性将负责保管数组的长度;◆C语言不检查数组的边界,数组索引完全由程序员掌握;◆
Java对数组下标越界情况强加约束;◆如果试图访问不在有效索引以内的元素,将会引发运行错误。关于数组长度◆在Java中,程序员可以不再关注数组的长度,数组自带的le数组赋值示例public
classArrayDemo{
public
static
voidmain(String[]args){
int[]ary1={2,4,6,8,10};//声明并初始化数组1
int[]ary2;//声明数组2ary2=ary1;//将数组1赋值给数组2
ary2[3]=1024;//通过数组2修改其中一个元素的值
//打印出数组1中的元素
System.out.println("数组1中的元素:");
for(inti=0;i<ary1.length;i++){System.out.println(ary1[i]);}
//打印出数组2中的元素
System.out.println("数组2中的元素:");
for(inti=0;i<ary2.length;i++){System.out.println(ary2[i]);}}}数组赋值示例publicclassArrayDemo{◆如何理解多维数组,类似我们的棋盘。◆java中并没有真正的多维数组,只有数组的数组,Java中多维数组不一定是规则矩阵形式。多维数组◆如何理解多维数组,类似我们的棋盘。多维数组◆多维数组中元素的引用方式,如:x[1][2]。◆规则矩阵数组可以在一条语句中产生,如:intxx[][]=newint[2][3];◆多维数组的静态初始化,如:
int[][]xx={{3,2,7},{1,5},{6}};多维数组◆多维数组中元素的引用方式,如:x[1][2]。多维数组◆定义一个多维数组int[][]xx;xx=newint[3][];xx[0]=newint[3];xx[1]=newint[2];多维数组◆定义一个多维数组多维数组◆使用循环作数组复制int[]arr1={1,2,3,4,5};int[]arr2=newint[5];for(inti=0;i<arr1.length;i++)arr2[i]=arr1[i];for(inti=0;i<arr2.length;i++)System.out.print(arr2[i]+"");System.out.println();数组复制◆使用循环作数组复制数组复制◆不可用'=='比较两个数组的元素值是否相等int[]arr1={1,2,3,4,5};int[]arr2={1,2,3,4,5};int[]tmp=arr1;System.out.println(arr1==tmp);System.out.println(arr2==tmp);数组比较◆不可用'=='比较两个数组的元素值是否相等数组比较foreach与数组◆加强的for循环(EnhancedforLoop)
for(typeelement:array){
System.out.println(element)....
}◆J2SE5.0之前
int[]arr={1,2,3,4,5};
for(inti=0;i<arr.length;i++)
System.out.println(arr[i]);◆在J2SE5.0之后
int[]arr={1,2,3,4,5};
for(intelement:arr)
System.out.println(element);foreach与数组◆加强的for循环(Enhancedfforeach与数组◆如果是对象的话◆二维数组String[]names={"caterpillar","momor","bush"};for(Stringname:names)System.out.println(name);int[][]arr={{1,2,3},{4,5,6},{7,8,9}};for(int[]row:arr){for(intelement:row){System.out.println(element);}}foreach与数组◆如果是对象的话String[]nam◆函数(子程序)的概念与作用。◆定义一个函数的格式:返回值类型函数名(参数类型形式参数1,参数类型形式参数2,….){程序代码
[return返回值;]}其中:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。如没有返回值,则为void。实参:调用函数时实际传给函数形式参数的数据。函数◆函数(子程序)的概念与作用。函数◆java中函数参数的传递和C语言中一样,都是值传递。classtestpass{publicstaticvoidswap(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中函数参数的传递和C语言中一样,都是值传递。函数参◆Java语言中参数传递的规则,和其它程序设计语言类似,Java语言的参数传递也分为两种:按值传递(byvalue)适用范围:8种基本数据类型、String对象特点:在内存中复制一份数据,把复制后的数据传递到方法内部作用:在方法内部改变参数的值,外部数据不会跟着发生改变按址传递(byaddress)适用范围:数组、除String以外的其他所有类型的对象特点:将对象的地址传递到方法内部作用:在方法内部修改对象的内容,外部数据也会跟着发生改变Java语言中的参数传递◆Java语言中参数传递的规则,和其它程序设计语言类似,Ja◆
以上特性是Java语言中的规定,在语法上无法指定参数传递是按值传递还是按址传递,但是可以通过下面的变换实现:对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现。对于按地址传递的参数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创建该对象实现。Java语言中的参数传递◆以上特性是Java语言中的规定,在语法上无法指定参数传递不定长度自变量◆J2SE5.0之后开始支持「不定长度自变量」(Variable-lengthArgument)◆实际上nums是一个数组publicstaticintsum(int...nums){//使用...宣告参数
intsum=0;for(intnum:nums){sum+=num;}returnsum;}不定长度自变量◆J2SE5.0之后开始支持「不定长度自变量不定长度自变量◆宣告的参数必须设定在参数列的最后一个,下面的方式是合法的◆下面的方式是不合法的publicvoidsomeMethod(intarg1,intarg2,
int...varargs){//....}publicvoidsomeMethod(int...varargs,
intarg1,intarg2){//....}不定长度自变量◆宣告的参数必须设定在参数列的最后一个,下面的不定长度自变量publicvoidsomeMethod(int...varargs1,
int...varargs2){//....}publicvoidsomeMethod(SomeClass...somes){//....}不定长度自变量publicvoidsomeMethod(递归方法◆在方法中呼叫自身同名方法,而呼叫者本身会先被置入内存「堆栈」(Stack)中◆堆栈是一种「先进后出」(Firstin,lastout)的数据结构privatestaticintgcd(intm,intn){if(n==0)returnm;elsereturngcd(n,m%n);}递归方法◆在方法中呼叫自身同名方法,而呼叫者本身会先被置入内总结:◆Java中的数据类型大体上分为两种:原始数据类型和引用数据类型;◆变量是存储数据的基本单位;◆运算符和流程控制基本上与C相似;◆Java中数组是引用数据类型;◆数组必须由new关键字为其分配内存;总结:◆Java中的数据类型大体上分为两种:原始数据类型和引
JAVA变量与基础语法
java变量与基础语法课件◆标识符与关键字◆基本数据类型◆运算符与表达式◆程序的流程结构(分支,循环)◆数组◆方法◆基本的输入与输出本章目标◆标识符与关键字本章目标简单输出语句◆如果要将某些信息打印到屏幕上,就必须使用输出语句;◆使用System.out.println()实现换行输出效果;◆使用System.out.print()实现输出但不换行效果;◆无论输出什么类型的数据,只需将数据作为参数传递给它们即可,而无需像C语言中那样,使用%s、%d之类的控制字符,如:
inta=10;
floatf=3.14f; System.out.println(a); System.out.print(f); System.out.println('X');简单输出语句◆如果要将某些信息打印到屏幕上,就必须使用输出语简单输入语句◆使用System.in.read()实现输入效果;◆
read()函数的返回值是字符的Unicode值,是int类型的。public
static
voidmain(String[]args)
throwsIOException{
intcharc=System.in.read();System.out.printf("%c",charc);}◆
JDK5中还增加了Scanner类用于,可用于输入。简单输入语句◆使用System.in.read()实现输入效◆概念:
在编写程序时,对各种变量,方法和类等要素命名时使用的字符序列称为标识符。◆命名规则:只能由字母,下划线,美元符或数字组。只能由字母,下划线”_”和美元符”$”开头。不能是java中的关键字和保留字。◆说明:java中严格区分大小写,所以标识符也是大小写敏感的,但长度没有限制。约定俗成:java标识符的选取要做到”见名知其意”且不能为java语言中的关键字。定义时尽量不要与预定义标识符重名。标识符◆概念:标识符◆关键字:
java中一些赋予特定的含义,用做专门用途的字符串称为关键字(Keyword)。
说明:
在一些编辑器和IDE中会将关键字使用特殊方式和颜色标出来。在java中所有的关键字都是英文小写。
在java中goto和const虽然从未被使用,也当作关键字保留了下来。◆保留字:
不是关键字,但在程序中又不能作为用户定义标识符的字符串(reservedwords)。Java中的保留字有:true,false,和null。关键字与保留字◆关键字:关键字与保留字JAVA中的关键字abstractcontinuefornewswitchassert***defaultgoto*packagesynchronizedbooleandoifprivatethisbreakdoubleimplementsprotectedthrowbyteelseimportpublicthrowscaseenum****instanceofreturntransientcatchextendsintshorttrycharfinalinterfacestaticvoidclassfinallylongstrictfp**volatileconst*floatnativesuperwhileJAVA中的关键字abstractcontinueforne关键字说明*notused**addedin1.2***addedin1.4****addedin5.0关键字说明*notused**addedin1.2**标识符举例合法标识符非法标识符非法说明TeStHelloWorld含有空格A11A数字开头$ab@sb含有不合法字母@mainboolean关键字Truetrue保留字_boolean标识符举例合法标识符非法标识符非法说明TeStHelloW◆java的常量类型:
◆整型常量:十进制(12),十六进制(0x12),八进制(012)
◆长整型常量:13L◆单精度浮点数:5.1f,.4f,2e3f,0f◆双精度浮点数:5.1,.4,2e-3,0d说明:单精度浮点数和双精度浮点数统称为实型数。默认的小数为双精度浮点数。◆逻辑常量:true和falseJava常量◆java的常量类型:Java常量◆字符常量:‘a’,‘8’,'\u0027'‘\r‘表示接受键盘输入,相当于按下了回车键;‘\n‘是换行;‘\t‘是制表符,相当于table键;‘\b‘是退格键,相当于BackSpace;‘\‘‘是单引号,而‘\“‘是双引号;‘\\‘是一个斜杠“\”。
◆字符串常量:“helloproject”
注意点:
◆字符串常量和字符常量的区别。
◆注意常量这个名词的应用语境,有时候,常量这个名词应用在其他语境中表示值不可变的变量。参见”final关键字”。
Java常量◆字符常量:Java常量◆概念:变量是系统为程序分配的一块内存存储单元,用来存储各种数据类型的数据,根据所存储的变量值的数据类型不同,可以划分为各种不同数据类型的变量,其要素为变量名,数据类型,变量值和作用域。可以根据变量名称来访问其对应内存存储单元中的变量值.如下定义了一个变量:intage=20;(其在内存表示如右图)
Java变量age20age表示变量名20表示存储单元名称为age中的值◆概念:Java变量age20age表示变量名20表示存储◆请参见java变量按数据类型划分的图Java变量数据类型数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte,int,short,long)浮点类型(float,double)类(class)接口(interface)数组◆请参见java变量按数据类型划分的图Java变量数据类型数byte占用一个字节,数字大小为-27—27-1short占用两个字节,数字大小为-215—215-1int占用四个字节,数字大小为-231—231-1long占用八个字节,数字大小为-263—263-1float占用四个字节,数字大小为1.4E-45~3.4E+38,-1.4E-45~-3.4E+38。用二进制的指数形式表示一个浮点数的格式,如:101*22,101*2-3double占用八个字节,数字大小为4.9E-324~1.7E+308,-4.9E-324~-1.7E+308。char占两个字节,数字大小为0—216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。boolean占一个字节,其取值只有两个,true和false。JAVA变量字节大小及有效取值范围byte占用一个字节,数字大小为-27—27-1JAVA变量◆变量定义:
java程序中每个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:
dataTypevariableName[=variableValue];◆变量声明举例:
intage=20;
floatprice=20.06f;doubled1,d2,d3=0.456;intx=1,y;
y=x+3;注意:从本质上讲,变量其实是内存中的一小块内存单元,可以通过其名字(变量名)来访问这块区域,因此,每个变量使用前必须要先申请(声明),然后必须对其进行赋值,才可以使用。
Java变量的定义◆变量定义:Java变量的定义JAVA变量的默认值DataTypeDefaultValue(forfields)byte0short0int0long0Lfloat0.0fdouble0.0dchar'\u0000'String(oranyobject)
nullbooleanfalseJAVA变量的默认值DataTypeDefaultVal◆按被声明的位置划分
◆局部变量::方法的参数列表中和方法内部以及语句块中声明的变量。
◆成员变量:
方法外面且在类的里面声明的变量。◆静态成员变量:用static关键字修饰的成员变量。
注意:java语言中,类外面(与类对应的大括号外面)不能有变量的声明.◆按所属的数据类型划分
◆基本数据类型变量
◆引用数据类型变量Java变量的分类◆按被声明的位置划分Java变量的分类◆初始化问题:Java的成员变量在声明时,如果没有指定初始化的值,系统会根据成员变量的数据类型给出默认的值,但局部变量在声明时候没有初始化,则系统不会给出默认的初始化值,如果在使用前,没有对其进行初始华,在编译时就会报错。请看下面的代码:publicvoidmethodName(){intheight;intwidth=height+5;//编译出错,height还没有被初始化.}Java的局部变量和成员变量◆初始化问题:Java的局部变量和成员变量◆分类:自动类型转换(也叫隐式类型转换)强制类型转换(也叫显式类型转换)◆类型转换的原理及什么时候要用强制类型转换◆表达式的数据类型自动提升分析System.out.println(‘a’+1)与 System.out.println(“”+’a’+1)的区别。Java数据类型转化byteshortcharintlongfloatdouble◆分类:Java数据类型转化byteshortcharin◆变量的作用域指变量起作用的范围,说明变量在什么部分可以被访问;◆变量的生命周期是指变量在内存中存在的周期,即什么时候分配空间,什么时候销毁;◆变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。JAVA变量的生命周期与作用域◆变量的作用域指变量起作用的范围,说明变量在什么部分可以被publicclassTestScope{publicstaticvoidmain(String[]args){ 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变量的生命周期与作用域JAVA变量的生命周期与作用域◆运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种:算术运算符赋值运算符比较运算符逻辑运算符移位运算符java中的运算符◆运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般◆算术运算符◆算术运算符◆“+”除字符串相加功能外,还能把非字符串转换成字符串,如:“x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。intx=3510;x=x/1000*1000;实际运行结果是3000,想想为什么?
算术运算符的注意问题◆“+”除字符串相加功能外,还能把非字符串转换成字符串,如◆赋值运算符注1:在JAVA里可以把赋值语句连在一起,如:
x=y=z=5;
在这个语句中,所有三个变量都得到同样的值5。注2:x+=3等效于x=x+3,等于*=,-=,/=依此类推。◆赋值运算符注1:在JAVA里可以把赋值语句连在一起,如:◆比较运算符注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“==”不能误写成“=”
,切记!切记!◆比较运算符注1:比较运算符的结果都是boolean型,也◆逻辑运算符注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。注2:“&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右边的表达式。“|”和“||”的区别与“&”和“&&”的区别一样。◆逻辑运算符注1:逻辑运算符用于对boolean型结果的表◆publicclassTestAnd{publicstaticvoidmain(String[]args){intx=0;inty=3;if(x!=0&&y==y/x) System.out.println("y="+y);}}上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错“&”和“&&”的区别分析◆publicclassTestAnd“&”和“&&”的◆移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。 对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字。对于long型整数移位时a>>b,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a>>1;在一行语句中单独存在,毫无意义。x>>1的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y=1<<x;
移位运算注意事项◆移位运算符适用类型有byte、short、char、int◆运算符的优先级我们可以使用括号改变运算赋的优先级,分析inta=2;intb=a+3*a;语句的执行过程与inta=2;intb=(a+3)*a;语句的执行过程的区别。◆运算符的优先级我们可以使用括号改变运算赋的优先级,分析i◆对于inta=2;intb=a+3*a++;这样的语句,b最终等于多少呢?作者试验得到的结果是8。对于inta=2;intb=(a++)+3*a;这样的语句,b最终等于多少呢?如何避免多个运算符带来的问题◆对于inta=2;intb=a+3*a+◆与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。对于优先级顺序,读者不用刻意去记,有个印象就行如果你实在弄不清这些运算先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,这也是软件编码规范的一个要求。如何避免多个运算符带来的问题◆与其去思考其中的原因,我们还不如将上面的第二句改为几条语句◆表达式:表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。一些表达式的例子:◆语句:◆空语句:◆复合语句:{}◆代码块:{}表达式和语句◆表达式:表达式和语句◆顺序结构◆选择结构◆循环结构顾名思义,顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。程序的流程控制◆顺序结构程序的流程控制◆if(表达式)语句;◆if(表达式)语句1;
else语句2;◆if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式2)语句3;
… else语句n;if语句的选择结构◆if(表达式)语句;if语句的选择结构◆每个语句可以是使用{}组成的复合语句。◆条件表达式:
变量=布尔表达式?语句1:语句2;◆
If语句还可以嵌套使用
if(表达式1) if(表达式2)语句1;
else语句2;
esle if(表达式2)语句3;
else语句4; 嵌套时最好使用{}确定层次界限,举例说明。if语句的选择结构◆每个语句可以是使用{}组成的复合语句。if语句的选择结构◆Switch(表达式){ case常量表达式1:语句1;break; case常量表达式2:语句2;break; … case常量表达式n:语句n;break; default:语句n;}default语句是可选的,它接受除上面接受值的其他值,通俗的讲,就是谁也不要的都归它。case后面可以跟多个语句,这些语句可以不用大括号括起来。switch语句判断条件可接受int,byte,char,short型,不可以接受其他类型。一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的代码都会被执行,直到碰到break语句为止。我们可以利用这个特点来用同一段语句处理多个case条件。switch语句的选择结构◆Switch(表达式)switch语句的选择结构◆While(表达式)语句;intx=1;while(x<3){System.out.println("x="+x);x++;}脚下留心:while表达式的括号后面一定不要加“;”while循环语句◆While(表达式)语句;while循环语句◆do语句;while(表达式);publicclassTestDo{publicstaticvoidmain(String[]args){ intx=3; while(x==0) { System.out.println("ok1"); x++;}inty=3;do{ System.out.println("ok2"); y++;}while(y==0);}}do-while循环语句◆do语句;while(表达式);do-while◆编写一个程序,这个程序不断地读取从键盘上输入的字符,直到读到字符’q’时,程序结束。◆提示:调用System.in.read();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,你一定能体会到在什么样的情况下,用do-while循环语句比while循环语句方便。do-while循环语句◆编写一个程序,这个程序不断地读取从键盘上输入的字符,直到读◆for(表达式1;表达式2;表达式3)语句;◆for循环的三个表达式中的任意一个都可以省略,甚至是三个都可以省略,但是两个“;”是不能省略的。◆如下面几种写法是等价的:for(intx=1;x<10;x++){System.out.println("x="+x);}等效于for循环语句◆for(表达式1;表达式2;表达式3)语句;for循环intx=1;for(;x<10;x++){System.out.println("x="+x);}等效于intx=1;for(;x<10;){System.out.println("x="+x);x++;}等效于intx=1;for(;;){if(x>=10) break;System.out.println("x="+x);x++;}for循环语句intx=1;for循环语句◆break语句可以中止循环中的子语句和switch语句。一个无标号的break语句会把控制传给当前(最内)循环(while,do.for或Switch)的下一条语句。如果有标号,控制会被传递给当前方法中的带有这一标号的语句。如:st:while(true){while(true){ breakst;}}break语句◆break语句可以中止循环中的子语句和switch语句。一◆continue语句只能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乙肝梅毒艾滋培训资料
- 项目部消防安全教育培训
- 金融事件分析
- 建筑识图与构造习题答案
- 辽宁省抚顺市新抚区2024-2025学年七年级上学期11月期中语文试题(含答案)
- 2024-2025学年江苏省无锡市新城中学九年级(上)10月月考数学试卷(含答案)
- 全球自动凝胶皂液器市场供需潜力及投资策略研究报告2024-2030年
- 四川省成都市2024-2025学年八年级上学期期中考试英语试卷(四)
- 高中语文第2单元孟子蚜第6课我善养吾浩然之气课件新人教版选修先秦诸子蚜
- 自由搏击基础理论知识单选题100道及答案解析
- 雅培奶粉的营销策划
- 图解2023《铸牢中华民族共同体意识》课件
- 2024年麻疹ppt课件完整版x
- 装饰公司企业策划及发展规划
- 别睡 这里有蛇 一个语言学家和人类学家在亚马孙丛林深处
- 儿科护理学讲课课件
- 呼吸系统疾病的分类与鉴别诊断
- 海鲜餐饮店计划书
- 灭火器检查记录表(舜杰)
- 江苏省集中式饮用水源突发污染事件应急预案
- 雨污分流监理实施细则
评论
0/150
提交评论