java变量与基础语法.ppt_第1页
java变量与基础语法.ppt_第2页
java变量与基础语法.ppt_第3页
java变量与基础语法.ppt_第4页
java变量与基础语法.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

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); S

2、ystem.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、,但在程序中又不能作为用户定义标识符的字符串(reserved words)。Java中的保留字有: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表示接受键盘输

5、入,相当于按下了回车键; n是换行; t是制表符,相当于table键; b是退格键,相当于Back Space; 是单引号,而“是双引号; 是一个斜杠“”。 字符串常量: “hello project” 注意点: 字符串常量和字符常量的区别。 注意常量这个名词的应用语境,有时候,常量这个名词应用在其他语境中表示值不可变的变量。参见”final关键字”。,Java常量, 概念: 变量是系统为程序分配的一块内存存储单元, 用来存储各种数据类型的数据,根据所存储的变量值的数据类型不同,可以划分为各种不同数据类型的变量,其要素为变量名,数据类型,变量值和作用域。可以根据变量名称来访问其对应内存存储单元

6、中的变量值.如下定义了一个变量: int age = 20;(其在内存表示如右图),Java变量,请参见java变量按数据类型划分的图,Java变量数据类型,byte占用一个字节,数字大小为-2727-1 short占用两个字节,数字大小为-215215-1 int占用四个字节,数字大小为-231231-1 long占用八个字节,数字大小为-263263-1 float占用四个字节,数字大小为1.4E-453.4E+38 , -1.4E-45-3.4E+38 。用二进制的指数形式表示一个浮点数的格式,如:101*22 , 101*2-3 double占用八个字节,数字大小为4.9E-3241.

7、7E+308, -4.9E-324-1.7E+308 。 char占两个字节,数字大小为0216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。 boolean占一个字节,其取值只有两个,true和false。,JAVA变量字节大小及有效取值范围,变量定义: java程序中每个变量都属于特定的数据类型, 在使用前必须对其声明,声明格式为: dataType variableName = variableValue; 变量声明举例: int age = 20; float price = 20.06f; double d1,d2,d3 = 0.456; in

8、t x = 1,y; y = x + 3; 注意: 从本质上讲,变量其实是内存中的一小块内存单元,可以通过其名字(变量名)来访问这块区域,因此,每个变量使用前必须要先申请(声明),然后必须对其进行赋值,才可以使用。,Java变量的定义,JAVA变量的默认值, 按被声明的位置划分 局部变量 ::方法的参数列表中和方法内部以及语句块中声明的变量。 成员变量: 方法外面且在类的里面声明的变量。 静态成员变量:用static关键字修饰的成员变量。 注意: java语言中,类外面(与类对应的大括号外面)不能有变量的声明. 按所属的数据类型划分 基本数据类型变量 引用数据类型变量,Java变量的分类,初始

9、化问题: Java的成员变量在声明时,如果没有指定初始化的值,系统会根据成员变量的数据类型给出默认的值,但局部变量在声明时候没有初始化,则系统不会给出默认的初始化值,如果在使用前,没有对其进行初始华,在编译时就会报错。请看下面的代码: public void methodName() int height; int width = height + 5; /编译出错,height还没有被初始化. ,Java的局部变量和成员变量,分类: 自动类型转换(也叫隐式类型转换) 强制类型转换(也叫显式类型转换) 类型转换的原理及什么时候要用强制类型转换 表达式的数据类型自动提升 分析 System.ou

10、t.println(a+1)与 System.out.println(“”+a+1) 的区别。,Java数据类型转化,变量 的作用域指变量起作用的范围,说明变量在什么部分可以被访问; 变量的生命周期是指变量在内存中存在的周期,即什么时候分配空间,什么时候销毁; 变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。,JAVA变量的生命周期与作用域,public class TestScope public static void main(String args) int x = 12;

11、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.println(x is +x); ,JAVA变量的生命周期与作用域,运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成 。运算符共分以下几种: 算术运算符 赋值运算符 比较运算符 逻辑运算符 移位运算符,java中的运算符,算术运算符,“+”除字符串相加

12、功能外,还能把非字符串转换成字符串 ,如: “x”+123;的结果是“x123” 。 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 int x=3510;x=x/1000*1000;实际运行结果是3000 ,想想为什么?,算术运算符的注意问题,赋值运算符,注1:在JAVA里可以把赋值语句连在一起,如: x = y = z = 5 ; 在这个语句中,所有三个变量都得到同样的值5。 注2 :x += 3等效于x = x + 3,等于*= ,-=,/=依此类推。,

