57
第2第 Java 第第第第第第 Java 是 是是是是是是是是是是是是 是是是是是是是是是 一, 是是是是是是是是是是Java 是是是是是是是是 是是是是是是 是是是是 ,、、 是是是是是是是是是是是 Java 是是是是是是是是 是是 Java 是是 是是是是 是是 Java 是是是是是是是是是 是是是是是是是是是是是是 ,, 是是是 Java 是是是是是

第 2 章 Java 语言语法基础

Embed Size (px)

DESCRIPTION

第 2 章 Java 语言语法基础. Java 是一种跨平台的面向对象语言,利用该语言可以生成独立于平台的应用程序。 Java 语言具有众多优点,如面向对象、可移植、与硬件无关等。 我们将介绍 Java 语言最基本的内容,先从 Java 编程基础开始,介绍 Java 语言的基本语法然后,介绍几种常用算法的示例,强化对 Java 语言的认识。. 课程主页: http://cs.nju.edu.cn/dislab/xchen/java.html 作业: [email protected]. 第 2 章主要内容. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 2 章   Java 语言语法基础

第 2 章 Java 语言语法基础

Java 是一种跨平台的面向对象语言,利用该语言可以生成独立于平台的应用程序。 Java 语言具有众多优点,如面向对象、可移植、与硬件无关等。 我们将介绍 Java 语言最基本的内容,先从Java 编程基础开始,介绍 Java 语言的基本语法然后,介绍几种常用算法的示例,强化对 Java 语言的认识。

Page 2: 第 2 章   Java 语言语法基础

课程主页:http://cs.nju.edu.cn/dislab/xchen/java.html作业:[email protected]

Page 3: 第 2 章   Java 语言语法基础

2.1 、 Java 标识符、关键字、注释与分隔符 2.2 、 Java 的数据类型 2.3 、 Java 运算符和表达式 2.4 、 Java 控制结构 2.5 、小结2.6 、习题

第 2 章主要内容

Page 4: 第 2 章   Java 语言语法基础

2.1.1 标识符与关键字 2.1.2 注释 2.1.3 分隔符

2.1 、 Java 标识符、关键字、注释与分隔符

Page 5: 第 2 章   Java 语言语法基础

程序员对程序中的各个元素加以命名时使用的命名记号称为标识符( identifier )包括:类名、变量名、常量名、方法名、…Java 语言中,标识符是以字母,下划线( _ ) , 美元符($) 开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。

合法的标识符keywords javaName Java_Name

sys_value $java Java123 非法的标识符

2mail java# class char int

2.1.1 标识符与关键字

Page 6: 第 2 章   Java 语言语法基础

具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为关键字。

abstract break byte boolean catch case class char continue default double do else extends false final float for finally if import implements int interface instanceof long length native new null package private protected public final return switch synchronized short static super try true this throw throws threadsafe transient void while

2.1.1 标识符与关键字

Page 7: 第 2 章   Java 语言语法基础

在 Java 中, true 、 false 和 null 都是小写的。区别于 C++ 中大写的 TRUE 、 FALSE 和 NULL 。

所有的数据类型所占用的字节数都是固定的,并且和实现无关的,因此在 Java 中没有 sizeof 操作符。

不必死记这些关键词,当理解每个关键词的含义后,自然就记住了所有的关键词。

2.1.1 标识符与关键字

Page 8: 第 2 章   Java 语言语法基础

举例: // 单行注释,简单的解释语句含义 .

/* 多行注释,用来说明更多的内容,包括算法等 . …… */

/** Java 文档注释,可以通过 javadoc 生 * 成类和接口的 HTML 格式的帮助文档 . * 这种注释有其特殊的格式(参见相关文档) */

2.1.2 注释

Page 9: 第 2 章   Java 语言语法基础

2.1.3 分隔符

Java 中分隔符有空格、逗号、分号及行结束符,并且规定任意两个相邻标识符、数字、保留字或两个语句之间必须至少有一个分隔符,以便编译程序能识别。

