java变量与基础语法.ppt

上传人:牧羊曲112 文档编号:6509671 上传时间:2023-11-07 格式:PPT 页数:67 大小:334.50KB
返回 下载 相关 举报
java变量与基础语法.ppt_第1页
第1页 / 共67页
java变量与基础语法.ppt_第2页
第2页 / 共67页
java变量与基础语法.ppt_第3页
第3页 / 共67页
java变量与基础语法.ppt_第4页
第4页 / 共67页
java变量与基础语法.ppt_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《java变量与基础语法.ppt》由会员分享,可在线阅读,更多相关《java变量与基础语法.ppt(67页珍藏版)》请在三一办公上搜索。

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.out.println(

2、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类用于,可用于输入。,概念:在编写程序时,对各种变量,方法和类等要素命名时使用的字符序列称为标识符。命名规则:只能由字母,下划线,美元符或数字组。只能由字母,下划线”_”和美元符”$”开头。不能是java中的关

3、键字和保留字。说明:java中严格区分大小写,所以标识符也是大小写敏感的,但长度没有限制。约定俗成:java标识符的选取要做到”见名知其意”且不能为java语言中的关键字。定义时尽量不要与预定义标识符重名。,标识符,关键字:java中一些赋予特定的含义,用做专门用途的字符串称为关键字(Keyword)。说明:在一些编辑器和IDE中会将关键字使用特殊方式和颜色标出来。在 java 中 所 有的关键字都是英文小写。在java 中 goto和const 虽然从未被使用,也当作关键字保留了下来。保留字:不是关键字,但在程序中又不能作为用户定义标识符的字符串(reserved words)。Java中的

4、保留字有:true,false,和 null。,关键字与保留字,JAVA中的关键字,关键字说明,标识符举例,java的常量类型:整型常量:十进制(12),十六进制(0 x12),八进制(012)长整型常量:13L 单精度浮点数:5.1f,.4f,2e3f,0f 双精度浮点数:5.1,.4,2e-3,0d说明:单精度浮点数和双精度浮点数统称为实型数。默认的小数为双精度浮点数。逻辑常量:true 和 false,Java常量,字符常量:a,8,u0027 r表示接受键盘输入,相当于按下了回车键;n是换行;t是制表符,相当于table键;b是退格键,相当于Back Space;是单引号,而“是双引号

5、;是一个斜杠“”。字符串常量:“hello project”注意点:字符串常量和字符常量的区别。注意常量这个名词的应用语境,有时候,常量这个名词应用在其他语境中表示值不可变的变量。参见”final关键字”。,Java常量,概念:变量是系统为程序分配的一块内存存储单元,用来存储各种数据类型的数据,根据所存储的变量值的数据类型不同,可以划分为各种不同数据类型的变量,其要素为变量名,数据类型,变量值和作用域。可以根据变量名称来访问其对应内存存储单元中的变量值.如下定义了一个变量:int age=20;(其在内存表示如右图),Java变量,请参见java变量按数据类型划分的图,Java变量数据类型,b

6、yte占用一个字节,数字大小为-2727-1short占用两个字节,数字大小为-215215-1 int占用四个字节,数字大小为-231231-1 long占用八个字节,数字大小为-263263-1 float占用四个字节,数字大小为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编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量

7、。boolean占一个字节,其取值只有两个,true和false。,JAVA变量字节大小及有效取值范围,变量定义:java程序中每个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:dataType variableName=variableValue;变量声明举例:int age=20;float price=20.06f;double d1,d2,d3=0.456;int x=1,y;y=x+3;注意:从本质上讲,变量其实是内存中的一小块内存单元,可以通过其名字(变量名)来访问这块区域,因此,每个变量使用前必须要先申请(声明),然后必须对其进行赋值,才可以使用。,Java变量的定

8、义,JAVA变量的默认值,按被声明的位置划分 局部变量::方法的参数列表中和方法内部以及语句块中声明的变量。成员变量:方法外面且在类的里面声明的变量。静态成员变量:用static关键字修饰的成员变量。注意:java语言中,类外面(与类对应的大括号外面)不能有变量的声明.按所属的数据类型划分 基本数据类型变量 引用数据类型变量,Java变量的分类,初始化问题:Java的成员变量在声明时,如果没有指定初始化的值,系统会根据成员变量的数据类型给出默认的值,但局部变量在声明时候没有初始化,则系统不会给出默认的初始化值,如果在使用前,没有对其进行初始华,在编译时就会报错。请看下面的代码:public v

9、oid methodName()int height;int width=height+5;/编译出错,height还没有被初始化.,Java的局部变量和成员变量,分类:自动类型转换(也叫隐式类型转换)强制类型转换(也叫显式类型转换)类型转换的原理及什么时候要用强制类型转换表达式的数据类型自动提升分析 System.out.println(a+1)与 System.out.println(“”+a+1)的区别。,Java数据类型转化,变量 的作用域指变量起作用的范围,说明变量在什么部分可以被访问;变量的生命周期是指变量在内存中存在的周期,即什么时候分配空间,什么时候销毁;变量要先定义,后使用,

10、但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。,JAVA变量的生命周期与作用域,public class TestScope public static void main(String args)int x=12;int q=96;/x和q都可用 int x=3;/错误的定义,Java中不允许有这种嵌套定义 System.out.println(x is+x);System.out.println(q is+q);q=x;/*错误的行,只有x可用,q 超出了作用域范围*/System.out.prin

11、tln(x is+x);,JAVA变量的生命周期与作用域,运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种:算术运算符赋值运算符比较运算符逻辑运算符移位运算符,java中的运算符,算术运算符,“+”除字符串相加功能外,还能把非字符串转换成字符串,如:“x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。int x=3510;x=x/1000*1000;实际运行结果是3000,想想为什么

12、?,算术运算符的注意问题,赋值运算符,注1:在JAVA里可以把赋值语句连在一起,如:x=y=z=5;在这个语句中,所有三个变量都得到同样的值5。注2:x+=3等效于x=x+3,等于*=,-=,/=依此类推。,比较运算符,注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“=”不能误写成“=”,切记!切记!,逻辑运算符,注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。注2:“&”和“&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&”的左边为fa

13、lse,则将不会计算其右边的表达式。“|”和“|”的区别与“&”和“&”的区别一样。,public class TestAnd public static void main(String args)int x=0;int y=3;if(x!=0 上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错,“&”和“&”的区别分析,移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移

14、位。对于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a33和a1结果是一样的,a32的结果还是a原来的数字。对于long型整数移位时ab,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a1;在一行语句中单独存在,毫无意义。x1的结果和x/2的结果是一样的,x2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y=1 x;,移位运算注意事项,运算符的优先级,我们可以使用括号改变运算赋的优先级,分析int a=2;int b=a+3*a

15、;语句的执行过程 与int a=2;int b=(a+3)*a;语句的执行过程的区别。,对于int a=2;int b=a+3*a+;这样的语句,b最终等于多少呢?作者试验得到的结果是8。对于int a=2;int b=(a+)+3*a;这样的语句,b最终等于多少呢?,如何避免多个运算符带来的问题,与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。对于优先级顺序,读者不用刻意

16、去记,有个印象就行如果你实在弄不清这些运算先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,这也是软件编码规范的一个要求。,如何避免多个运算符带来的问题,表达式:表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。一些表达式的例子:语句:空语句:复合语句:代码块:,表达式和语句,顺序结构选择结构循环结构 顾名思义,顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。,程序的流程控制,if(表达式)语句;if(表达式)语句1;else 语句2;i

17、f(表达式1)语句1;else if(表达式2)语句2;else if(表达式2)语句3;else 语句n;,if语句的选择结构,每个语句可以是使用 组成的复合语句。条件表达式:变量 布尔表达式?语句1:语句2;If语句还可以嵌套使用if(表达式1)if(表达式2)语句1;else语句2;esleif(表达式2)语句3;else语句4;嵌套时最好使用确定层次界限,举例说明。,if语句的选择结构,Switch(表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n;default语句是可选

18、的,它接受除上面接受值的其他值,通俗的讲,就是谁也不要的都归它。case后面可以跟多个语句,这些语句可以不用大括号括起来。switch语句判断条件可接受int,byte,char,short型,不可以接受其他类型。一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的代码都会被执行,直到碰到break语句为止。我们可以利用这个特点来用同一段语句处理多个case条件。,switch语句的选择结构,While(表达式)语句;int x=1;while(x3)System.out.println(x=+x);x+;脚下留心:while表

19、达式的括号后面一定不要加“;”,while循环语句,do 语句;while(表达式);public class TestDopublic static void main(String args)int x=3;while(x=0)System.out.println(ok1);x+;int y=3;do System.out.println(ok2);y+;while(y=0);,do-while循环语句,编写一个程序,这个程序不断地读取从键盘上输入的字符,直到读到字符q时,程序结束。提示:调用System.in.read();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,你一定能

20、体会到在什么样的情况下,用do-while循环语句比while循环语句方便。,do-while循环语句,for(表达式1;表达式2;表达式3)语句;for循环的三个表达式中的任意一个都可以省略,甚至是三个都可以省略,但是两个“;”是不能省略的。如下面几种写法是等价的:for(int x=1;x10;x+)System.out.println(x=+x);等效于,for循环语句,int x=1;for(;x=10)break;System.out.println(x=+x);x+;,for循环语句,break语句可以中止循环中的子语句和switch语句。一个无标号的break语句会把控制传给当前

21、(最内)循环(while,dofor或Switch)的下一条语句。如果有标号,控制会被传递给当前方法中的带有这一标号的语句。如:st:while(true)while(true)break st;,break语句,continue语句只能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句块,接着执行下一次循环。用continue语句的打印出 0到10之间的所有奇数的程序例子。for(int i=0;i10;i+)if(i%2=0)continue;System.out.println(i);,continue语句,Java中的原始

22、数据类型与C语言中的基本数据类型一样,其变量都是在栈中分配空间;而除了8种原始数据类型以外,其它的任何数据都不可以在栈中分配,只能到堆中开辟空间,而在堆中分配的空间又只能通过指针访问;通过指针访问堆内存的方式,在Java中被称作引用数据类型;可以认为,Java中的引用就类似于C语言中的指针,只是对指针进行了一定程度上的包装,避免了因直接操作指针而造成的数据意外损坏,从而导致程序错误的情况。,Java中的内存分配,数组用于将相同类型的数据存储在连续的存储单元中;可以通过指定数组的名称和长度来声明数组;一旦声明数组的大小,就不能再修改;数组元素通过数组名和索引来访问,索引从0开始;数组可以是一维,

23、也可以是多维。,数组,在Java中,不允许将数组分配在栈内存中,只能分配在堆内存中;Java中没有类似于malloc、calloc、realloc和free等函数,取而代之的是new关键字;new是Java中内置的操作符;new操作符用来从堆中分配指定类型的内存空间,并返回相应类型的引用,其作用类似于malloc函数。,new关键字,Java中声明数组的几种方式,/仅声明数组的引用,但没有分配内存空间float fAry;/声明数组的同时,根据指定的长度分配内存,但数组中没有值char chAry=new char10;/声明数组并分配内存,同时将其初始化int ary1=new int1,2

24、,3,4,5;/与前一种方式相同,仅仅只是语法相对简略int ary2=1,2,3,4,5;,C语言中,不可以将数组直接赋值给另一个数组;在Java中,语法上允许这样做,但实际得到的效果是两个数组引用指向同一块内存。int ary1=2,4,6,8,10;int ary2;ary2=ary1;,数组之间赋值,在Java中,程序员可以不再关注数组的长度,数组自带的length属性将负责保管数组的长度;C语言不检查数组的边界,数组索引完全由程序员掌握;Java对数组下标越界情况强加约束;如果试图访问不在有效索引以内的元素,将会引发运行错误。,关于数组长度,数组赋值示例,public class A

25、rrayDemo public static void main(String args)int 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(int i=0;i ary2.len

26、gth;i+)System.out.println(ary2i);,如何理解多维数组,类似我们的棋盘。java 中并没有真正的多维数组,只有数组的数组,Java中多维数组不一定是规则矩阵形式。,多维数组,多维数组中元素的引用方式,如:x12。规则矩阵数组可以在一条语句中产生,如:int xx=new int23;多维数组的静态初始化,如:int xx=3,2,7,1,5,6;,多维数组,定义一个多维数组int xx;xx=new int3;xx0=new int3;xx1=new int2;,多维数组,使用循环作数组复制int arr1=1,2,3,4,5;int arr2=new int5;

27、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();,数组复制,不可用=比较两个数组的元素值是否相等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循环(Enhanced forLoop)for(type

28、 element:array)System.out.println(element).J2SE 5.0之前 int arr=1,2,3,4,5;for(int i=0;i arr.length;i+)System.out.println(arri);在J2SE5.0之后 int arr=1,2,3,4,5;for(int element:arr)System.out.println(element);,foreach与数组,如果是对象的话二维数组,String names=caterpillar,momor,bush;for(String name:names)System.out.print

29、ln(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 返回值;其中:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。如没有返回值,则为void。实参:调用函数时实际传给函数形式参数

30、的数据。,函数,java中函数参数的传递和C语言中一样,都是值传递。class testpass public static void swap(int x,int y)int a=x;x=y;y=a;System.out.println(“x=”+x+”y=”+y);public static void man()int a=2,b=3;swap(a,b);System.out.println(“a=”+a+”b=”+b);,函数参数的传递,Java语言中参数传递的规则,和其它程序设计语言类似,Java语言的参数传递也分为两种:按值传递(by value)适用范围:8种基本数据类型、Stri

31、ng对象 特点:在内存中复制一份数据,把复制后的数据传递到方法内部 作用:在方法内部改变参数的值,外部数据不会跟着发生改变按址传递(by address)适用范围:数组、除String以外的其他所有类型的对象 特点:将对象的地址传递到方法内部 作用:在方法内部修改对象的内容,外部数据也会跟着发生改变,Java语言中的参数传递,以上特性是Java语言中的规定,在语法上无法指定参数传递是按值传递还是按址传递,但是可以通过下面的变换实现:对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现。对于按地址传递的参数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创

32、建该对象实现。,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 arg1,int arg2,int.varargs)/.,public void someMethod

33、(int.varargs,int arg1,int arg2)/.,不定长度自变量,public void someMethod(int.varargs1,int.varargs2)/.,public void someMethod(SomeClass.somes)/.,递归方法,在方法中呼叫自身同名方法,而呼叫者本身会先被置入内存堆栈(Stack)中堆栈是一种先进后出(First in,lastout)的数据结构,private static int gcd(int m,int n)if(n=0)return m;else return gcd(n,m%n);,总结:,Java中的数据类型大体上分为两种:原始数据类型和引用数据类型;变量是存储数据的基本单位;运算符和流程控制基本上与C相似;Java中数组是引用数据类型;数组必须由new关键字为其分配内存;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号