Top Banner
Java 程程程程程程程程程程程程程程程程程程 程程程程[email protected] 程程程程
44

《 Java 程序设计之网络编程 》

Mar 14, 2016

Download

Documents

rae-bolton

《 Java 程序设计之网络编程 》. 教学课件. 重庆大学计算机学院 电子邮件: [email protected]. 第 2 章 数据类型及其运算. 主要内容. 2.1 标识符和关键字 2.2 常量和变量 2.3 基本数据类型 2.4 运算符 2.5 表达式 2.6 数组. 标识符. 标识符 : 为程序中的各个元素进行命名 . 一般地,在 Java 中标识符是以字母、下划线( _ )、美元符号( $ )等其它货币符号 ( 如 £ , ¥ ) 开始的一个字符序列,后面可以跟字母、下划线、美元符号、数字等字符。 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 《 Java 程序设计之网络编程 》

《 Java 程序设计之网络编程》

重庆大学计算机学院 电子邮件: [email protected]

教学课件

Page 2: 《 Java 程序设计之网络编程 》

第 2 章 数据类型及其运算

Page 3: 《 Java 程序设计之网络编程 》

主要内容2.1 标识符和关键字 2.2 常量和变量 2.3 基本数据类型 2.4 运算符 2.5 表达式 2.6 数组

Page 4: 《 Java 程序设计之网络编程 》

标识符 标识符 : 为程序中的各个元素进行命名 . 一般地,在 Java 中标识符是以字母、下划线( _ )、美元符号( $ )等其它货币符号 ( 如£, ¥) 开始的一个字符序列,后面可以跟字母、下划线、美元符号、数字等字符。 Java 语言使用 Unicode 字符集 标识符是大小写敏感的,没有最大长度的限制,不能和关键字相同

Page 5: 《 Java 程序设计之网络编程 》

标识符 总体来说定义标识符可以使用的字符包括:

大小写字母、数字; Unicode 字符集中编号大于 0xC0 的所有字符。 凡是用 Character.isJavaIdentifierStart() 返回 true ,都可作为首字符, Character. isJavaIdentifierPart() 返回 true ,都可作为标识符的一部分。

合法的标识符: Body , _test , $hello

非法标识符: 5Test , hello* , world# , class

注意:在中文环境下,可以使用汉字作为标识符。例如, int 中文 =5 ;

Page 6: 《 Java 程序设计之网络编程 》

关键字 所有的关键字都是小写的。如果被大写,就不是关键字了 。 用于数据类型的关键字

byte short int long float double char boolean 用于流程控制语句的关键字

if else switch case default do while for break continue 方法、类型、变量的修饰关键字

private public protected final static abstract synchronized volatile 异常处理关键字

try catch finally throw throws

Page 7: 《 Java 程序设计之网络编程 》

关键字 对象相关关键字

new extends implements class instanceof this super 字面值常量关键字

false true null 方法相关关键字

return void 包相关关键字

package import

Page 8: 《 Java 程序设计之网络编程 》

注释 单行注释

单行注释以“ //” 开头,至该行结尾,其格式如下: 多行注释

/* 注释文本 …… */

文档注释 /** 注释文本 * 注释文本 *…… */

Page 9: 《 Java 程序设计之网络编程 》

主要内容2.1 标识符和关键字 2.2 常量和变量 2.3 基本数据类型 2.4 运算符 2.5 表达式 2.6 数组

Page 10: 《 Java 程序设计之网络编程 》

变量 [ 修饰符 ] < 类型名 > < 变量名 > [=< 初值 >][,< 变量名 >[=< 初值 >]….] ;

int i ; int j=5 , k=4;

作用域分,变量大致可分为:局部变量、类成员变量、方法参数、异常处理参数。

Page 11: 《 Java 程序设计之网络编程 》

变量作用域 局部变量是在方法内部或代码块中声明的变量,它的作用域为它所在的代码块,在程序设计中,以“ { …… }” 为界。 类成员变量,它的作用域是整个类。又可以细分为静态变量和实例变量 方法参数的作用域,是它所在的方法 异常处理参数的作用域,是它所在的异常处理部分 变量隐藏 (按作用域的大小)