Page 10: 第 2 章   Java 语言语法基础

2.2 、 Java 的数据类型

2.2.1 Java 基本数据类型( Primary Data Type

s )2.2.2 常量( Constant )和变量( Variable )

常量( Constant )变量( Variable )

2.2.3 数据类型的转换

Page 11: 第 2 章   Java 语言语法基础

所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。 所有基本类型的关键词都是小写的。

数据类型 所占位数 数的范围 char 16 0 ~ 65535 byte 8 -27 ~ 27-1 short 16 -215 ~ 215-1 int 32 -231 ~ 231-1 long 64 -263 ~ 263-1

f loat 32 3.4e - 038 ~ 3.4e + 038

double 64 1.7e - 308 ~ 1.7e + 308

2.2.1 Java 基本数据类型

Page 12: 第 2 章   Java 语言语法基础

布尔型数据只有两个值 true 和 false ,且它们不对应于任何整数值布尔型变量的定义如:

boolean b = true; 布尔型数据只能参与逻辑关系运算:

&& || == != ! 示例:

boolean b1; boolean b2 = true; b = !b2; boolean b = (b1 && b2) != false;

2.2.1 布尔类型 (boolean)

Page 13: 第 2 章   Java 语言语法基础

字符型数据代表 16 位的 Unicode 字符 字符常量是用单引号括起来的一个字符

‘a’ ‘B’ ‘\n’ ‘\u0030’ 字符型数据的取值范围为

0~65535 或者说 \u0000~\uFFFF \u0000 为缺省值

示例 char c1; \\ 缺省值为 0 char c2 = ‘0’; \\ 赋初值为字符‘ 0’ char c3 = 32; \\ 用整数赋初值为空格

2.2.1 字符类型 (char)

Page 14: 第 2 章   Java 语言语法基础

特殊字符的常量表示法: 反斜线( Backslash ) ‘ \\’ 退格( Backspace ) ‘ \b’ 回车( Carriage return ) ‘ \r’ 进纸符( Form feed ) ‘ \f’ 制表符( Form feed ) ‘ \t’ 换行( New line ) ‘ \n’ 单引号( Single quote ) ‘ \’’ 八进制数( ‘ \0’ ~‘ \377’ ) ‘ \DDD’ Unicode 字符 ‘ \uHHHH’

2.2.1 字符类型 (char)

Page 15: 第 2 章   Java 语言语法基础

整型常量1. 十进制整数

如 123 ,- 456 , 0

2. 八进制整数以 0 开头,如 0123 表示十进制数 83 ,- 011 表示十进制数- 9 。

3. 十六进制整数以 0x 或 0X 开头,如 0x123 表示十进制数 291 ,- 0X12 表示十进制数- 18 。

整型变量类型为 byte 、 short 、 int 或 long , byte 在机器中占 8 位, short 占 16

位, int 占 32 位, long 占 64 位。整型变量的定义如:int x=123; //指定变量 x 为 int 型,且赋初值为 123

byte b = 8; short s = 10; long y = 123L; long z = 123l;

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

Page 16: 第 2 章   Java 语言语法基础

64 位长整数以 l 或 L 结尾: 12l, -343L, 0xfffffffffL

1L << 32 等于 4294967296L 1 << 32 等于 0 没有以 l 或 L 结尾的数字,根据其实际值所属范围,

可以被用作 byte , short ,或 int 型整数 以 l 或 L 结尾的数字,无论其实际值所属范围怎样,

都被用作 long 型整数

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

Page 17: 第 2 章   Java 语言语法基础

示例 byte b1; \\ 缺省值为 0 byte b2 = 127; \\ 赋初值为 127 short s1 = (short)(b1 + b2); \\ 强制类型转换 short s2 = (short)(b1 + 123) \\ 强制类型转换 int n = b1 + b2; \\ 不需要强制类型转换 long l1 = 2343; \\ 不需要强制类型转换 long l2 = 4294967296L; \\ 必须用 L或 l 结尾 long l3 = 65536*63356; \\ 乘法运算越界, l3为0

