第3章 Java的基本程序设计结构
本章主要讲述程序设计相关的基本概念(如数据类型,分支以及循环)在Java中的实现方式.对于一个具有C++编程经验的程序员来说,本章的内容只需要浏览一下,应该 重点阅读分布在正文中的C/C++注释.
3.1 一个简单的Java应用程序
下面卡一个最简单的Java应用程序,它只发送一条消息到控制台窗口中:public class FirstSample {
public static void main(String[] args) {
System.out.println("we will use 'hello, world!'");
}
}
首先Java对大小写敏感,如果出现了大小写拼写错误,那程序将无法运行.关键字public称为访问修饰符(access modifier),它用于控制程序的其他部分对这段代码的访问级别.
关键字class表明Java程序中的全部内容都包含在类中.这里,只需要将类作为一个加载程序逻辑的容器,程序逻辑定义了应用程序的行为.
类是构建所有Java应用程序和applet的构建块.Java应用程序中的全部内容都必须放置在类中.
关键字class后面紧跟类名.Java中定义 类名的规则很宽松. 名字必须以字母开头,后面可以跟字母和数字的任意组合.
从类名FirstSample可以看出,标准的命名规范为: 类名是以大写字母开头的名字.如果名字由多个单词组成,每一个 单词的第一个字母都应该大写.如果名字由多个单词组成,每个单词的第一个字母都应该大写.
源代码的文件名必须与公共类的名字相同,并用.java作为扩展名.因此,存储这段源代码的文件名必须为FirstSample.java .
如果一切正确,在编译这段源代码之后就会得到一个包含这个类字节码的文件.Java编译器将字节码文件自动地命名为FirstSample.class,并与源文件存储在同一个目录下.最后使用下面这行命令运行这个程序:
java FirstSample
当使用
java ClassName
运行编译程序时,
Java虚拟机将从指定类中的main函数开始执行,因此为了代码能够执行,在
类的源文件中必须包含一个main函数.当然,也可以将用户自定义的函数添加到类中,并且在main函数中调用它们.
需要记住:每个Java应用程序都必须有一个main函数,格式如下所示:
public class ClassName
{
public static void main(String[] args)
{
program statement
}
}
C++
注释:Java的类与C++的类很相似,但还是有些差异令人困惑.例如
Java中的所有函数都属于某个类的方法(标准属于将其称为方法,而不是成员函数).
因此,Java中的main方法必须有一个外壳类.C++中的静态成员函数(static member function)定义在类的内部,并且不对对象进行操作.
Java中的main方法必须是静态的.最后,与C/C++一样,关键字void表示这个方法没有返回值,那么Java应用程序的退出码为0,表示成功地运行了程序.如果希望在终止程序时返回其他的代码,那就需要调用System.exit方法.
接下来,研究一下这段代码:
{
System.out.println("we will use 'hello world!'");
}
在这里使用了System.out对象并调用了它的println方法.请注意,
点号(.)用于调用方法.Java使用通用语法是:
object.method(parameters)
这
等价于函数调用.
在这个示例中,调用了println方法并传递给它一个字符串参数.这个方法将传递给它的字符串参数显示在控制台上.然后,终止这个输出行,以便每次调用println都会在新的一行上显示输出.不带参数的println方法只打印一个空行,使用下面的语句:
System.out.println();
注释:System.out还有一个print方法,它在输出后不换行.例如,System.out.print("hello")打印"hello"后不换行,后面的输出紧跟在字符"o"之后.
3.2 注释
在Java中有三种书写注释的方式.最常用的是使用//
第二种是/*和*/
第三种注释可以用来自动地生成文档,以/**开始,以*/结束.
3.3 数据类型
Java是一种强类型语言,这就意味着必须为每一个变量声明一个类型.在Java中,一种有8种基本类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的额字符类型 char 和1种用于表示真正的 boolean 类型.注释:Java有一个能够表示任意精度的算术包.通常称为"大数值".虽然被称为大数值,但并不是一种新的Java类型,而是一个Java对象.
3.3.1 整型
Java整型
类型 存储需求 取值范围
int 4字节 -20亿~20亿
short 2字节 -32768~32767
long 8字节 很大很大
byte 1字节 -128~127
在Java中,
整型的范围与运行Java代码的机器无关.这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的
不同操作系统之间进行移植给程序员带来的诸多问题.与此相反,C/C++程序需要针对不同的处理器选择最为有效的整型,这样就有可能造成一个在32位处理器上运行很好的C程序在16位系统上运行却发生整数溢出.
长整型数值有一个后缀L,如10000000L.十六进制数值有一个前缀0x(如0xCAFE).八进制有一个前缀0,例如010对应8.
注释:在C/C++中,int 表示的整型与目标平台相关.在8086这样的16位处理器上整型数值占2字节,在32位处理器上占4字节.类似地,在32位处理器上 long 值为4字节,在64位占8字节.在Java中,所有的数值类型占据的字节数量与平台无关.
此外,Java中没有无符号类型(unsigned).
3.3.2 浮点类型
浮点类型用于表示小数部分的数值.在Java中有两种浮点类型:float(4字节)和 double(8字节).建议不采用 float 类型.
3.3.3 char类型
char 类型用于表示单个字符.建议不要在程序中使用 char 类型.
3.3.4 boolean 类型
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件.整型值和布尔值之间不能进行相互转换.注释:在C++中,数值或指针可以代替 boolean 值.0相当于布尔值 false,非0相当于布尔值 true .在Java中则不是这样.因此,Java应用程序员不会遇到下述麻烦:
if (x = 0) // oops...meant x = 0
在C++中这个测试可以编译运行,其结果总是 false .而在Java中,这个测试将不能通过编译,其原因是整数表达式 x=0 不能转换为布尔值.
3.4 变量
在Java中,每一个变量都属于一种类型.double salary;
int vacationDays;
long earchPopulation;
boolean done;
变量名必须是一个以字母开头的,由字母或数字构成的序列.
许多程序员 将变量名命名为类型名,例如
Box box;
还有一些程序员更加喜欢
在变量名前加上前缀"a":
Box aBox;
3.4.1 变量初始化
声明一个变量之后,必须用赋值语句对变量进行显式初始化.在Java中可以将声明放在代码中的任何地方.
在Java中, 变量的声明尽可能地靠近变量第一次使用的地方(类似于C++,尽可能延后变量定义式出现的时间
),这是一种良好的程序编写风格.
注释:C/C++区分变量的声明与定义.例如:
int i = 10;
是一个定义,而
extern int i;
是一个声明.在Java中,不区分变量的声明与定义.
3.4.2 常量
在 Java中,利用关键字 final 指示常量.例如:public class Constants
{
public static void main(String[] args)
{
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters: "
+ paperWidth * CM_PER_INCH + " by " + paperHeight * CM_PER_INCH);
}
}
关键字 final 表示这个变量只能被赋值一次.一旦被赋值后,就不能够再更改了.习惯上,常量名使用全大写.在Java中,经常希望某个变量可以在一个类中的多个方法中使用,通常将这些常量称为类常量.可以 使用关键字 static final 设置一个类常量.下面是使用类常量的示例:
public class Constants2
{
public static final double CM_PER_INCH = 2.54;
public static void main(String[] args)
{
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters: " +
paperWidth * CM_PER_INCH + " by " + paperHeight + CM_PER_INCH);
}
}
需要注意,类常量的定义位于main方法的外部.因此,在同一个类的其他方法也可使用这个常量.而且如果一个常量被声明为 public,那么其他类的方法也可以使用这个常量.
注释:const 是Java的保留字,但目前并没有使用.在Java中,必须使用 final 定义常量.