第二章 Java语言基础知识
【课前思考】
1. Java中的标识符是由哪些字符组成的?
2. Java中有哪些保留字?简单数据类型包含哪几种?各种数据类型变量的定义方法和常量的表示方法及取值范围。
3. Java 中各简单数据类型间的优先次序和自动转换规则是什么?
各数据类型间在什么情况下,进行自动转换,在什么情况下使用强制转换?
4. Java中有哪些运算符?这些运算符的优先关系是怎样的?
5. Java 中有哪些控制语句?你了解每一种控制语句的语法规则吗?
6. Java 中的一维数组和多维数组在数组动态初始化和静态初始化时有何不同?
7. Java中的字符串有两种表示方法,这两种表示方法有什么不同?
8. 如何访问字符串?如何修改字符串?如何对两个字符串进行比较?
【学习目标】
本讲主要讲述java编程语言的基本语法知识,如java 中的简单数据类型,运算符和表达式,控制语句,数组及字符串的处理。通过本讲的学习,同学们可以编写简单的java程序。
【学习指南】
同任何一种编程语言一样,应深刻理解各知识点的概念,牢记一些java的语法,从而达到学习的目的。
【难 重 点】
重点:
l 深刻理解各知识点的概念,并熟记java 的语法规范。
l 熟练使用各种数据类型的定义,表示和引用。
l 能熟练使用各种控制语句。
l 能熟练处理字符串。
难点:
l 动态初始化复杂类型数组时,要先为数组中的元素开辟引用空间,再为每个元素开辟空间。
l 使用StringBuffer类表示和操作字符串时,要注意它可以处理可变字符串,即当在StringBuffer类型的字符串中插入字符而超出已分配的缓冲区时,系统会自动地为它分配额外的空间。
【知 识 点】
l 简单数据类型
l 运算符和表达式
l 控制语句
l 数组
l 字符串的处理
【内 容】
第一节 Java语言的基本组成
Ø 标识符
在Java中,所有的标识符都必须以一个字母、下划线或美元符号“$”开头。后面可以包含字母、数字、下划线和美元符号。
Java语言区分字母大小写。
Ø 关键字
关键字是Java语言本身使用的标识符,它有其特定的语法含义。所有的Java关键字将不能被用作标识符,关键字用英文小写字母表示。
Java关键字有:
abstract else interface super
Boolean extends long switch
break false native synchronized
byte final new this
case finally null throw
catch float package throws
char for private transient
class if protected true
countinue implements public try
default import return void
do instanceof short while
double int static
Ø 分隔符
分隔符是用来区分源程序中的基本成分,可使编译器确认代码在何处分隔。分隔符有注释、空白符和普通分隔符三种。
,逗号 分隔变量声明中连续的标识符,或在for语句中连接语句。
;分号 语句(statement)结束符。
。句号 用于分隔包、子包和类或分隔引用变量中的变量和方法。
()括号 用于在方法定义和访问中将参数表括起来,或在表达式中定义运算的先后顺序,或在控制语句中将表达式和类型转换括起来。
[]方括号 用于声明数据类型,及引用数组的元素值。
{}花括号 它将若干语句序列括起来作为一个程序代码块,或为数组初始化赋值
三种注释方式:
(1) // 单行注释符。
(2) /*……*/ 块注释符。
(3)/**……*/ 文档注释。
第二节 数据类型
Ø 基本数据类型
数据类型说明了常量、变量或表达式的性质。Java的数据类型可分为基本类型、数组类型和复合类型三种。
Ø 常量
常量是指在程序中直接给出的一个符号串,作用是为变量赋值或参与表达式的运算。它可以是一个具体的数值或字符串。
Ø 变量
变量是程序中存储单元的标识符表示,是内存中的一块空间,提供了可以存放信息和数据的地方,具有记忆数据的功能。通常用字母或单词作为变量名。
附录1:
Java的四种整型
类型 | 数据位 | 范围 |
字节型byte | 8 | -128 到127 |
短整整short | 16 | -32768 到 32767 |
整型int | 32 | -2147483648到 2147483647 |
长整型long | 64 | -9223372036854775808 到 9223372036854775807 |
附录2
Java的两种浮点型
类型 | 数据位 | 范围 |
单精度浮点 float | 32 | 3.4E-038 到 3.4E+038 |
双精度浮点 double | 64 | 1.7E-308 到 1.7E+308 |
第三节 运算符与表达式
Ø 运算符
Java的运算符代表着特定的运算指令,程序运行时将对运算符连接的操作数进行相应的运算。
Java提供了十分丰富的运算符,Java的运算符主要分为4类:算术运算符、位运算符、关系运算符和布尔运算符。
1. 算术运算符
Java的的算术运算符分为一无运算符和二元运算符。一无运算符只有一个操作数,而二元运算符有两面三刀个操作数参加运算。
(1) 二元运算符:一元正(+),一元负(-),加1(++)和减1(――)。
例如:
int i=10,j,k,m,n;
j=+i;
k=-i;
m=i++;
m=++i;
n=--i;
n=i--;
一元运算符与操作数之前不允许空格。加1减1运算符不能用于表达式,只能用于简单变量。
(2)二元运算符;加(+)、减(-)、(*) 、 除(/)和取余(%)
其中,=、-、*、/完成加、减、乘、除四则运算,%则是求两面三刀个操作数相除的余数。这五种运算符均适用于整型和浮点型。当在不同数据类型的操作数之间进行算术运算时,所得结果的类型与精度最高的那种类型一致。例如:
7/2=3
7.0/2=3.5
7%2=1
7.0%2=1.0
-7%2=-1
7%-2=1
2. 位运算符
位运算符是对整数中的位进行测试、置位或移位处理,是对数据进行按位操作的手段。Java的位操作数只限于整型。
Java的位运算符有:非(~)、与(&)、或(|)、异或(^)、右移(>>)左移(<<)、0填充的右移(>>>).
位运算符的真值表
A | B | A&B | A|B | A^B | ~A |
0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 0 | 0 |
例如,
~4=-5 等价于二进制 ~00000100=11111011
6|2=6 等价于二进制 0110|0010=0110
4&2=0 等价于二进制 0100&0010=0000
6^2=4 等价于二进制 0110^0010=0100
9>>2=1 1001右移2位为0001
1<<2=4 0001左移2位为0100
3. 关系运算符
关系运算符用于比较两个值之间的大小,结果返回布尔值。关系运算符有六种:等于,不等于,大于,大于等于,小于,小于等于。
4. 布尔运算符
布尔运算符只能处理布尔值,所得结果都是布尔值。
Java的布尔运算符有:逻辑与(&)、逻辑或(|)逻辑非(!)、逻辑异或(^)、条件与(&&)和条件或(||)。
布尔运算符真值表
A | B | A&B | A|B | A^B | !A |
F | F | F | F | F | T |
T | F | F | T | T | F |
F | T | F | T | T | T |
T | T | T | T | F | F |
5. 其它运算符
1) 赋值运算符与其他运算符的简捷使用方式
赋值运算符可以与二元、布尔和位运算符组合成 简捷的使用方式,从而简化一些常用的表达式。
2) 运算符[]与()
方括号[]是数组运算符,括号用于改变表达式 中运算符的优先级。
3) 字符串合并运算符
Java用“+”运算符来合并两个字符串。当“+”合并 一个字符串与一个操作数时,Java自动将操作数 转化为字符串。
4) 三元条件运算符(?:)
该运算符的格式如下;
<表达式1>?<表达式2>:<表达式3>
该运算符的作用是:先计算表达式1的值,当值 为真时,则将表达式2的值作为整个表达式的值; 反之则将表达式3的值作为整个表达式的值。
5) 对象运算符instanceof
对象运算符instanceof用来测试一个指定对象是指定类(或它的子类)的实例,若是则返回true,否则 返回fales。
6) 强制类型转换符
Java强制类型转换符能将一个表达式的类型强制转换为某一指定类型,格式如下
(<类型>)<表达式>
7) 点运算符
点运算符“.”的作用有两个:一个是引用类中成员,二是分隔包(package)的各个域
6. 运算符的的优先级
优先级 | 运算符 | 结合性 |
1 | . [] ; , |
|
2 | ++ -- += ~ !+-(一元) | 右—左 |
3 | * / % | 左—右 |
4 | + -(二元) | 左—右 |
5 | << >> >>> | 左—右 |
6 | < > <= >= instanceof | 左—右 |
7 | == != | 左—右 |
8 | & | 左—右 |
9 | ^ | 左—右 |
10 | | | 左—右 |
11 | && | 左—右 |
12 | || | 左—右 |
13 | ?: | 右—左 |
14 | = *= /= %= += -= <<= >>= >>>= &= ^= |= | 右—左 |
Ø 表达式
表达式是算法语言的基本组成部分,它表示一种求值规则,通常由操作数、运算符和圆括号组成。操作数是参加运算的数据,可以是常量、常数、变量或成员方法引用。表达式中出现的变量名必须已经被初始化。
表达式按照运算符的优先级进行计算,求得一个表达式的值。Java规定了表达式的运算规则,对操作数类型、运算符性质、运算结果类型及运算结果类型及运算次序都做了严格的规定,程序员使用时必须严格遵循系统的规定,不能自定义。
例如:
(1+I)*2 // 结果为int
(I>=0)&(I<=9) // 结果为boolean
“Abc”+”xyz” // 结果为string
表达式的类型取决于其中的运算结果。
例 2.1 求一个三位数的数字之和。
首先求得这个三位数的、十、百位上的数字,将各位数字相加就是该三位数的数字之和。本例演示整数类型的运算。程序如下:
public class Digsum3
{
public static void main(String args[])
{
int n=123,a=0,b=0,c=0,digsum=0;
a = n % 10; //个位
b = (n%100) /10; //十位
c = n / 100; //百位
digsum=a+b+c;
System.out.println("Digsum("+n+") = "+digsum);
}
}
程序运行结果:
Digsum(123)=6
例 2.2 求圆的面积。
给出一个圆的半径,可以求出圆的面积值。本例演示浮点数类型的运算,定义PI为浮点型常量。程序如下:
public class Circle_area
{
public static void main(String args[])
{
final float PI= 3.14f ;
float r= 2.5f ,area;
area=PI*r*r;
System.out.println("Area("+r+") = "+area);
}
}
程序运行结果:
Area(2.5)=19.625
第四节 流程控制
按程序的执行流程,程序的控制结构可分为3种:顺序结构、分支结构和循环结构。
1 顺序结构
一般情况下,程序按语句的书写次序依次顺序执行,顺序结构是最简单的一种基本结构。
2 分支结构
Java有两种分支语句实现分支结构,if语句实现二路分支,swicth语句实现多路分支。
1) if 语句
if 语句的定义形式为:
if (<布尔表达式>)
<语句1>;
[else <语句2>;]
例 2.4 找出三个整数中的最大值和最小值。
从两个方案中选择其一可以使用一个if 语句,而从三个方案中造反其一右以使用两个if 语句。本例使用了两个并列的if语句,其中第二个if 语句没有else子句。
除此之外,本例还使用了另一种方法(三元条件运算符?:)实现同样的问题。程序如下:
public class Max3if
{
public static void main(String args[])
{
int a=1,b=2,c=3,max,min;
if (a>b)
max = a;
else
max = b;
if (c>max) max = c;
System.out.println("max = "+max);
min = a<b ? a : b;
min = c<min ? c : min;
System.out.println("min = "+min);
}
}
程序运行结果:
max=3
min=1
2) switch语句
switch语句的定义形式为:
switch (<表达式>)
{
case <常量1>:<语句1>;
break;
case <常量2>:<语句2>;
break;
……
[default:<语句>;]
}
例 2.6 显示星期几对应的英文字符串。
用week表示星期几,可用switch语句将week转换成对应英文字符串。程序如下:
public class Week1
{
public static void main(String args[])
{
int week=1;
System.out.print("week = "+week+" ");
switch (week)
{
case 0: System.out.println("Sunday"); break;
case 1: System.out.println("Monday"); break;
case 2: System.out.println("Tuesday"); break;
case 3: System.out.println("Wednesday");break;
case 4: System.out.println("Thursday"); break;
case 5: System.out.println("Friday"); break;
case 6: System.out.println("Saturday"); break;
default: System.out.println("Data Error!");
}
}
}
程序运行结果:
week=1 Monday
3 循环结构
1) for语句
2) while语句
3) do-while语句
第五节 数组
Ø 数组
数组是有序数据的集合,数组中的每个元素具有相同的数组名,根据数组名和下标来唯一地确定数组中的元素。
Ø 数组的使用
数组有一维数组和多维数组,使用时要先声明后创建。
声明方式为:数据类型 数组名[ ];
用new 运算符分配内存,格式为:数组名= new 数据类型[size]
例 2.13 求一组数中的最大与最小值
本例用一维数组来存放以Math.random()方法产生的一组随机数。程序如下:
public class Arraymax
{
public static void main(String args[])
{
final int SIZE = 10; //常量
int table[] = new int [SIZE];
int i,max,min;
for (i=0;i<table.length;i++)
table[i] = (int) (Math.random()*100); //产生随机数
System.out.print("table: "); //输出一维数组
for (i=0;i<table.length;i++)
System.out.print(" "+table[i]);
System.out.println();
max = table[0];
min = table[0];
for (i=1;i<table.length;i++)
{
if (table[i]>max) max = table[i];
if (table[i]<min) min = table[i];
}
System.out.println("Max="+max);
System.out.println("Min="+min);
}
}
程序运行结果:
table: 8440 16 3 10 49 28 76 94 70
Max=94
Min=3