long l4 = 65536L*63356; \\ l4为 4294967296L

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

Page 18: 第 2 章   Java 语言语法基础

实型常量1. 十进制数形式由数 字 和 小 数 点组成 , 且 必 须 有 小 数 点 , 如 0.123, .123,

123.,123.0

2. 科学计数法形式如: 123e3 或 123E3 ,其中 e 或 E 之前必须有数字,且 e 或 E 后面的指数必须为整数。

32 位浮点数形式: 0.23f, 1.23E-4f , . 18F

2.2.1 浮点数类型,实型 (float, double)

Page 19: 第 2 章   Java 语言语法基础

实型变量类型为 float 或 double , float 在机器中占 32 位, double 占 64 位。

实型变量的定义如: double d1 = 127.0; \\ 赋初值为 127 double d2 = 127; \\ 赋初值为 127 float f1 = 127.0f; \\ 必须在数字后加 f或 F float f2 = 4.0e38f; \\ 错误! 32 位浮点数不

能超过 \\ 3.4028234663852886e38

float f3 = (float)d1; \\ 必须强制类型转换

2.2.1 浮点数类型,实型 (float, double)

Page 20: 第 2 章   Java 语言语法基础

public class Assign

{

public static void main (String [] args)

{

int x , y ;

byte b = 3;

float z = 1.234f ;

double w = 1.234 ;

boolean flag = true ;

char c ;

c = ‘ a ‘ ;

x = 120 ;

y = 30;

......

}

}

2.2.1 使用举例

Page 21: 第 2 章   Java 语言语法基础

Java 中 的 常 量 值 是 用 文 字 串 表 示 的,它 区 分 为 不 同 的 类 型,如 整 型 常 量 123 ,实 型 常 量 1.23 ,字 符 常 量 ‘ a’ ,布 尔 常 量 true 、 false 以 及 字 符 串 常 量 "This is a language." 。

与 C 、 C++ 不 同, Java 中 不 能 通 过 #define 命 令 把 一 个 标 识 符 定 义 为 常 量,而 是 用 关 键 字 final 来 定义,定义常量的一般格式为:

final 类型 常量标识符 = 常数值; final int MAX_NUM = 100; final double PI = 3.1415926;

2.2.2 常量和变量

Page 22: 第 2 章   Java 语言语法基础

程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为:

类型 变量名 = 值 ; int n1 = 3, n2 = 4;

Java 中变量的缺省初值都是确定的: 布尔变量的初值为: false 整数变量的初值为: 0 浮点数变量的初值为: 0.0 引用(复合)变量的初值为: null 在方法实现中定义的变量必须显式的初始化。

变量的作用域 指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的

作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。

2.2.2 常量和变量

Page 23: 第 2 章   Java 语言语法基础

自动类型转换整型、实型、字符型数据可以混合运算。运算中,不同类型的数

据先转化为同一类型,然后进行运算,转换从低级到高级:低 -----------------------------------------------------> 高

byte,short,char—> int —> long—> float —> double

操作数 1 类型 操作数 2 类型 转换后的类型byte 、 short 、 char int int

byte 、 short 、 char 、 int long long

byte 、 short 、 char 、 int 、 long float float

byte 、 short 、 char 、 int 、 long 、 float double double

2.2.3 数据类型的转换

Page 24: 第 2 章   Java 语言语法基础

数据类型转换必须满足如下规则:不能对 boolean 类型进行类型转换。不能把对象类型转换成不相关类的对象。 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

转换过程中可能导致溢出或损失精度 int i = 8; byte b=(byte)i; (byte)255 == -1 (byte)0x5634 == 0x34

浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入

(int)23.7 == 23 (int)-45.89f == -45

2.2.3 数据类型的转换

Page 25: 第 2 章   Java 语言语法基础

优先级、结合性以及单 /双目运算 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 其他运算符

2.3Java 运算符和表达式