13、比较运算符,注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。 注2:比较运算符“=”不能误写成“=” ,切记!切记!,逻辑运算符,注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型 。 注2:“ int y=3; if(x!=0 上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“int b = a + 3*a;语句的执行过程 与int a =2;int b =( a + 3)*a;语句的执行过程的区别 。,对于int a =

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

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

16、e 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;

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

18、ntln(x=+x); x+; 脚下留心:while表达式的括号后面一定不要加“;”,while循环语句,do 语句 ; while (表达式); public class TestDo public 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.i

19、n.read();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,你一定能体会到在什么样的情况下,用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循环

20、语句,break语句可以中止循环中的子语句和switch语句。一个无标号的break语句会把控制传给当前(最内)循环(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+) i

21、f(i%2=0) continue; System.out.println(i); ,continue语句, Java中的原始数据类型与C语言中的基本数据类型一样,其变量都是在栈中分配空间; 而除了8种原始数据类型以外,其它的任何数据都不可以在栈中分配,只能到堆中开辟空间,而在堆中分配的空间又只能通过指针访问; 通过指针访问堆内存的方式,在Java中被称作引用数据类型; 可以认为,Java中的引用就类似于C语言中的指针,只是对指针进行了一定程度上的包装,避免了因直接操作指针而造成的数据意外损坏,从而导致程序错误的情况。,Java中的内存分配,数组用于将相同类型的数据存储在连续的存储单元中; 可

22、以通过指定数组的名称和长度来声明数组; 一旦声明数组的大小,就不能再修改; 数组元素通过数组名和索引来访问,索引从0开始; 数组可以是一维,也可以是多维。,数组,在Java中,不允许将数组分配在栈内存中,只能分配在堆内存中; Java中没有类似于malloc、calloc、realloc和free等函数,取而代之的是new关键字; new是Java中内置的操作符; new操作符用来从堆中分配指定类型的内存空间,并返回相应类型的引用,其作用类似于malloc函数。,new关键字,Java中声明数组的几种方式,/仅声明数组的引用,但没有分配内存空间 float fAry; /声明数组的同时,根据指

23、定的长度分配内存,但数组中没有值 char chAry = new char10; /声明数组并分配内存,同时将其初始化 int ary1 = new int1, 2, 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属性将负责保

24、管数组的长度; C语言不检查数组的边界,数组索引完全由程序员掌握; Java对数组下标越界情况强加约束; 如果试图访问不在有效索引以内的元素,将会引发运行错误。,关于数组长度,数组赋值示例,public class ArrayDemo 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

25、中的元素:); for (int i = 0; i ary1.length; i+) System.out.println(ary1i); /打印出数组2中的元素 System.out.println(数组2中的元素:); for (int i = 0; i ary2.length; i+) System.out.println(ary2i); ,如何理解多维数组,类似我们的棋盘。 java 中并没有真正的多维数组,只有数组的数组, Java中多维数组不一定是规则矩阵形式。,多维数组,多维数组中元素的引用方式,如:x12。 规则矩阵数组可以在一条语句中产生,如:int xx=new int23

26、; 多维数组的静态初始化 ,如: 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; 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();,数组复制,

27、不可用=比较两个数组的元素值是否相等 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 element : array) System.out.println(element). J2SE 5.0之前 int arr = 1, 2, 3, 4, 5; for(int i = 0;

28、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.println(name);,int arr = 1, 2, 3,4, 5, 6,7, 8, 9; for(int row : arr

29、) for(int element : row) System.out.println(element); ,函数(子程序)的概念与作用。 定义一个函数的格式: 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.) 程序代码 return 返回值; 其中: 形式参数:在方法被调用时用于接收外部传入的数据的变量。 参数类型:就是该形式参数的数据类型。 返回值:方法在执行完毕后返还给调用它的程序的数据。 返回值类型:函数要返回的结果的数据类型。如没有返回值,则为void。 实参:调用函数时实际传给函数形式参数的数据。,函数,java中函数参数的传递和C语言中一样,都是值传递。 cl

30、ass 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种基本数据类型、String对象 特点:在内存中复制一份数据,把复制后的数据传递到方法内部 作用:在方法内

温馨提示

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

评论

0/150

提交评论