教学课件-第2章java语言基础.ppt_第1页
教学课件-第2章java语言基础.ppt_第2页
教学课件-第2章java语言基础.ppt_第3页
教学课件-第2章java语言基础.ppt_第4页
教学课件-第2章java语言基础.ppt_第5页
已阅读5页,还剩163页未读 继续免费阅读

下载本文档

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

文档简介

1,第2章 java语言基础,java标识符、关键字 java数据类型 变量常量 运算符和表达式 数据类型转换 程序控制结构,内 容 提 要,7/10/2019,Java标识符,在Java编程语言中, 标识符可以理解为名字。在Java语言中,常量名、变量名、类名、对象名等都是标识符。标识符的命名遵守以下规则: 标识符由字母、数字、下划线或美元符$组成。 标识符的第一个字符必须是字母、下划线或美元符,从第二个字符开始也可以是数字。虽然Java语言允许以下划线_或美元符$为第一个字符,但并不提倡使用下划线或美元符$作为第一个字符。 3. 不能以Java的关键字作为标识符。 4. Java语言对大小写是敏感的,即大写字符与小写字符被看作是不同的字符。Java中,Count与count是不同的两个标识符。 5. 在命名时,最好遵循Java推荐的命名规范。如符号常量全部采用大写字母,类名首字母大写,属性与方法名称首字母小写等。,7/10/2019,Java标识符的命名规则,6.标识符可以任意长,在机器内部用Unicode字符集表示。实际命名时不宜过长。 7. 标识符允许包含关键字作为它的一部分。例如,虽然this是一个关键字,但thisVariable却是一个有效的标识符。 8.命名的标识符最好能够反映其意义,即能够“见名知义”,从而提高程序的可读性。,7/10/2019,Java关键字,关键字也称为保留字,是Java 语言本身使用的、被赋予特定含义的一类标识符。用户只能按照系统的规定来使用它们,不允许对它们进行修改或自行定义,也不允许将它们做为标识符来使用 关键字全部为小写字母表示的完整的英文单词或简写。根据关键字的用途,可将它们划分为以下类型:数据类型、语句、修饰符、方法、类、接口和包等,7/10/2019,Java关键字,7/10/2019,7/10/2019,8,练习题,下面哪些是合法的标识符: $persons TwoUsers *point this endline,java标识符、关键字 java数据类型 变量常量 运算符和表达式 数据类型转换 程序控制结构,内 容 提 要,7/10/2019,Java数据类型,数据处理是使用计算机语言进行编程的主要目的,但现实生活中的数据多种多样,很难统一处理。为了解决这个问题,Java语言把数据进行分类,再根据各种类型数据的特点做出相应的处理。数据类型是根据变量或常量所占内存空间的大小以及类型来区分的。在Java语言中数据类型可以分为基本数据类型和对象数据类型(引用类型)两类。 在Java语言中,所有数据都必须严格定义其数据类型,而且所有的变量都必须有初始值或默认值。,7/10/2019,基本数据类型,Java语言中的基本数据类型可以分为以下四种:整数类型、浮点类型、逻辑类型(布尔类型)和字符类型。,7/10/2019,整数类型,整数类型:整数类型简称整型。不含小数点的数字为整数类型数据,例如:-14、98、213、0等。整数类型又根据数据所占内存空间的大小和数字的范围分为字节型(byte)、短整型(short)、整型(int)和长整型(long)四种。 字节型:字节型占一个字节的内存空间,取值范围为:-128127, 即-27 27-1。它使用关键字 byte 来定义字节整型变量。例如: byte x=33。 短整型:短整型占两个字节的内存空间,取值范围为-32768 32767, 即-215 215-1。它使用关键字 short 来定义短整型变量,例如:short x=456 。 整型:整型占四个字节的内存空间,取值范围为-2147483648 2147483647,即-231 231-1。它用关键字 int 来定义整型变量,例如:int x=45。 长整型:长整型占八个字节的内存空间,取值范围为 :-9223372036854775808L9223372036854775807L,即-263 263-1。它使用关键字 long 来定义长型整型变量,在声明长整型时,在整数后要加“L”或“l”以示区别。例如:long x=43L 。,7/10/2019,整数类型,默认整数类属于int类型,除非在其后直接跟着一个字母“L”或者“l”,L表示一个long值。 byte smallOne=7; short count=10000; int score=100; long bigone=999,largeOne; Java语言中的整数类型可使用十进制、八进制和十六进制表示。首位为“0”表示八进制的数值,首位为“0x”表示十六进制的数值。整数类型默认为int类型。,7/10/2019,浮点类型,浮点类型:浮点类型又称为实型,浮点类型是指那些包含有小数部分的数字,例如: -38.2、32.00、87.143等。浮点类型根据数据所占内存空间的大小和数字的范围分为单精度浮点型(float)和双精度型浮点型(double)两种。,7/10/2019,单精度浮点型,单精度浮点型占四个字节的内存空间,取值范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。 它使用关键字 float 来定义单精度浮点型变量,例如:float x=123.5f。 单精度浮点型的数据其最后一个字符之后必须加“F”或“f”,如果数据的最后一个字符后没有“F”或“f”,则默认为double类型的数值。例如:1233.539f, 1289.97F, 123.0f(f 不可省略)。 使用关键字 float 来定义单精度浮点型变量时,如果变量赋值时没加上后缀f,就会出错,例如:float x=123.5 (出错)。,7/10/2019,双精度型浮点型,双精度浮点型占八个字节的内存空间,取值范围对于负数从-1.79769313486232E308 到 -4.94065645841247E-324,对于正数从4.94065645841247E-324到1.79769313486232E308。 它使用关键字 double 来定义变量,例如:double x=12389.5439d(d可以省略)。 一个浮点数默认为double型。在一个浮点数后加字母F或f,表示float型。常量值3.45的类型是double;3.45F的类型是float。,7/10/2019,逻辑类型,逻辑类型:逻辑类型占一个字节的内存空间。逻辑型数据只有两个值true和false(必须小写),Java中的逻辑型数据和数字之间不能相互转换,即false和true不对应于任何0或非0的整数值。 逻辑型变量的定义如下:boolean x=true。,7/10/2019,字符类型,字符类型:字符类型用两个字节表示一个字符。Java中的字符型数据是16位无符号型数据,它表示Unicode集,而不仅仅是ASCII集。 它使用关键字 char 来定义字符型变量,在定义字符类型字符时,要用一对单引号将字符括起来。例如:char c=x。,7/10/2019,转义字符,为了更方便地在字符串中表示一些特殊字符,Java定义了转义字符“”,紧接在转义字符右边的字符被解释成其他含义,或者说“”及其右边的字符一起代表一个特殊的字符。这种方法给编程带来方便。下表给出了转义字符代表的意义。,7/10/2019,引用类型(后面讲),引用类型又分为: 数组 字符串 类 接口,7/10/2019,字符串类型,字符串类型的数据是用一对双引号括起来的一串字符,例如:“hello”、“你好!”。Java没有提供内置的字符串类型,标准Java库中包含了一个预定义类,称作String。每个用双引号封闭的字符串都是String类的一个实例。 例如: String s=“This is a string”; String g=“你好”; String str=“”;/一个空字符串 字符串类型是对象类型中的一种,但是它与基本类型数据在定义格式方面都非常相似。,7/10/2019,22,小测验,指出下面的错误声明,说明原因 char ch = AB; char ch1= “A”; 下列代表单精度浮点数的是( ) A) 652 B) 3.4457D C) 0.298f D) 0L 4.下列代表双精度浮点数的是( ) A) 652 B) 3.4457D C) 0.298f D) 0L,/单引号内只能包含一个字符,/双引号表示界定的是一个字符串常量,java标识符、关键字 java数据类型 变量常量 运算符和表达式 数据类型转换 程序控制结构,内 容 提 要,7/10/2019,变量和常量,变量:变量是在程序运行过程中其值可以改变的量,通常用来保存计算结果或中间数据。变量其实就是内存中的一小块空间,它用来存储一个数据。可以放一个数据进去,也可以取走一个数据。内存中可以有许多个这样的小块空间,为了以示区别,给它们起不同的名字,这个名字就叫变量名。 Java语言中的变量必须先声明后使用,声明了一个变量后,系统会自动给变量赋一个默认的初始值。定义变量包括指明变量的数据类型和变量名,并且为变量赋初始值。 变量的声明 Java语言的变量声明格式为:数据类型 变量名列表; 例如:char c;/声明 一个字符型变量c int x, y; /声明 x, y两个整型变量 float a, b, e; /声明a, b, e三个单精度浮点型变量,7/10/2019,变量,以下是关于变量声明的几点说明: 变量名必须是合法的Java标识符,并且具有一定的含义,以增加程序的可读性。 变量类型可以是前面所讲的Java任意一种基本数据类型。 变量的声明中多个变量间用逗号隔开。例如: float a, b, c;,7/10/2019,变量, 为变量赋初值 声明了一个变量后,系统会自动给变量赋一个默认的初始值,但一般要重新赋值,具体做法是使用赋值语句,语法格式为: 变量名 = 数据; 以下语句是为上面定义的整型变量x、y和字符变量c以及单精度浮点型变量a,b,e赋初值的语句。 c = a; x =44; y = 123; a = 1.4f; b = 33.2f; e=456.8f;,7/10/2019,变量, 声明变量和给变量赋初值合并一起使用。其格式为:数据类型 变量名=数据; 例如:int a = 100; 相当于以下两条语句。 int a; a = 100;,7/10/2019,变量, 一次声明多个同样类型的变量并且赋初值。其格式为: 数据类型 变量名1=数据,变量名2=数据, ,变量名n=数据; 例如:char a = a,b = b,c =c;或者只给一部分变量赋值,例如:char a,b = b, c;,7/10/2019,变量的分类,变量被声明与初始化后,只是暂存在内存中,当变量不再被程序使用时,将被销毁并释放所占用的内存空间,也就是说变量有它的生命周期。每个变量的生命长短和它的有效范围相关,所谓有效范围就是变量在程序中起作用的区域,若超出该区域则无法访问该变量。变量的有效范围也叫变量的作用域。变量按照作用域的不同分为:,7/10/2019,变量的分类,类成员变量,它的作用域是整个类。又可以细分为静态变量和实例变量。 方法体内的局部变量是在方法体内声明的变量,其作用域为方法体内。 方法的形式参数也属于局部变量,其作用域为方法体内。在方法体内声明与方法参数重名的局部变量将会产生编译错误。 语句块局部变量是在控制结构块中声明的变量,例如if、for等语句中声明的变量,其作用域为控制结构块内。在不同的语句块中声明的同名局部变量,其作用域不同,故不冲突。但方法体局部变量和方法的形式参数的作用域包括该方法中的控制语句块,故在方法体内的控制语句块中声明与方法体局部变量或方法形式参数同名的局部变量将产生编译错误。 异常处理参数的作用域,是它所在的异常处理部分。,7/10/2019,变量的初始化,在Java语言中,所有的变量必须要首先声明,然后才能使用,而且访问一个未经初始化的局部变量,将导致编译错误。 变量初始化: 类成员变量自动初始化 与成员变量不同的是,局部变量除了形参之外,都必须显式初始化。也就是说,必须先给方法局部变量和语句块块局部变量指定初始值,否则不可以访问它们。 形参的作用域是整个方法体内有效,而且形参也无须显式初始化。形参的初始化在调用该方法时由系统完成。当通过类或对象调用某个方法时系统会在该方法栈区内为所有形参分配内存空间并将实参的值赋给对应的形参,这样就完成了形参的初始化。,7/10/2019,变量的初始化,4. 把初始化语句放在只有if块的条件判断语句(例子:Duo.java)中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。 5. 异常处理参数的作用域,是它所在的异常处理部分。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译不通过。如果在 catch或finally里也有,则可以通过编译。,7/10/2019,变量的作用域-例,public class TestVariableScope static int j = 99; / 静态变量j 属于TestVariableScope类 public static void main(String args) / String args = “abc“; /args与main方法的参数args作用域相同,产生冲突。注释此行以运行程序 for (int i = 0; i 3; i+) / 局部变量i属于当前的for语句 int k = 10; / 局部变量k属于当前的for语句 System.out.println(k + “ * “ + i + “ = “ + k * i); / 局部变量i和k的作用域到此为止 / System.out.println(i); / 局部变量i不存在,编译错误。注释此行以运行程序 int j = 20; / 定义局部变量j, 与类的静态变量j不冲突 System.out.println(“class j=“ + TestVariableScope.j); System.out.println(“local j=“ + j); for (int i = 0; i 3; i+) / 局部变量i属于当前的for语句, 重新定义局部变量i不会产生冲突 int k = 20; / 局部变量k属于当前的for语句, 重新定义局部变量k不会产生冲突 / int j = 20; / 重复声明,局部变量冲突,编译错误。注释此行以运行程序 System.out.println(k + “ * “ + i + “ = “ + k * i); ,7/10/2019,34,课堂练习,进行下列变量说明 初始值为0的int变量a 初始值为1000的long变量b 初始值为3.4的float变量c 初始值为4的char变量ch 初始值为true的boolean变量e,7/10/2019,课堂练习,下面程序的运行结果是什么? public class Demo public static void main(String args) int i; System.out.println(i); ,7/10/2019,课堂练习,以下不是局部变量的是( ) A) main方法体内定义的变量 B) for循环语句中定义的变量 C) 成员方法中的形参变量 D) 类体中定义的成员变量,7/10/2019,常量,常量(Constant):是程序运行过程中值不再发生变动的一种量。如计算圆的周长或面积时所用到的圆周率就是一种常量。 常量有两种主要的分类标准: 根据数据的类型,Java的常量分为逻辑型常量、整型常量、浮点型常量、字符型常量及字符串常量五类。 根据数据的表达方式,Java的常量可分为值常量与符号常量两种。,7/10/2019,常量第一种分类,逻辑型常量又称布尔型常量,其取值只能为true或false,代表一个逻辑量的两种不同状态值。其中true代表真,false代表假。 整型常量表示一个不带有小数位的整数,数值可正可负。整型常量有十进制、八进制和十六进制三种数制表示方式。如:123,12等。 浮点型常量又称为实型常量,用来表示有小数部分的十进制实整。如:11.2,123.45等。 字符型常量是指用单引号()括起来的单个字符表达。如:a。 字符串常量是指用双引号(“”)括起来的一个字符序列。字符串常量包含的字符个数称为它的有效长度。如:“Java”。,7/10/2019,常量第二种分类,根据数据的表达方式,Java的常量可分为值常量与符号常量两种: 值常量就是直接以特定值表达的量。 符号常量是一种标识符形式的常量,这类常量引用时以符号名称代替常量本身,但参与运算的是它的内容,即常量的值,这类常量必须先定义后可使用。,7/10/2019,符号常量,符号常量定义的格式为: 先声明,随后初始化。 final 数据类型 符号常量标识符; 符号常量标识符=常量值;例如: final int MAX_SPEED; MAX_SPEED=200; 2.声明同时初始化 final 数据类型 符号常量标识符=常量值; 例如:定义圆周率的语句为:final float PI=3.1415926f; 作为一种良好的编码习惯,常量名的定义一般均用大写来表示。变量名用小写字母,以示区别。,7/10/2019,练习,java标识符、关键字 java数据类型 变量常量 运算符和表达式 数据类型转换 程序控制结构,内 容 提 要,7/10/2019,运算符和表达式,运算符是进行运算的标识符号。运算符按照操作数的数目分为单目运算符,也叫一元运算符(一个操作数,例如+)、双目运算符,也叫二元运算符(两个操作数,例如*)、三目运算符(例如?:)。Java中的运算符按照功能划分为: 算术运算符 关系运算符 逻辑运算符 位运算符(不讲) 条件运算符 赋值运算符 运算符具有优先级与结合性等重要属性。 表达式是由运算符、操作数以及方法调用等组成的有意义的式子。表达式应该按照Java语法来构造,才可以被编译系统理解、执行,每个表达式都有一个某种类型的结果。,7/10/2019,赋值运算符,赋值运算符“=”用来把一个表达式的值赋给一个变量。 使用方法为:变量名 = 数据 例如:a=3 其中,数据可以是一般的数据,也可以是表达式,但是变量的类型必须和数据的类型保持一致。 Java语言支持简单算术运算符和赋值运算符的作用在赋值运算符两侧的类型不一致的情况下,如果左侧变量的数据类型的级别高,则就把右侧的数据转换为与左侧相同的高级数据类型,然后赋值给左侧的变量。否则需要使用强制类型转换运算符。,7/10/2019,赋值运算符,在赋值符“=”前加上其他运算符,即构成扩展赋值运算符 。如下表所示。,7/10/2019,算数运算符以及算术表达式,算术运算符是针对数值类型操作数进行运算的符号。根据参与运算的操作数的数目,可将算术运算符分为双目运算符和单目运算符两种。下表列出了Java中的算术运算符。 算术运算符的优先级为:(+,- ,同时出现时按照右左的顺序) (*, /, % ,同时出现时按照左右的顺序) (+,-,同时出现时按照左右的顺序) 由算术运算符构成的表达式称为算术表达式。,7/10/2019,/除运算,两个整数做除法运算时,结果是截取商数的整数部分,小数部分被丢弃。如果需要保留,应该对算术表达式进行强制类型转换。例如: 1/2=0 7/3 =2 因此,两个整数相除时会造成数据精度的损失。 注意:0不能做除数!,7/10/2019,求模运算符%,Java的求模(取余)运算符%不同于C+语言,求模运算(%)的两个操作数不但可以是整数,也可以是浮点类型(或一个操作数是浮点数) ;不但可以是正整数,也可以是负整数,其计算结果的符号与求模运算符左侧的操作数符号一致。 例如: 7 % 3 /取余,运算结果为1 7.0 % 3 /取余,运算结果为1.0 -7 % 3 /取余,运算结果为-1,即运算结果的符号与左操作数相同 7 % -3 /取余,运算结果为1,即运算结果的符号与左操作数相同 7.6 % 2.9 /取余,运算结果为1.8,7/10/2019,+加运算,Java对“+”运算进行了扩展,可作字符串连接运算符,如“ab”+“efd”得“abefd”;做“+”运算时,如果一个操作数是字符串,其它操作数自动转换成字符串.如: String s; s=“s:”+4*5; /结果是s=“s:20”; System.out.println(6+7+”A”); /“13A” System.out.println(6+”A”+7); /“6A7” “string is ”+5+5 /“string is 55“ 5+5+“ is a string“ /“10 is a string“ System.out.println(6+7+A); /78,字符运算,7/10/2019,自增+、自减-运算符,自增运算符+与自减运算符-只能适用于变量,不能适用于表达式,自增(自减)运算只能应用于整数类型或char类型数据。 前置与后置的区别: +运算符有两种形式,+i与i+,都是使i的值加1后再赋给i,即i=i+1, 而-i与i-都是使i=i-1,但必须注意自增、自减运算符放在变量前还是放在 变量后。 假设i=3,j=5则 j=+i /先使i加1,然后再赋值给j。结果是i与j都为4。 j=i+ /先将i的值赋值给j,使j=3,再自加1,使i=4,结果是i=4,j=3。 同理对于-运算符。,7/10/2019,算数运算注意事项(1),对于二元运算符,运算结果的数据类型一般为两个操作数中表达范围较大的类型。例如,一个整数和浮点数运算的结果为浮点数。 对于一元运算符,运算结果的类型与操作数的类型相同。 自增、自减运算符有前缀和后缀两种形式,当是前缀形式(即+、-符号出现在变量的左侧)时,对变量实施的运算是“先运算后使用”; 当是后缀形式(即+、-符号出现在变量的右侧)时,对变量实施的运算是“先使用后运算”。,7/10/2019,算数运算注意事项(2),3. byte,short,char等类型进行混合运算时,会先自动转换为int类型再运算。 4. 当参加二元运算的两个操作数的数据类型不同时,所得结果的数据类型与精度较高(或位数更长)的那种数据类型一致,例如: 7.0 / 3 /除法,运算结果为2.33333,即结果与精度较高的类型一致 5.因为字符是一个2个字节的整数表示,因此可以对char类型的变量实行算术运算。如: char ch = a; . System.out.println(“ a= “ + (+ch); /输出结果是a=b System.out.println(“ a= “ + (int)(+ch); /输出结果是a=99,7/10/2019,练习,public class test1 public static void main(String args) int a=2; a+; System.out.println(“a=“+a); int m=a+; System.out.println(“a=“+a+“,m=“+m); int n=+a; System.out.println(“a=“+a+“,n=“+n); 输出结果?,7/10/2019,练习,下面的代码段执行后i和n的值分别是多少? int i = 10; int n = i+%5;,7/10/2019,练习,public class NumericOperatorTest public static void main(String args) /声明变量并进行运算 int i=1+2; int j=5-1; int k=5*6; int l=6/5; /打印输出运算结果 System.out.println(“相加结果是:“+i); System.out.println(“相减结果是:“+j); System.out.println(“相乘结果是:“+k); System.out.println(“相除结果是:“+l); 【运行结果】程序的运行结果如下。 相加结果是:3 相减结果是:4 相乘结果是:30 相除结果是:1,7/10/2019,练习,01 public class IDOperatorTest 02 public static void main(String args) 03 /定义四个变量,并使用递加 04 int a=1; 05 int b=1; 06 int c=a+; 07 int d=b+; 08 /将结果分别打印输出 09 System.out.println(“a的值是:“+a); 10 System.out.println(“b的值是:“+b); 11 System.out.println(“c的值是:“+c); 12 System.out.println(“d的值是:“+d+“n“); 13 /定义四个变量,并使用递减 14 int e=5; 15 int f=5; 16 int g=e-; 17 int h=f-; 18 /将结果分别打印输出 19 System.out.println(“e的值是:“+e); 20 System.out.println(“f的值是:“+f); 21 System.out.println(“g的值是:“+g); 22 System.out.println(“h的值是:“+h); 23 24 25 【运行结果】程序的运行结果如下。 a的值是:2 b的值是:2 c的值是:1 d的值是:1 e的值是:4 f的值是:4 g的值是:5 h的值是:5,7/10/2019,算术运算练习题,已知int i=10,j=0;计算下面表达式的值。 j=i+3*9%i-4 j=( ) 2. 设x = 2,则表达式 ( x + + ) * 3的值是 6 。 3. 计算 100 - 12.5 * 3 + 5 / 2 + 2,7/10/2019,关系运算符和关系表达式,关系运算符是指对操作数进行大小、相等与否等进行比较运算的一类运算符,运算结果为逻辑值(true或false)。关系运算符常常用在if控制语句和各种循环语句的表达式中。由关系运算符构成的表达式称为关系表达式。,7/10/2019,关系运算符和关系表达式,注意: 关系运算符都为二元运算符。 相等关系运算符(=)用来判断两个操作数是否相等,它与赋值运算符(=)意义与应用场合皆无可比性。如果在条件判断中把“=”写成“=”,会发生错误,这是初学者最容易犯错的地方。 不存在连续比较,如2 2 & i 5 关系运算符常常用于逻辑判断,用在选择结构来控制分支或循环结构控制循环。 在以上几个关系运算符中,等于“=”和不等于“!=”同属一个优先级,另外4个运算符同属一个优先级,且前者的优先级别低于后者。在同一优先级中遵循自左右的执行顺序。关系运算符常常与下一节中的逻辑运算符混合使用。,7/10/2019,关系运算符和关系表达式,public class Compare /创建类 public static void main(String args) int number1 = 4; /声明int型变量number1 int number2 = 5; /声明int型变量number2 /*依次将变量number1与变量number2的比较结果输出*/ System.out.println(“4 = 5的返回值为:“ + (number1 = number2); System.out.println(“4 != 5的返回值为:“ + (number1 != number2); System.out.println(“4 5 的返回值为:“ + (number1 number2); System.out.println(“4 = 5的返回值为:“ + (number1 = number2); System.out.println(“4 = 5的返回值为:“ + (number1 = number2); ,7/10/2019,逻辑运算符与逻辑表达式,Java语言中的逻辑运算符只对逻辑型数据进行运算,其表达式的值只有true或false两种取值。Java中提供了6种逻辑运算符 。,7/10/2019,四种逻辑运算符的真值表,7/10/2019,逻辑运算符与逻辑表达式,逻辑非运算符“!”的优先级高于其它逻辑运算符。相同优先级的逻辑运算符的执行顺序为自左右。 x=1,则下列表达式执行后,x的值 (x 1)&(x+ 1) /x=1 (x 1)&(+x 1) /x=2,7/10/2019,练习-逻辑运算符,public class RelaDemo public static void main(String args) boolean x,y,z,a,b; a=true; b=false; x=(!a); y=(a x,y,z的输出结果是?,7/10/2019,65,条件运算符 ?:,使用方法:op1 ? op2 : op3 如果表达式op1结果为真(true),则返回op2的值,否则返回op3的值 唯一的一个三元运算符 注意:如果op1为真(true),则不计算op3,如果op1为假(false),则不计算op2。例如: int i = 7; int j = i 6 ? i-1 : i+; System.out.println(i+”, ”+j); 输出7,6 int i = 7; int j = i 9 ? +i : i+; System.out.println(i+”, ”+j); 输出8,7,7/10/2019,表达式计算的原则,运算符优先级是指组成一个表达式的各种运算符在执行计算操作时的先后顺序。 Java表达式计算的原则是: 先计算优先级高的运算符,再计算优先级低的运算符。 相同优先级的运算符的计算次序由其结合性决定。 括号可以改变运算符的计算次序。,7/10/2019,运算符的优先级表,7/10/2019,运算符的优先级,Java运算符的优先级分14个级别,分别用1至14这十四个整数数字来表示。级别数字越小,优先级越高,级别越低,对应的数字越大。优先级最高的运算符为域、数组、括号这三个运算符,最低的为位运算符。 表中同一行的运算符具有相同的优先级,相同优先级的运算符在计算时按照其结合性进行运算。Java运算符的结合性分为左结合与右结合两种。 左结合运算符按照从左到右的顺序进行运算 右结合运算符按照从右到左的顺序进行运算,7/10/2019,69,课堂练习,把下面表达式表示成为符合java语法规则的表达式。 x y 0 有半径r1.5,圆柱高h3,编写程序计算圆柱体积。 有四个整数分别用a、b、c、d表示,请使用条件运算符找出其中最大值。编写程序输出结果 int max=ab?a:b; max=maxc?max:c; max=maxd?max:d;,y0 & yx,7/10/2019,课堂练习,4、请写下程序的输出结果: public class Demo public static void main(String args) int x, y; float z = 1.234f; double w = 1.23; boolean flag; x = 12; y = 300; flag = x y; System.out.println(“xy=“ + flag); flag = z w; System.out.println(“zw=“ + flag); 运行结果: xy=false zw=true,java标识符、关键字 java数据类型 变量常量 运算符和表达式 数据类型转换 程序控制结构,内 容 提 要,7/10/2019,数据类型转换,Java的7(逻辑型不能进行混合运算)种基本数据类型可以进行混合运算,不同类型的数据在运算过程中,首先会自动转换为同一种类型,然后再进行运算。 Java在运算时总是要进行数据类型的检查,如果数据类型不一致,则按照某种规则进行转换,然后按照转换后的数据类型运算。如果这种转换不能进行,则会报告出错信息。 数据类型转换包括: 自动数据类型转换(隐式转换) 强制类型转换(显式转换),7/10/2019,自动类型转换又称为隐式类型转换,是指参与运算的数据类型不同时,Java自动将精度较低的数据类型转换为精度较高的数据类型,即将占位数较少的类型转换为占位数较多的类型。 例如:每一个int都是一个long,long就是较大(占位多)的类型,自动类型转换,long,int,int,long,7/10/2019,自动数据类型转换,箭头指明了自动类型转换的规则。,char,short,byte,int,long,float,double,7/10/2019,设c = a + b,当a与b数据类型不同时,自动数据类型转换如表所示。,自动类型转换,注意:布尔类型不能与其他数据类型进行转换!,自动数据类型转换的方式,7/10/2019,自动类型转换,byte,short和char在一起运算时,应首先转换为int类型再进行运算。 在二元运算中,所有低级的数据类型都会转换为运算中级别最高的类型。也就是说: 如果有一个操作数是double类型,其他操作数会自动转换为double类型。 如果运算中最高的数据类型是float类型,其他操作数会自动转换为float类型。 如果运算中最高的数据类型是long类型,其他操作数会自动转换为long类型。 如果运算中最高的数据类型是int类型,其他操作数会自动转换为int类型,至于byte,short和char会自动转换为int或运算中级别最高的类型。,7/10/2019,自动类型转换,public class Example17 public static void main(String args) int a=10; byte b=20; char c=a; long l=600L; float f=3.5f; double d=1.234; float ff=f*a; /首先将a转换成float型再进行运算,所以结果转换成float型 int aa=a+c; /首先将c转换成int型再进行运算,所以结果转换成int型 long ll=l+b; /首先将b转换成long型再进行运算,所以结果转换成long型 double dd=f/a-d; /首先将a转换成float型再进行运算,所以结果转换成double型 System.out.println(“ff=“+ff); System.out.println(“aa=“+aa); System.out.println(“ll=“+ll); System.out.println(“dd=“+dd); ,7/10/2019,自动类型转换,例如: char ch=M; int a=2,b; float x=38.23F; double z,y=282.382D; b=(ch+6); /先将ch自动转换为int类型,再求取int变量b的值 z=a*(x+y); /先将a、x自动转换为double类型,再求取z的值 分析下面程序中的错误: byte b1=5; short s1=6; short s2 ; s2=b1+s1;,7/10/2019,强制类型转换(显式转换),在使用赋值运算时,可能会遇到赋值号左边的数据类型和赋值右边的数据类型不一致的情况,这时需要把赋值号右边的数据类型转化成赋值号左边的数据类型。 如果这2种类型是兼容的(精度高的类型=精度低的类型),那么Java将自动地进行转换。例如,把int类型的值赋给long类型的变量。而将变量从精度高的数据类型赋值给精度低的数据类型时,则必须用到强制类型转换。,7/10/2019,强制类型转换,在Java语言中强制类型转换是指从在机器中占位多的类型向占位少的类型方向进行转换,例如int类型转换成byte类型。强制类型转换需要使用类型转换语法格式,在需要转换的数据前面加上欲转换的数据类型,并用括号括起来。 强制类型转换语法格式为: (数据类型)(表达式) 例如: long num=900L; short snum=(short)num; long类型的数值900没有超过short类型的取值范围,所以short类型的变量snum完全容纳了强制类型转换后的数值 基本数据类型的强制转换需要注意数据完整性,当把高级的数据类型强制转换为低级的数控类型时,如果数值超出低级数据类型的有效范围,数值将被截取,导致数据丢失不完整。例如 short snum=516; byte bnum=(byte)snum; snum是short类型,数据长度是16位,而bnum是byte类型,长度为8位。当snum强制转换为byte类型是,数据516超出了byte类型的取值范围,这时只能从short类型截取低8位的数据赋值给byte 类型的变量bnum,这样就造成了数据丢失,所以在强制类型转换时,要小心。,7/10/2019,整型与浮点型的转换: float a = 1.414f; int b = (int) a; 其结果是b被赋值为1。强制数据类型转换可能会导致数据精度的降低或导致数据溢出,要慎重使用。上例就是一个损失了数据精度的例子。 整型与字符型的转换: int i65; char c; c=(char)i; / 把int型变量转换成char型,需要强制类型转换。,强制类型转换,7/10/2019,强制类型转换,有些类型是不允许转换成另一种类型的,例如boolean类型不能转换成int等类型。,7/10/2019,两种类型装换的比较,byte b=10; int i=b;/自动转换 int i=10; byte b=(byte)i;/强制类型转化,7/10/2019,强制类型转换练习,public class PConversion public static void main(String args) long num=33333; System.out.println(“原数是:“+num); System.out.println(“转成int:“+(int)num); System.out.println(“转成short:“+(short)num); System.out.println(“转成byte:“+(byte)num); System.out.println(“转成float:“+(float)num); System.out.println(“转成char:“+(char)num); 将上面的程序运行,查看输出结果!,7/10/2019,强制类型转换练习,public class Example18 public static void main(String args) int a=15; byte b=7; float c=a/b; float d=(float)a/b; /强制数据类型转换 int e=a/(int)b; /强制将其转换为int型 System.out.println(“c=“+c+“ “+“d=“+d+“ “+“e=“+e); ,7/10/2019,练习,下面的类型转换合法吗? long bigval = 6; int smallval = 99L; double z = 12.414F float z1 = 12.414;,/6 是一个int类型,允许,/99L是long类型, 不合法,/12.414F是float类型,允许,/12.414是double类型,不合法,7/10/2019,练习,下列类型转换合法吗?,boolean b=true; int i=(int)b;,float f=1000.34f; int i=(int)f;,double d=1000.34; int i= (int)d;,int i=1000; char c=(char)i;,int i=1000; boolean b=(boolean)i,java标识符、关键字 java数据类型 变量常量 运算符和表达式 数据类型转换 程序控制结构,内 容 提 要,7/10/2019,程序控制结构,程序:为完成某个功能(目标)而编写的指令集合。 程序运行的过程:就是执行一条条语句的过程。程序执行的逻辑次序称为程序的流程。 在不进行任何流程控制的情况下,程序执行的次序就是语句的排序顺序,这种程序结构称为顺序结构。顺序结构的程序是最简单的程序,也是组成其他复杂结构程序的基础。 除了顺序结构外,Java提供了以下几类流程控制结构: 选择结构 循环结构 跳转结构 异常处理结构,7/10/2019,语句、语句块和空白,构成Java程序的最小单位是类,而类则是由属性和方法构成。方法代表了某个具体的能力,具体的一个方法就是由为完成某个功能而编写的若干条语句组成。 语句(Statement)是以分号(;)作为结束符的一条完整命令。一个表达式加上分号就是一条语句;一行上只写上单纯的一个分号,也是语句,称为空语句。,7/10/2019,语句,在Java中,主要有以下的语句类型: 1.声明语句 int a=0; /声明了一个整型变量 Student stu;/声明了一个类型是Student的对象 2.表达式语句 表达式语句用于对表达式求值。赋值表达式,自增表达式、方法调用、对象创建都可以和分号一起构成“

温馨提示

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

评论

0/150

提交评论