Page 26: 第 2 章   Java 语言语法基础

优先级、结合性以及单 /双目运算1 ) . , [] , () 9 ) &

2 ) ++ , -- , ! , ~ , instanceof 10 ) ^

3 ) new (type) 11 ) |

4 ) * , / , % 12 ) &&

5 ) + , - 13 ) ||

6 ) >> , >>> , << 14 ) ?:

7 ) > , < , >= , <= 15 ) = , += , -= , *= , /= , %= , ^=

8 ) == , != 16 ) &= , |= , <<= , >>= , >>>=

优先级、结合性以及单 / 双目运算

Page 27: 第 2 章   Java 语言语法基础

( 1 )运算符 算术运算符: + ,―, *, /,%, ++ ,―― 关系运算符: > , < , >= , <= , == , != 布尔逻辑运算符: ! , && , || 位运算符: >> , << , >>> , & , | , ^ , ~ 赋值运算符: = ,及其扩展赋值运算符如 += ,― = ,

*= , /= 等。 条件运算符: ? :

Java 运算符和表达式

Page 28: 第 2 章   Java 语言语法基础

其它 分量运算符 · , 下标运算符 [] , 实例运算符 instanceof , 内存分配运算符 new , 强制类型转换运算符 ( 类型 ) , 方法调用运算符 () …

由于数据类型的长度是确定的,所以没有长度运算符 sizeof 。

Java 运算符和表达式

Page 29: 第 2 章   Java 语言语法基础

( 2 )表达式表达式是由操作数和运算符按一定的语法形式组成

的符号序列。 一个常量或一个变量名字是最简单的表达式,其值即该

常量或变量的值; 表达式的值还可以用作其他运算的操作数,形成更复杂

的表达式。例:

x num1+num2a*(b+c)+d3.14 x<=(y+z) x&&y||z

Java 运算符和表达式

Page 30: 第 2 章   Java 语言语法基础

2.4 、 Java 控制结构2.4.1 选择语句: if-else, switch-case

2.4.2循环语句: while, do-while, for

2.4.3跳转语句: continue, break, return

Page 31: 第 2 章   Java 语言语法基础

if(boolean-expression1) {

statements1; }

else if(boolean-expression2) { statements2; } … else { statementsN; }

2.4.1 选择语句: if-else

Page 32: 第 2 章   Java 语言语法基础

布尔表达式 boolean-expression 是任意一个返回布尔数据类型的表达式,而且必须是(比 C 或 C ++要严格)。 与 C 或 C++ 一样,每个单一语句后面都要有分号。为了增强程序的可读性,应将 if 或 else 后的语句用 {} 括起来。 else子句是任选的,不能单独作为语句使用,它必须和if 语句配对使用,并且总是与离它最近的 if配对。int i1 = 123;int i2 = 456;if( i1>i2 ){ System.out.println(“The bigger one is: ”+i1);}else{ System.out.println(“The bigger one is: ”+i2);}

2.4.1 选择语句: if-else

Page 33: 第 2 章   Java 语言语法基础

switch (expression)

{

case value1 :{

statements1; break;}

……case valueN :{ statementsN; break;}[default :{ defaultStatements;}]

}

2.4.1 选择语句: switch

Page 34: 第 2 章   Java 语言语法基础

表达式 expression 的返回值类型必须是这几种类型之一: int 、 byte 、 char 、 short 。 case子句中的值 valueI 必须是常量,而且所有case子句中的值应是不同的。 default子句是任选的。 break 语句用来在执行完一个 case 分支后,使程序跳出 switch 语句,即终止 switch 语句的执行。(如果某个 case 分支后没有 break 语句,程序将不再做比较而执行下一个分支。) switch 语句的功能可以用 if-else 语句来实现,但某些情况下,使用 switch 语句更简炼。

2.4.1 选择语句: switch

Page 35: 第 2 章   Java 语言语法基础

