You are on page 1of 22

Java 程序设计大学教程

第二章 程序设计基础
本章是学习 Java 程序设计的基础。我们首
先通过一个简单的 Java 程序来了解程序的
组成结构、语言要素和编写规范,建立程序
的基本概念。然后以数据和运算作为程序设
计的基础,通过讲解数据和数据类型、变量
和常量、表达式和运算符以及流程控制,开
始 Java 程序设计语言的探索之旅
Java 程序设计大学教程

2.1 程序
 程序是指按照时间顺序依次安排的工作步骤。而程
序设计则是对这些步骤的编排和优化。
 计算机处理的核心是数据和运算。数据的基本存储
单位是位,数据按照不同的数据类型来组织和存储。
运算的基础是表达式,运算的控制手段是流程。无
论是多么复杂的运算,都可以分解成顺序、选择和
循环这三种基本的程序结构。
 Java 程序由一个或多个独立的类组成,但其中必须
有一个公有类,而且源代码文件( .java 文件)必
须与这个公有类的名字相同。
Java 程序设计大学教程

2.1.1 初识 Java 程序
一个 Java 程序的基本框架结构:
 Java 程序由一个或多个独立的类组成,但其中必须有一个公有类(如: HelloWorld ),而且源代码文件必须与这个公有类
的名字相同(如: HelloWorld.java )。
 Java 的类可以由一个或多个方法组成,其中公有类中的 main 方法可用作程序运行的入口。

程序头的注释
HelloWorld 类

方法头
// The First Java Program
public class HelloWorld {
public static void main(String[] args){
方法体 System.out.println("Hello World ! "); 参数
}
}

修饰符 返回类型 main 方法
方法名
Java 程序设计大学教程

2.1.1 初识 Java 程序
 Java 程序的编辑 编辑程序代码 javac 生成出错信息

、编译和运行过程
HelloWorld.java

编译程序代码 有编译错

Java 程序编译通过,会自动生 javac HelloWorld.java 误吗?
Yes

成一个包含了这个源程序字节码 No

的同名 .class 文件。该文件可
以通过 Java 虚拟机运行。 HelloWorld.class

解释执行字节码
java HelloWorld
Java 程序设计大学教程

2.1.2 标识符和关键字
 在 Java 语言中,标识符用于表示变量、常量、方法、类
或接口的名称。标识符是大小写敏感的,但没有长度限制

 Java 关键字是为编译器保留的、具有特定含义的标识符,
不能把它用做变量、类或方法的名称。
 Java 语言中的保留字
abstract default if private throw

boolean do implements protected throws

break double import public transient

byte else instanceof return try

case extends int short void

catch final interface static volatile

char finally long super while

class float native switch

const for new synchronized

continue goto package this
Java 程序设计大学教程

2.1.3 撰写规范的程序代码
// 程序说明
package 包的名称
程序代码质量评审原则:
import 类的名称
类修饰符 class 类的名称
 正确性
构造方法 指程序代码要实现软件设计所要求的功能;
类成员:方法 (按照以下访问特性次序排列)
 可靠性public指程序代码最后编译的程序要能够稳定、可靠、安全
的运行; protected
private protected
 规范化private
指程序代码书写的风格、命名规则等要符合规范;
类成员:域 (按照以下访问特性次序排列)
 可读性 指程序代码要便于查看和理解;
public
protected

灵活性private
指程序代码的设计和编写应该易于维护和改动。
protected
private
静态变量(即使用 static 修饰符的。按照以下访问特性次序排列)
public
protected
private protected
private
常量 (即使用 static final 修饰符的)
Java 程序设计大学教程

2.2 数据和数据类型
 数据是我们对信息的一种组织和表达形式。计
算机是一个数据处理器,而程序就是处理数据
的具体步骤和方法。

 Java 是强类型语言,在 Java 中,常量和变量
必须事先声明数据类型才能使用。 Java 通过声
明的数据类型在合适的地方为它们分配内存。
Java 程序设计大学教程

2.2.1 数据
 无论数据以何种形式出现,但对于计算机而言,程序所处理的都是
同样的二进制位模式数据。计算机存储器仅仅将数据以位模式存储。
至于解释位模式是数值类型、文本类型、或其它的数据类型,则是
由输入 / 输出设备或程序的完成。
 位( bit,binary digit 的缩写)是存储在计算机中的最小单位;它
是 0 或 1 。长度为 8 的位模式被称为 1 个字节。
 不同的位模式集合可以设计用于表示文本符号。我们称一类位模式
集合为码。表示符号的过程被称为编码。常用的码有 ASCII 码、扩
展 ASCII 码、 Unicode 码。
Java 程序设计大学教程

2.2.2 常量和变量