Page 12: 《 Java 程序设计之网络编程 》

常量 整形常量 234 ,实型常量 23.4 ,字符常量’ a’ ,布尔常量 true 和 false ,以及字符串常量“ hello world !” final 关键字(后面还会碰到) final int MAX=100; final int MAX_LOOP=5;

Page 13: 《 Java 程序设计之网络编程 》

主要内容2.1 标识符和关键字 2.2 常量和变量 2.3 基本数据类型 2.4 运算符 2.5 表达式 2.6 数组

Page 14: 《 Java 程序设计之网络编程 》

数据类型分类

数据类型

基本类型

引用类型

数值类型

字符类型 (char)

布 尔 类 型 ( boolean )

整数类型 (byte,short,int,long)

浮点类型 (float,double)

类 (class)

接口 (interface)

数组图 2-1 Java 语言的数据类型

Page 15: 《 Java 程序设计之网络编程 》

数据类型 Java 的基本数据类型都有固定的数据位,不随运行平台的变化而变化。 引用类型都是用类或对象实现的。 布尔类型

boolean b=false;

Page 16: 《 Java 程序设计之网络编程 》

字符类型 一个字符用一个 16位的 Unicode码表示 char c,c1=‘a’ ; 中’的 Unicode码是 \u4e2d 整数和字符型数据在一起运算 字符向整数转换

转义字符               描述 \ddd 1 到 3位 8进制数所表示的字符 (ddd) \uxxxx 1 到 4位 16 进制数所表示的字符 (xxxx) \' 单引号字符\" 双引号字符 \\ 反斜杠 \r 回车 \n 换行 \f 走纸换页 \t 横向跳格 \b 退格

Page 17: 《 Java 程序设计之网络编程 》

整数类型 Java 中的整数有三种进制形式表示:

十进制:用 0~9的数值表示,首位不能为 0 ,例如:124 , -100 ; 八进制:以 0 开头,后跟多个 0~7 之间的数字,如0134 ; 十六进制:以 0x 或者 0X 开头,后跟多个 0~9 之间的数字、或 A~F 之间的的大写字、或者 a~f之间的小写字母。 a~f 或者 A-F分别表示 10~15 ,例如,0x23FE,等于十进制数 9214 。

Page 18: 《 Java 程序设计之网络编程 》

整数类型数据类型 所占位数 数的范围byte 8 -27 ~ (27 -1) short 16 -215 ~ (215 -1)int 32 -231 ~ (231 -1)long 64 -263 ~ (263-1)在表示 long 型常量时,需要在数字后面加上后缀 L 或者 l 。例如 3L 表示一个 long型的常量,而不是 int 型常量。

Page 19: 《 Java 程序设计之网络编程 》

浮点类型 数据类型 所占位数 数的范围float(单精度浮点数) 32 3.4e-038 ~ 3.4e+038double(双精度浮点数) 64 1.7e-308 ~ 1.7e+308

一个浮点数隐含为 double 型。在一个浮点数后加字母 F或 f ,表示 float 型。常量值 3.45 的类型是 double ; 3.45F的类型是 float 。

Page 20: 《 Java 程序设计之网络编程 》

各类型数据间的相互转换 自动类型转换

从低级到高级发生自动类型转换。从表达范围小的类型向表达范围大的类型发生自动类型转换。不同数据类型的转换如下所示: 低 ----------------------------------------------- ---> 高 byte , short , char---> int--> long--> float--> double

注意: byte , short 和 char 在一起运算时,首先转换为 int 类型进行运算。 【例 2-1 】分析下面程序中的错误。

byte b1=5 ; short s1=6 ; short s2 ; s2=b1+s1;

Page 21: 《 Java 程序设计之网络编程 》

类型转换 强制类型转换

由高级向低级数据类型转换时,需要强制类型转换。例如: int i= 65 ; char c; c=(char)i; // 把 int 型变量转换成 char型,需要强制类型转换。

Page 22: 《 Java 程序设计之网络编程 》

主要内容2.1 标识符和关键字 2.2 常量和变量 2.3 基本数据类型 2.4 运算符 2.5 表达式 2.6 数组