int a = 100;int b = 20;int c; char oper = ‘+’;switch(oper){

case ‘+’:{ c = a + b; break;}case ‘-’:{ c = a - b; break;}default :{ c = a * b; break;}

}

2.4.1 选择语句: switch

Page 36: 第 2 章   Java 语言语法基础

循环语句 while (当型循环) [initialization] // 初始化条件 while (termination){ //循环条件

body; //循环体[iteration;] //迭代,变更循环条件

}

当表达式 termination 为 true 时,执行 {} 中的语句,否则终止循环。

t

b

false

true

2.4.2 循环语句: while

Page 37: 第 2 章   Java 语言语法基础

循环语句 do-while (直到型循环) [initialization] // 初始化条件 do{

body; //循环体[iteration;] //迭代,变更循环条

件 } while (termination) ; //循环条件

首先执行一遍 {} 中的语句,当表达式termination 为 true 时,继续执行 {} 中的语句,否则终止循环。

t

b

false

true

2.4.2 循环语句: do-while

Page 38: 第 2 章   Java 语言语法基础

循环语句 for (另一种当型循环)for (initialization; termination; iteration)

{

body; //循环体}

initialization // 初始化条件 termination //循环条件 iteration //迭代,变更循环条件

t

body

false

true

itera

init

2.4.2 循环语句: for

Page 39: 第 2 章   Java 语言语法基础

for 语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。 初始化、终止以及迭代部分都可以为空语句 (但分号不能省 ) ,三者均为空的时候,相当于一个无限循环。 在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。

for( int i=0, int j=10; i<j; i++, j--){……}

2.4.2 循环语句: for

Page 40: 第 2 章   Java 语言语法基础

int n = 1, sum = 0;while ( n<=10 ){ sum = sum + n; n++;}

int n = 10, sum = 0;do{ sum += n; n--;}while( n>0);

int sum =0;for( int i=1; i<=10; i++ ){ sum += i;}

while 循环

do-while 循环

for 循环

2.4.2 循环语句

Page 41: 第 2 章   Java 语言语法基础

continue 语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于 for 语句,在进行终止条件的判断前,还要先执行迭代语句。它的格式为:

continue; 也可以用 continue跳转到括号指明的外层循环中,这时

的格式为continue outerLable;

2.4.3 跳转语句: continue

Page 42: 第 2 章   Java 语言语法基础

outer: for( int i=0; i<10; i++ ) // 外层循环{

inner: for( int j=0; j<10; j++ ) // 内层循环 {

if( i<j )

{

……

continue outer;

}

……

} // 内层循环结束 ……

} // 外层循环结束

for( int i= 0; i <10; i++ ){ if( i == 5 ) { continue; } ……}

2.4.3 跳转语句: continue

Page 43: 第 2 章   Java 语言语法基础

在 switch 语中, break 语句用来终止 switch 语句的执行,使程序从整个 switch 语句后的第一条语句开始执行。

在循环语句中, break 用于终止并跳出循环,从紧跟着循环体代码段后的语句执行。

在 Java 中,可以为每个代码块加一个标号,一个代码块通常是用大括号 {} 括起来的一段代码。加标号的格式为:

BlockLabel: { codeBlock; }

break 语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块后的第一条语句处执行。

BlockLabel: { codeBlock; break BlockLabel ; codeBlock;}

2.4.3 跳转语句: break

Page 44: 第 2 章   Java 语言语法基础