变量是指其值在运行时可以改变的量。
在程序运行期间其值保持不变的量,我们称之为常
量。 Java 语言中使用关键字 final 来定义常量。
例如:
 final double PI = 3.14159; // PI 是实数类型常量
 int x, y; // x, y 是整数类型变量
 double w = 3.1415;// w 是实数类型变量
 boolean truth = true;// truth 是布尔类型变量
 Constant const = new Constant();// const 是对象
类型变量
Java 程序设计大学教程

2.2.3 数据类型
 Java 中的数据类型可以分为基本类型
( primitive type )和对象类型( object
type )两大类。其中的基本数据类型包括:整对象数据类型
数类型、实数类型(也称浮点类型)、字符类
类、接口
int
型和布尔类型。 字符串、集合、
基本数据类型 整数类型
short
数组 long
 Java 中的对象数据类型是一种抽象数据类型 byte
float

( ADT ),它将数据和相关的操作封装在一起。
基本类型
实数类型
整数、字符、布尔、实 ( primitive )
double
数 机器内部表示
除了 Java 类库提供的大量作为 API 的对象数 字符类型 char

据类型外, Java
布尔类型 boolean
数据类型允许程序员定义自己的对象数
Java 中的
字、字节、位

据类型,满足更复杂的编程需要。 对象类型
( object )
Java 程序设计大学教程

2.2.3 数据类型
 字符串是指一个字符序列的集合。在 Java 中字符串完全被当成对
象,字符串类型是标准 Java 类库中预定义的 String 类。字符串
作为对象数据类型还封装了许多相关的操作,便于我们对字符串
进行处理。
 int length() 返回字符串的长度。
 String substring(int beginIndex, int endIndex) 返回原字
示例程序 2符串中从‑2 字符串的引用与构造
beginIndex 位置开始到 endIndex 位置(不包括该位
Srting name1 = new String(" 李白 ");// 构造字符串对象“李白”,
置)之间的所有字符组成的新字符串。
 //name1
int indexOf(int ch) 引用该字符串对象
返回从索引 0 开始的与 ch 字符相匹配的首
Srting name2 = " 李白 ";//name2 引用已构造的字符串对象“李白”-1 。
个字符的位置(索引值)。未检索到匹配字符的则返回
Srtingname3 = " 杜甫 ";// 隐式构造字符串对象
int indexOf(String str) 返回从索引“杜甫 ”, name3
0 开始的与 str 字符串相
引用该字符串对
象 匹配的首个子串的开始位置(索引值)。未检索到匹配的字符串
name1 = 则返回 -1 。
" 杜甫 ";//name1 引用字符串对象“杜甫”
 boolean equals(Object anObject) 比较字符串是否相等,相
当时返回 true ,否则返回 false 。
 比较字符串是否相等应该使用 equals 方法 。
Java 程序设计大学教程

2.2.3 数据类型
Java 程序在首次声明变量时,需要为其指定一种类型。类型决
定了变量中存储的值的范围,以及能对变量值执行的操
作。 Java 是一种强类型语言,它能区别多种数据类型,并且通
常不允许用一种类型替换另一种。这样,使得编译器能高效处理
数据,防止由于类型不匹配导致的运行时错误。当需要更高的灵
活性时, Java 语言也提供了类型转换的机制。

语法与规则 ( 类型指示符 ) 表达式
double pi = 3.1415926;
int p = (int)pi; //p=3 char

byte short int long

float double
Java 程序设计大学教程

2.3 表达式与运算符
 一个表达式就是一个能够返回值的简单结构。最简单的表达式是变量和
常量。在 Java 中也可以通过使用运算符、方法调用以及类型转换等,建
立复杂的表达式。
 建立表达式没有通用的方法,因为要取决于所用的运算符, Java 包括有
赋值运算符、逻辑运算符、算术运算符、布尔运算符、位运算符等等。
表达式可用于赋值给一个变量、计算方法的参数、或者判断一个条件,
表达式也可以包含方法的调用。例如:
x { 变量 }
PI { 常量 }
System.out.println(" 字符串长度: "+n);{ 方法调用 }
x*y { 算术运算 }
x = 1.5 { 变量赋值 }
love2.equals(love1) { 逻辑运算 }
int p = (int)PI; { 类型转换 }
 理解表达式的重点之一就是要了解不同的运算符。
Java 程序设计大学教程

2.3 表达式与运算符
运算符是用来完成一个动作的特定语言的语法记号。
 赋值运算符 运算符 含义

 增减运算符 = 直接赋值

运算符 += Java C/C++ Delphi
加法赋值 Visual Basic
 算术运算符 运算符 增 -= Java++ ++
C/C++ Inc()
Delphi
减法赋值 无 Basic
Visual
 关系运算符 加 减
运算符 *= Java
+ --
C/C++
--
+ Dec()+
乘法赋值
Delphi
无+
Visual Basic
减 - - - -
 逻辑运算符 相等
运算符