Page 23: 《 Java 程序设计之网络编程 》

算数运算符 运算符 用法 含义 结合性

二元运算符 + op1+op2 加法 左- op1-op2 减法 左* op1*op2 乘法 左/ op1/op2 除法 左% op1%op2 模运算 (求余 ) 左

一元运算符 + +op1 正数 右- -op1 负数 右++ ++op1,op1++ 自增 右,左-- --op1, op1++ 自减 右,左

Page 24: 《 Java 程序设计之网络编程 》

算数运算符的特点 对于二元运算符,运算结果的数据类型一般为两个操作数中表达范围较大的类型。例如,一个整数和浮点数运算的结果为浮点数。 对于一元运算符,运算结果的类型与操作数的类型相同。 自增、自减运算符有前缀和后缀两种形式,当是前缀形式(即 ++、 --符号出现在变量的左侧)时,对变量实施的运算是“先运算后使用”; 当是后缀形式(即 ++、 --符号出现在变量的右侧)时,对变量实施的运算是“先使用后运算”。

Page 25: 《 Java 程序设计之网络编程 》

算数运算符的注意事项 在 Java 中 ,"%"(求模运算符)的操作数可为浮点数 , 如 52.3%10=2.3 ; Java 对 "+"运算进行了扩展 , 可作字符串连接运算符 , 如 "ab"+"efd" 得 "abefd"; 做 "+"运算时 , 如果一个操作数是字符串 , 其它操作数自动转换成字符串 . 如 : String s; s="s:"+4*5; // 结果是 s="s:20"; byte , short , char 等类型进行混合运算时,会先自动转换为 int 类型再运算。

Page 26: 《 Java 程序设计之网络编程 》

赋值运算符 j=i+20; 运算符 示例 含义

+= count += 2 count = count + 2-= count -= 2  count = count - 2*= count *= 2  count = count * 2/= count /= 2  count = count / 2%= count %= 2 count = count % 2

Page 27: 《 Java 程序设计之网络编程 》

条件运算符 (boolean_expr)? true_statement:false_statement ; result=sum==0?100:2*num;

Page 28: 《 Java 程序设计之网络编程 》

位运算符 Java 用补码表示二进制数 1 表示为二进制为

00000000 00000000 00000000 00000001( 4 个字节) -1 表示为二进制为

11111111 11111111 11111111 11111111 ( 4 个字节)

Page 29: 《 Java 程序设计之网络编程 》

位运算符 运算符 示例 含义 & Op1  &  Op2 使 Op1和 Op2按位相与 | Op1  |  Op2 使 Op1和 Op2按位相或 ~ ~Op 对 Op按位取反 ^ Op1 ^ Op2 使 Op1和 Op2按位异或 << Op1 <<  Op2 使 Op1左移 Op2位 ,右补 0 >> Op1 >>  Op2 使 Op1右移 Op2位 (带符号,左边补充符号位 ) >>> Op1 >>>

Op2使 Op1无符号右移 Op2位 (左边始终补添 0)

Page 30: 《 Java 程序设计之网络编程 》

注意事项 除 ~ 为右结合外 , 其余为左结合。 操作数的类型一般为整型或字符型。 &,|,^ 三个运算符可以用于 boolean 。 ">>" 右移是用符号位来填充右移后留下的空位 ,">>>"是用零来填充空位 . 若两个数据的长度不同 , 如 a&b,a 为 byte 型 ,b为 int 型 ,系统首先会将 a 的左侧 24位填满 ,若 a 为正 ,则填满 0,若 a 为负 ,填满 1即进行“符号扩充”。

Page 31: 《 Java 程序设计之网络编程 》

举例:按位与运算符 && 十进制数 二进制数

操作数 1 5 00000000 00000000 00000000 00000101

操作数 2 9 00000000 00000000 00000000 00001001

运算结果 1 00000000 00000000 00000000 00000001

Page 32: 《 Java 程序设计之网络编程 》

举例 5<<32 的结果 -1>>>1 的 结果

Page 33: 《 Java 程序设计之网络编程 》

