第2章 java 基本语法

47
南南南南南南 南 2 南 Java 南南南南 南南南南南南南 Java 南南南南南南南南南 南南南南南 南南南南 南南南南 南南南 南南南南 南南南 南南南南南南南南南南南南南南 ,、、、、、、。 南南南南南南南南南public class Test{ public static void main(String []args){ // 南南南南南南南南 ... } }

Upload: erling

Post on 22-Jan-2016

145 views

Category:

Documents


0 download

DESCRIPTION

第2章 Java 基本语法. 本章我们将学习 Java 编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ // 以下添加测试代码 ... } }. 2.1变量. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第2章  Java 基本语法

南京理工大学

第 2 章 Java 基本语法 • 本章我们将学习 Java 编程语言的基本语法,包括变量、操作符、表达式、语句、

字符串、数组、控制流以及如何使用帮助文档。• 使用下面的编程框架: public class Test{ public static void main(String []args){ // 以下添加测试代码 ... } }

Page 2: 第2章  Java 基本语法

南京理工大学

2.1 变量 • 所谓变量,就是由标识符命名的数据项。每个变量都必须声明数

据类型,变量的数据类型决定了它所能表示值的类型以及可以对其进行什么样的操作。变量既可以表示基本数据类型 ( 如整型int 、字符型 char 等 ) 的数据,也可以表示复合数据类型 ( 对象类型,如字符串 ) 的数据。

• 当变量是基本数据类型时,变量中存储的是数据的值,而当变量是复合数据类型 ( 对象 ) 类型时,变量中存储的是对象的地址,该地址指向对象在内存中的位置。

197salary 0X16EFemployee

姓名: Tom性别:男

Page 3: 第2章  Java 基本语法

南京理工大学

2.1.1 基本数据类型 • 2.1.1.1 整型 (byte 、 short 、 int 、 long)

• 2.1.1.2 浮点类型 (float 、 double)

• 2.1.1.3 字符类型 (char)

• 2.1.1.4 布尔类型 (boolean)

Page 4: 第2章  Java 基本语法

南京理工大学

2.1.1.1 整型 • Java 语言中提供了四种整型数据类型: byte 、 short 、 int 和

long

类型 大小 / 格式 描述

byte 8 位二进制 字节整型

short 16 位二进制 短整型

int 32 位二进制 整型

long 64 位二进制 长整型

√ 许多语言中,基本数据类型的格式和大小与程序运行的平台密切相关,这是产生程序跨平台困难的主要原因之一。 Java 语言中,对每种基本数据类型都限定了固定的格式和大小,因此消除了数据类型对平台的依赖性。

Page 5: 第2章  Java 基本语法

南京理工大学

例子 int salary=197; long salary=197L; long salary=197l;

测试: public class Test{ public static void main(String []args){ // 以下添加测试代码 int salary=197; long salary=197L; } } ( 注: salary 重复定义 )

Page 6: 第2章  Java 基本语法

南京理工大学

2.1.1.2 浮点类型 • 浮点类型用来表示有小数的数值。分为两类,单精度浮点类型 (float) 和双精度浮点

类型 (double)

• 三个特殊值,正无穷、负无穷和非数字 Double.POSITIVE_INFINITY (Float.POSITIVE_INFINITY) Double.NEGATIVE_INFINITY (Float. NEGATIVE _INFINITY) Double.NaN (Float.NaN)

类型 大小 / 格式 描述

float 32 位 IEEE 754 规范

单精度浮点类型

double 64 位 IEEE 754 规范

双精度浮点类型

Page 7: 第2章  Java 基本语法

南京理工大学

例子• float miles=0.9f; 或是 float miles=0.9F;• float miles=0.9; //Error• double miles=0.9; double miles=0.9D; double miles=0.9d;• double weight=Double.POSITIVE_INFINITY; • Float weight = Float.

Page 8: 第2章  Java 基本语法

南京理工大学

2.1.1.3 字符类型 • Unicode 编码采用 16 位的编码方式,因此可以对 65536 种字符进行编码,能够

容纳目前世界上已知的字符集。 • char kind='I'; // 给字符变量 kind 赋值 'I' • char kind ='\u0049'; // 给字符变量 kind 赋‘ I’ 的 Unicode 编码值 // 等价于 char kind='I';

类型 大小 / 格式 描述

char 16 位 Unicode 编码

表示单个字符

Page 9: 第2章  Java 基本语法

南京理工大学

转义字符

• 问题:如何在屏幕上输出“ This is a char test”( 双引号也要输出 ) ?

转义字符 含义 Unicode 编码值\b 退格 \u0008

\t 制表 \u0009

\n 换行 \u000a

\r 换行 \u000d

\" 双引号 \u0022

\' 单引号 \u0027

\\ 反斜杠 \u005c

Page 10: 第2章  Java 基本语法

南京理工大学

2.1.1.4 布尔类型

• 布尔类型 (boolean) 的值只有两个 true 或是 false ,分别表示真或是假,用于逻辑条件的判断。

√ 在 C/C++ 中 , 数 值 也 可 以 充 当 布 尔 类 型 的 值 : 0 相 当 于false , 非 0 值 相 当 于 true 。 这 就 使 得 很 容 易 在 程 序 中 引 入bug ,例如下面的 if 语句:if(age=0) // 判断 age 是否为 0在 C/C++ 中是可以编译运行的。但是该语句隐含了一个 bug ,因为不管 age 的实际值是什么,总是判定 if 语句不成立。而在Java 中,该语句是不能编译通过的,必须使用:if(age==0) // 判断 age 是否为 0

Page 11: 第2章  Java 基本语法

南京理工大学

2.1.2 变量

变量声明 VariableType variableName ; 几条规则  (1)   变量名称是由 Unicode 字母或是数字组成的不间断序列 ( 中间不能有空格 ) ,长度不限,并且必须以字母开头。

   (2)   变量名称不能是系统关键字 ( 如 int 、布尔值 (true 或是 false) 或是保留字 ( 例如: null)

(3) 在相同的作用域内 (参看下一小节-变量作用域 ) ,不能重复声明同一变量名。

例如: int length; float miles; boolean flag;

Page 12: 第2章  Java 基本语法

南京理工大学

2.1.3 变量作用域

• 变量定义所在的位置决定了变量的作用域,根据变量定义所在的位置不同,可以分为以下 4 类:

• (1) 类成员变量• (2) 局部变量• (3) 方法参数变量• (4) 异常处理参数变量

Page 13: 第2章  Java 基本语法

南京理工大学

Page 14: 第2章  Java 基本语法

南京理工大学

2.1.4 变量初始化 • 变量在声明后,可以通过赋值语句对其进行初始化。初始化后的变量仍然可以通

过赋值语句赋以其他不同的值。 • double salary; // 变量声明• salary=200d; //初始化赋值• salary=400d; // 重新赋值,但不是初始化• 变量还可以声明及初始化同时进行: double salary=200d; 需要注意的是,给变量赋值必须类型要匹配,即变量的数据类型要和所赋值的数

据类型一致。

Page 15: 第2章  Java 基本语法

南京理工大学

final 类型 • final 类型的变量在初始化后就不能再重新对其赋值,常用于表示一些固定不变的

值。 final double PI = 3.1415926; // 声明并初始化一个常量 PI=3.14; // 出错,不能修改已经初始化的常量的值 滞后初始化的方法: final double A_CONSTANT; // 声明,未初始化 ... A_CONSTANT = 0.9; //滞后初始化

√常量一旦初始化,不能对其重新赋值。√ 习惯上,常量名中所有的字符均大写。

Page 16: 第2章  Java 基本语法

南京理工大学

2.2 操作符 • 一元操作符• 二元操作符• 三元操作符

Page 17: 第2章  Java 基本语法

南京理工大学

2.2.1算术操作符

操作符 使用方法 功能描述

+ x+y 将 x 和 y 的值相加

- x-y 从 x 中减去 y

* x*y 将 x 和 y 相乘

/ x/y x 除以 y

% x%y x 模 y

Page 18: 第2章  Java 基本语法

南京理工大学

2.2.2 关系与条件操作符

关系操作符

使用方法 功能描述

> x>y 若 x 大于 y ,取值 true; 否则取值false

>= x>=y 若 x 大于或是等于 y ,取值 true; 否则取值 false

< x<y 若 x 小于 y ,取值 true; 否则取值false

<= x<=y 若 x 小于或是等于 y ,取值 true; 否则取值 false

== x==y 若 x 等于 y ,取值 true; 否则取值false

!= x!=y 若 x 不等于 y ,取值 true; 否则取值false

 

关系运算符

Page 19: 第2章  Java 基本语法

南京理工大学

条件运算符

条件操作符 使用方法

功能描述

&& x&&y “条件与”: x 和 y均为 true ,取值 true; 否则取值 false

|| x||y “条件或”: x 和 y至少一个 true ,取值 true;否则取值 false

! !x “非”: x 为 false ,取值 true; 否则取值 false

& x&y “与”: x 和 y均为 true ,取值 true; 否则取值false

| x|y “或”: x 和 y至少一个 true ,取值 true; 否则取值 false

^ x^y “异或”: x 和 y 值相异,取值 true; 否则取值false

Page 20: 第2章  Java 基本语法

南京理工大学

2.2.3 位操作符

操作符 使用方法

功能描述

& x&y x 和 y按位进行与运算

| x|y x 和 y按位进行或运算

^ x^y x 和 y按位进行异或运算

~ ~x x按位进行非运算

>> x>>y 将 x 的二进制编码右移 y 位

<< x<<y 将 x 的二进制编码左移 y 位

>>> x>>>y

将 x 的二进制编码右移 y 位

Page 21: 第2章  Java 基本语法

南京理工大学

2.2.4 其他类型操作符

操作符 功能描述

[ ] 声明、创建数组以及访问数组中的特定元素

. 访问类成员变量、实例成员变量

(参数 ) 定义、调用方法

( 数据类型 ) 强制类型转换

new 创建对象、数组

instanceOf

判断一个对象是否为一个类的实例

Page 22: 第2章  Java 基本语法

南京理工大学

2.2.5 数字类型转换 • 自动数字类型转换

算术运算结果数据类型

操作数数据类型

double 至少有一个操作数是 double 类型

float 至少有一个操作数是 float 类型 ,并且没有操作数是double 类型

int 操作数中没有 float 和 double 数据类型 , 也没有 long数据类型

long 操作数中没有 float 和 double 数据类型 , 但至少有一个是 long 数据类型

Page 23: 第2章  Java 基本语法

南京理工大学

• 强制类型转换 double salary=103.34; int intSalary=(int)salary; //intSalary 的值为 103

Page 24: 第2章  Java 基本语法

南京理工大学

2.2.6 操作符优先级 操作符 结合性[] . () 从左向右

! ~ ++ -- () new 从右向左* / % 从左向右

+ - 从左向右<< >> >>> 从左向右

< <= > >= instanceOf 从左向右== != 从左向右

& 从左向右^ 从左向右| 从左向右

&& 从左向右|| 从左向右?: 从左向右

= += -= *= /= %= &= |= ^= <<= >>= >>>= 从右向左

Page 25: 第2章  Java 基本语法

南京理工大学

2.3 字符串 • 字符串是字符组成的序列,用双引号括起来的一个字符序列构成了字符串,

如“ this is a string” 。字符串不是 Java 语言中的基本数据类型,而是对象类型 (String 类的实例 ) 。

• String aStr1="This is a string";• String aStr2=new String("This is a string");• String aStr3=""; //空字符串• String aStr4=null; //空值

√ null 是一个特殊的空值,可以赋值给任何对象类型的变量。上面的例子中 aStr3 和 aStr4 是不同的, aStr3 指向内存中的一个字符串对象( 但是该字符串对象中没有任何字符 ) ; aStr4 由于是一个空值,所以不指向任何字符串对象。√ 字符串被创建后,其中的内容不能再改变。如果要改变字符串的内容,需要重新生成新的字符串对象。

Page 26: 第2章  Java 基本语法

南京理工大学

String aStr="abc"; // (1) aStr 指向内存中的一个字符串对象 "abc" aStr="xyz"; // (2) aStr 指向内存中重新生成的一个对象 "xyz"

可以使用打印语句将字符串的内容打印出来,如:String aStr="abc";System.out.println(aStr);

Page 27: 第2章  Java 基本语法

南京理工大学

2.3.1 字符串连接 • 操作符“ +”把两个字符串连接起来形成新的字符串 String aStr="abc"+" "+"xyz"; // aStr="abc xyz"String aStr="value="+20; // aStr="value=20"String aStr="value="+true; // aStr="value=true"Double d=new Double(33.34); // d 是一个对象String aStr="value="+d; // aStr="value=33.34"

Page 28: 第2章  Java 基本语法

南京理工大学

2.3.2修改字符串

(1) length() 来取得字符串的长度 String aStr="HelloWorld"; int size=aStr.length(); //size 的值为 10 (2) charAt(i) ,该方法返回一个字符值 String aStr="HelloWorld"; char aChar=aStr.charAt(0); //aChar= 'H‘ (3)substring() 方法来获取一个字符串的子串: String aStr="HelloWorld"; String subStr=aStr.substring(0,4); //subStr="Hell";

Page 29: 第2章  Java 基本语法

南京理工大学

2.3.3 判断字符串是否相等 String aStr="HelloWorld!";String bStr="HelloWorld!";if(aStr==bStr) { //错误 , 这种判断方式是不可靠的 ...}

if(aStr.equals(bStr)){ // 正确 ...}

Page 30: 第2章  Java 基本语法

南京理工大学

2.3.4 使用帮助文档 • 例子:查看 String 类中的 charAt() 方法的详细使用信息 ?• 方法一 • 方法二• 方法三

Page 31: 第2章  Java 基本语法

南京理工大学

2.4 控制流 • 2.4.1 if 条件语句 • 2.4.2 for 循环语句 • 2.4.3 while/do while 循环语句 • 2.4.4 switch 分支选择语句 • 2.4.5 break 、 continue

Page 32: 第2章  Java 基本语法

南京理工大学

2.4.1 if 条件语句 if( 条件表达式 ){ 语句 ; ... 语句 ;}

if 嵌套

举例说明

Page 33: 第2章  Java 基本语法

南京理工大学

2.4.2 for 循环语句

举例 : 将 1-100 中的奇数相加之和输出将 1-100 中的偶数相加之和输出

Page 34: 第2章  Java 基本语法

南京理工大学

2.4.3 while/do while 循环语句 while( 条件表达式 ){ 语句 ; ... 语句 ;}

do{ 语句 ; ... 语句 ; } while( 条件表达式 ); // 注意,这里要以分号结束

Page 35: 第2章  Java 基本语法

南京理工大学

例:费氏数列

• 费氏数列是由 13 世纪的意大利数学家、来自 Pisa 的 Leonado Fibnacci发现。

• 费氏数列是由 1 , 1 开始,之后的每一项等于前两项之和:• 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144...... 。• 这个数列有如下一些特性:

– 前 2 个数相加等于第 3 个数– 前 1 个数除以后一个数越往后越无限接近于 0.618 (黄金分割 )– 相邻的两个比率必是一个小于 0.618 一个大于 0.618– 后 1 个数除以前一个数越往后越无限接近于 1.618– …

Page 36: 第2章  Java 基本语法

南京理工大学

2.4.4 switch 分支选择语句

• switch 语句从与选择值相匹配的 case标签处开始执行,一直执行到 break处 (执行 break 将跳出 switch 语句 ) 或是 switch 的末尾。注意, switch只能接收整数类型的值。此外,当传递进来的值与所有的 case标签均不匹配时,如果 switch 中含有 default标签,将执行 default标签后面的语句;如果 default标签也不存在,那么 switch 中没有任何语句得到执行。

• 还有一点需要注意的就是:如果一个 case 子句后面不加 break ,那么当该子句执行完毕后,下一个 case 子句将被继续执行,直至遇到 break 或是switch 语句结束

Page 37: 第2章  Java 基本语法

南京理工大学

2.4.5 break 、 continue

• breakfor(...){ while(...){ if(...) break; ... }}

abc:for(...){ while(...){ if(...) break abc; ... }}

Page 38: 第2章  Java 基本语法

南京理工大学

2.5 数组• 2.5.1 一维数组 • 2.5.2 数组拷贝 • 2.5.3 多维数组

Page 39: 第2章  Java 基本语法

南京理工大学

2.5.1 一维数组

• 数组是用来存放多个同类型值的一种结构,数组本身也是对象。数组一旦创建完毕,就不能再改变其长度 ( 所能存储同类型值的个数 )

• int[] anIntArray; // 声明一个数组 • int anIntArray [];• 访问数组元素使用格式:数组名 [ 位置索引 ]for(int i = 0; i<anIntArray.length; i++){anIntArray[i] =8-i; // 数组元素赋值 System.out.print(anIntArray[i]+ " "); //打印数组元素}• 如果要取得数组的长度,可以使用:数组名 .length• 创建数组的同时进行赋值: int[]anIntArray={8,7,6,5,4,3,2,1};

Page 40: 第2章  Java 基本语法

南京理工大学

2.5.2 数组拷贝 public static void arraycopy(Object src, int srcIndex, Object dest, int

destIndex, int length)

System.arraycopy(src,2,dest,5,3);

Page 41: 第2章  Java 基本语法

南京理工大学

2.5.3 多维数组 • 数组中的数组元素可以是基本数据类型的值,也可以是对象类型的值。由于

数组也是对象,因此,数组中的每个元素还可以是一个数组。int [][]m=new int[3][4];还可以使用下面的方式:int [][]m=new int[3][]; //先生成一个长度为 3 的数组for(int i=0;i<m.length;i++) m[i]=new int[4]; // 每个数组元素为一个长度为 4 的子数组

Page 42: 第2章  Java 基本语法

南京理工大学

不规则数组int [][]m=new int[3][]; //先生成一个长度为 3 的数组m [0]=new int[4]; // 长度为 4 的子数组m [1]=new int[2]; // 长度为 2 的子数组m [2]=new int[3]; // 长度为 3 的子数组

如果已经知道该不规则数组中要存储的值,也可以使用如下方式::int [][]m={{0,1,2,3}, {4,5},{8,9,10}};

遍历该二维数组:for(int i=0;i<m.length;i++){ for(int j=0;j<m[i].length;j++){

System.out.print(m[i][j]+" "); }

System.out.println();}

Page 43: 第2章  Java 基本语法

南京理工大学

1. 查找二维数组中的最大最小值、矩阵相乘 (for/while)

4. 月份转换 (switch) 要求 : 命令行输入数字月份 , 在屏幕上输出 Jan/Feb/Mar……

3. 月份转换为季度 (switch) 要求 : 命令行输入数字月份 , 在屏幕上输出一季度 / 二季度 / 三季度……

2. 计算 Cnk

要求 : 命令行输入 n 及 k, 在屏幕上输出 Cnk 的值

Page 44: 第2章  Java 基本语法

南京理工大学

给出一个求解二项式系数 Cnk 的程序

11 1

1 , k==0||k==n

+ , 0<k<nkn k k

n n

CC C

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

0 1 2 3 n

0

1

2

3 n

Page 45: 第2章  Java 基本语法

南京理工大学

输入:整数 n , k输出:二项式系数 Cn

k

1. If k==0 || n==k return 1;2. for i ← 0 to n3. C[i,0] ← 14. C[i,i] ← 15. end for6. for i ←2 to n7. for j ←1 to i-18. C[i,j] ← C[i-1,j-1] + C[i-

1,j]9. end for10.end for11.Return C[n,k]

If i=n and j=k then break不会影响时间复杂度

Page 46: 第2章  Java 基本语法

南京理工大学

方法 (method)

• 方法名• 返回值• 形参• 实参

使用递归方法求解二项式系数 Cnk

Page 47: 第2章  Java 基本语法

南京理工大学

参数传递• 参数为基本数据类型• 参数为对象类型