/= ==
Java
*
==
C/C++
*
除法赋值
=Delphi
*
= 或 isBasic
Visual
*
不相等
运算符
逻辑与 %= !=
Java
&& !=
C/C++
&& <>Delphi
模赋值
And <>
VisualAndBasic
位运算符 浮点数除 / / / /
 大于

逻辑或 > &
|| > &
|| > and
Or >and
Or
整数除 / / div /
小于

逻辑非 <~
! < ~
! < not
Not <not
No
取模 % % Mod Mod
小于等于
取反 <=| <= | <= or <=or
大于等于
异或 >=^ >= ^ >= xor >=
xor
左移 << << Shl 无
右移 >> >> Shr 无
Java 程序设计大学教程

2.3 表达式与运算符
Java 语言中明确地规定了各种运算符的优先级。在优
先级条件下,运算规则是:优先级高的运算符在优先级
低的运算符之前求值,优先级相同时自左向右求值。
优先级 运算符类型 运算符
优先级最高 一元运算符 [ ] . () (方法调用)
! ~ ++ -- + - new
() (强制类型转换)

优先级较高 算术运算符 * / % + -
位移运算符
<< >>

优先级较低 关系运算符 < <= > > == !=
位移运算符
逻辑运算符 & ^ |
&& ||
?: (三元判断运算符,例如: A>B?X:Y )
优先级最低 赋值运算符 =
+= -= *= /= %=
Java 程序设计大学教程

2.4 流程控制

 任何程序流程均可以用顺序结构、选择结构、循环结
构这三种基本控制结构实现。
 程序中的语句是按照编写时写入的顺序一条接一条地
执行的,这一过程称为顺序执行。
 Java 提供了两种选择结构语句: if 语句和 switch 语
句。
 循环结构使用条件表达式来控制一个(一组)动作的
重复执行。 Java 语言中支持的循环语句包括:
while 循环、 do-while 循环、 for 循环。
Java 程序设计大学教程

2.4 流程控制
 switch语句允许在两个程序块之间进行选择。同样,无论
if-else 语句是多分支判断选择结构。根据选择器的
值, switch 语句可以从很多可能的条件中选择一个分支
条件的值如何,都能确保有且只有一种选择被执行。 if 语
句还可以嵌套任意层以构成更复杂的判断选择结构。
中的语句或语句块执行。
语法与规则
语法与规则
switch ( 表达式 ) {
if (case
条件表达式值 1: ) {
语句 1;// 满足值
// 做某事的语句 ; 1 的条件执行语句
break;
...
case 值 2:
}// 如果是单条语句,可不使用 {}
语句 2;// 满足值 2 的条件执行语句
else{ break;
... 做另一件事的语句 1;
//
case 值 n:
...
语句 n;// 满足值 n 的条件执行语句
}// 如果是单条语句,可不使用
break; {}
default:
缺省语句 ;
}
Java 程序设计大学教程

2.4 流程控制
 while 循环 while ( 布尔表达式 ) {
语句 ;
 do-while 循环 ...
 for 循环 } // 如果循环体是单条语句,可不使用 {}

do {
语句 ;
...
} while ( 布尔表达式 );

for ( 初值表达式 ; 布尔表达式 ; 步进表达式
){
语句 ;
...
} // 如果循环体是单条语句,可不使用 {}
Java 程序设计大学教程

2.4 流程控制
 break :在 while 、 do-while 或 for 循环中,当
某种条件满足时需要立即跳出循环时,使用 break
关键字,可以使得程序的执行流程立即跳出循环。
 continue :如果想跳过循环中的部分代码重新开
始下一次循环,就使用 continue 关键字。
Java 程序设计大学教程

一个有趣的例题
《射雕英雄传》的朋友,一定还记得黄蓉遇上神算子瑛姑,给她出的三道题目中有一题是这样的:今有
物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?也就是说,有一个未知数,这
个数除以三余二,除以五余三,除以七余二,问这个数是多少?

示例程序 2‑11 “ 黄蓉的题目” Calc.java
public class Calc{
public static void main(String[] args) {
int x;
for (x=0;x<100;x++) {
if ((x%3==2) && (x%5==3) && (x%7==2)) {
System.out.println(" 这个数字是: "+x);
}
}
}//end of main
}//end of Calc
Java 程序设计大学教程

继续我们的 Hello World
 题目变成在屏幕上打印 10 遍 Hello
World ?
 变成在屏幕上打印 100/1000/10000 遍 ?
 再变成同时要求输出的每一遍的序号呢?
 再变成隔 5 个同时输出序号呢?
Java 程序设计大学教程

试试下面的程序!
 求从 1 到 1000 的自然数累加的和?
 求从 1 到 500 的自然数累乘的积?

 限制条件累加
 将 1 , 2 , 3 , 4…… 的自然数进行累加,输
出最接近 2008 的累加和并输出此时参与累加
的最大自然数。