a:{ // 标记代码块 a

……

b:{ // 标记代码块 b

……

c:{ // 标记代码块 c

……

break b;

…… // 这段语句将不执行 } // 代码块 c 结束 …… // 这段语句也不执行 } // 代码块 b 结束 …… // 从这段语句开始执行} // 代码块 a 结束

2.4.3 跳转语句: break

Page 45: 第 2 章   Java 语言语法基础

return 语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:

return expression; // 当方法需要返回某种类型数据时

return; // 当方法的返回类型为 void 时 单独一条 return 语句放在方法中间时,会产生编译错误 , 因为其后的语句将不会执行到。若真需要退出方法,可以通过将 return 语句嵌入某些语句(如 if-else )来使程序在未执行完方法中所有语句时退出。

2.4.3 跳转语句: return

Page 46: 第 2 章   Java 语言语法基础

例 1 :输入三个数并返回其中最大的一个数 MaxOfThreeNumber

Page 47: 第 2 章   Java 语言语法基础

百分制成绩转化为等级成绩 GradeScorePrint

For 结构 Switch 结构

Page 48: 第 2 章   Java 语言语法基础

最大公约数算法

Page 49: 第 2 章   Java 语言语法基础

2.5 小结

本章介绍 Java 的各种语法规则:各种数据类型(包括简单数据类型和复杂数据类型),运算符(一元运算符,二元运算符,三元运算符以及特殊运算符)和表达式,流程控制(条件控制,循环控制, switch 多分支控制, break 语句, contiune 语句等)。此外,针对具体的数据类型、运算符以及控制语句,我们都给出了相应的实例以供大家更进一步的学习相关内容。

Page 50: 第 2 章   Java 语言语法基础

练习( 1 )

1. 下列标识符中,哪些是合法的变量名,哪些是不合法的变量名?( 1 ) char ( 2 ) 2abc ( 3 ) $_isTrue ( 4 ) i+j ( 5 ) _istrue ( 6 )变量 6 ( 7 ) String ( 8 ) 3.141592.判断下面的程序段是否正确,若有错误,错在哪里,应该如何改正,并且测试改正后的输出果。public static void main(String[] args){ch = ‘a’;char ch;System.out.println(“ch=”+ch);}

Page 51: 第 2 章   Java 语言语法基础

练习( 1 )

1. 下列标识符中,哪些是合法的变量名,哪些是不合法的变量名?( 1 ) char ( 2 ) 2abc ( 3 ) $_isTrue ( 4 ) i+j ( 5 ) _istrue ( 6 )变量 6 ( 7 ) String ( 8 ) 3.141592.判断下面的程序段是否正确,若有错误,错在哪里,应该如何改正,并且测试改正后的输出结果。public static void main(String[] args){

ch = ‘a’;char ch;System.out.println(“ch=”+ch);

}

Page 52: 第 2 章   Java 语言语法基础

练习( 2 )3. 写出下面程序的运行结果。

// 第 2 章习题 3 , Examplex2_3.javapublic class Example2_3{

public static void main(String[] args){int x = 1,a = 0,b = 0;switch(x){

case 0: b++;case 1: a++;case 2: a++,b++;

}System.out.prinln(“a=”+a);System.out.prinln(“b=”+b);

}}

Page 53: 第 2 章   Java 语言语法基础

4. 写出下面表达式的最后运算结果,并且令 a = 1,b = 2,c =3,d = false 。

( 1 ) a+=b--/++c;( 2 ) d = !((a>=--b/b+

+<=c--)&&a==b);( 3 ) d = b>c^a!=c;5. 编写 Java 程序,计算小于一个整数的全部素

数并输出。6. 编写 Java 程序,计算 sum = 1!+2!+……

+10! 。

练习( 3 )

Page 54: 第 2 章   Java 语言语法基础

练习( 4 )

7. 编写 Java 程序,输出从公元 1990年到2007年所有闰年的年号,每输出两个年号换一行。判断年号是否为闰年的条件是:

( 1 )若年号能被 4 整除,而不能被 100整除,则是闰年;

( 2 )若年号能被 400 整除也是闰年。

Page 55: 第 2 章   Java 语言语法基础

练习( 5 )

8. 利用 for循环编写一个程序,将如下图案分别打印输出。

* *** ************ ***** *** *

Page 56: 第 2 章   Java 语言语法基础

练习( 6 )

9. 编写一个方法来计算正方形的面积和周长。

10. 编写程序找出所有的水仙花数;水仙花数是三位数,它的各位数字的立方和等于这个三位数本身。

Page 57: 第 2 章   Java 语言语法基础

下课!