逻辑运算符 逻辑运算只能处理布尔类型的数据,所得结果也是布尔值 逻辑运算符支持短路运算

运算符 示例 含义 结合性&& Op1 && Op2 逻辑与运算 左|| Op1 || Op2 逻辑或运算 左! ! Op 逻辑非运算 右

Page 34: 《 Java 程序设计之网络编程 》

主要内容2.1 标识符和关键字 2.2 常量和变量 2.3 基本数据类型 2.4 运算符 2.5 表达式 2.6 数组

Page 35: 《 Java 程序设计之网络编程 》

表达式 表达式是程序设计语言的基本组成部分,表示一种求值的规则,是由运算符和操作数组成的符号序列。 表达式的运算结果的类型,就是表达式的类型 在对表达式进行运算时,遵循一定的规则,要按运算符的优先级从高到低进行,同级的运算符则按从左到右的方向进行。

Page 36: 《 Java 程序设计之网络编程 》

表达式高|||||||||||||

 低

1 .[] () ++ -- ! ~ instanceof 2 new (type)3 * / %4 + -5 >>  >>>  << 6 < > <= >=7 == !=8 & 9 ^10 |  11 &&12 ||13 ? :14 = += -= *= /= %= ∧=15 &= != <<= >>= >>>=

Page 37: 《 Java 程序设计之网络编程 》

几个特点 赋值运算符的优先级最低,因为赋值运算符要使用表达式的值; 关系运算符的优先级比布尔逻辑运算符的优先级高; .,[],() 等运算符的优先级最高; 一元运算符的优先级也比较高; 算术元算符要比关系运算符和二元逻辑运算符的优先级要高。

Page 38: 《 Java 程序设计之网络编程 》

主要内容2.1 标识符和关键字 2.2 常量和变量 2.3 基本数据类型 2.4 运算符 2.5 表达式 2.6 数组

Page 39: 《 Java 程序设计之网络编程 》

一维数组的定义 int a[ ]; 或者 int[ ] a ; 这里只有数组变量的定义,没有为数组元素分配空间,只为数组的引用分配了空间, a目前为一个空的引用。 在声明数组时,可以为数组赋初值。例如:

int a[ ]={0 , 1 , 2 , 3 , 4} ;

Page 40: 《 Java 程序设计之网络编程 》

使用 new 为数组分配空间 <数组名 >= new <类型 >[ <长度 > ];   a=new int[5];

创建了一个包含5个元素的数组a,每个元素被自动初始化为0 int a[ ] =new int[5] 每个数组都有一个属性 length ,指明它的长度

可以讲一个用筛选法求素数

Page 41: 《 Java 程序设计之网络编程 》

变量的自动化初始值 数组元素的类型 初始值byte, short,int ,long 0float , double 0.0char ‘\0’boolean false引用类型 null

Page 42: 《 Java 程序设计之网络编程 》

一维数组的图形表示a null

( a ) int a[ ]

a 0x0345o

堆a[0]

01234

a[1]a[2]a[3]a[4]

(b) int a[ ]={0,1,2,3,4}

a 0x4345o

堆a[0]

00000

a[1]a[2]a[3]a[4]

(c) int a[ ] ; a=new int[5];

图 2-2 一维数组存储结构

Page 43: 《 Java 程序设计之网络编程 》

二维数组 最常用的二维数组是一个特殊的一维数组,它的每个元素都是一个一维数组。又叫做数组的数组

int two[][]; 或 int[][] two ;

这里只有变量的定义,没有分配内存空间。 在定义二维数组时也可以赋初值,将数组元素的值用多层括号括起来,例如:

int two[][]={{0 , 1 , 2} , {3 , 4 , 5}} ;

Page 44: 《 Java 程序设计之网络编程 》

使用 new 为二维数组分配空间 int two[ ][ ]=new int[2][3];

或者 int two[ ][ ]; two=new int[2 ][3 ]; 二维数组还有另外一种初始化方式,就是从最高维开始,分别为每一维分配空间。 int two[ ][ ];

two =new int[2][ ]; two[0]=new int[2]; two[1]=new int[3];