语言基础
我们先看看一个具体例子,给你们有个先入为主的感觉。以下是一个BasicsDemo程序,它的作用是从1加到10,并显示结果:
public class BasicsDemo {
public static void main(String[] args) {
int sum = 0;
for (int current = 1; current <= 10; current++) {
sum += current;
}
System.out.println("Sum = " + sum);
}
}
这个程序的输出为:
Sum = 55
从上面的例子中,我们可以看出即使是一个小的程序都要使用JAVA编程语言的许多传统特性,其中包括变量、操作符和流程控制语句。以上的代码可能看起来有点复杂,但是一旦你学习完本系列教程,你就会发觉它实际上很简单。本节教程将教给你一些JAVA编程语言的基础。
语言基础
3.1 变量
你可以在程序中使用变量来容纳数据。这一小节将数据类型、怎样初始化变量以及怎样在代码块中引用变量。 实际上,对象是存储它的状态在变量中的。它的具体定义为:变量是用标识符命名的数据项。
你必须清除地为你想在程序中使用地每一个变量提供一个名字和类型。这个变量的名字必须是一个合法的标识符:以字母开头的一串Unicode字符。你可以使用变量名来引用变量包含的数据。这个变量的类型决定了什么类型的数值可以容纳以及什么的操作可以对它进行操作。为了得到一个变量、类型和名字,你必须编写变量声明,如下:
type name
除了名字和类型你还要给变量一个作用域。变量的作用域是由变量声明位置决定的。
以下MaxVariablesDemo程序,声明了八个不同类型的变量,如下:
public class MaxVariablesDemo {
public static void main(String args[]) {
// 整型数
byte largestByte = Byte.MAX_VALUE;
short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
// 实型数
float largestFloat = Float.MAX_VALUE;
double largestDouble = Double.MAX_VALUE;
// 其它的数据类型:字符型和布尔型等等
char aChar = 'S';
boolean aBoolean = true;
// 将它们显示出来
System.out.println("The largest byte value is " + largestByte);
System.out.println("The largest short value is " + largestShort);
System.out.println("The largest integer value is " + largestInteger);
System.out.println("The largest long value is " + largestLong);
System.out.println("The largest float value is " + largestFloat);
System.out.println("The largest double value is " + largestDouble);
if (Character.isUpperCase(aChar)) {
System.out.println("The character " + aChar + " is upper case.");
} else {
System.out.println("The character " + aChar + " is lower case.");
}
System.out.println("The value of aBoolean is " + aBoolean);
}
这个程序的输出为:
The largest byte value is 127
The largest short value is 32767
The largest integer value is 2147483647
The largest long value is 9223372036854775807
The largest float value is 3.40282e+38
The largest double value is 1.79769e+308
The character S is upper case.
The value of aBoolean is true
下面的部分详细介绍了变量的各个方法,包括数据类型、名字、作用域、初始化以及final变量。这个MaxVariablesDemo程序使用了你可能不熟悉并且不在本节提到的两项:几个常数MAX_VALUE以及一个if-else语句。每个MAX_VALUE常数是定义在由JAVA平台提供的其中一个数字类中,它是最大的数值。
语言基础
3.1.1 数据类型
每一个变量必须有一个数据类型。一个变量的数据类型决定了变量能容纳的数值和操作符。比如 ,在MaxVariablesDemo程序中,声明int largestInteger决定了largestInteger是一个整型数据类型(int)。整型只能容纳整型数(可以是正数也可以是负数)。你可以完成算术操作,比如,整型变量的加法等等。
JAVA程序语言有两类的数据类型:原始和引用。一个原始类型的变量为它的类型包含了适当大小和格式的单一数值:一个数字、字符或者一个布尔型数值。比如,一个整型数值是一个32位数据。
下面表格所有的JAVA支持的所有原始数据类型,还给出了它们的大小和格式以及简短的描述。MaxVariablesDemo程序为每一个原始类型声明了一个变量:
在其它语言中,原始类型数据的格式和大小可能依靠于程序运行的平台。相比之下,Java程序语言可以指定原始数据类型的大小和格式。因此,你不必担心系统从属问题。
你可以在你的代码中直接为原始变量设置数值。比如,如果你需要为一个整型变量设置为4,你可以编写以下代码:
int anInt = 4;
数字4就是一个整型数值。下面是各种原始数值举例:
总得说来,没有小数点的数就是整型。你可以通过在数字后面加一个'L' 或者'l'指定为一个长整型。一般使用'L'而不使用'l',因为'l'很容易与数字'1'混起来。有小数点的数为双精度类型。你可以在数字后面放置'f' 或者 'F'来指定为实数。而字符型数值可以是处在单引号中间的任何单一的Unicode字符;两个布尔型数是true和false。
数组、类以及接口是引用的类型。引用类型变量的数值跟原始类型的数值比较起来,它是数值的一个引用或者是由变量代表的数值。
一个引用称为一个指针或者在其它语言中称为内存地址。JAVA编程语言象其它语言一样不支持地址的详细使用,你可以使用变量的名字来取代。
语言基础
3.1.1 数据类型
你可以在你的代码中直接为原始变量设置数值。比如,如果你需要为一个整型变量设置为4,你可以编写以下代码:
int anInt = 4;
数字4就是一个整型数值。下面是各种原始数值举例:
总得说来,没有小数点的数就是整型。你可以通过在数字后面加一个'L' 或者'l'指定为一个长整型。一般使用'L'而不使用'l',因为'l'很容易与数字'1'混起来。有小数点的数为双精度类型。你可以在数字后面放置'f' 或者 'F'来指定为实数。而字符型数值可以是处在单引号中间的任何单一的Unicode字符;两个布尔型数是true和false。
数组、类以及接口是引用的类型。引用类型变量的数值跟原始类型的数值比较起来,它是数值的一个引用或者是由变量代表的数值。
一个引用称为一个指针或者在其它语言中称为内存地址。JAVA编程语言象其它语言一样不支持地址的详细使用,你可以使用变量的名字来取代。
语言基础
3.1.2 变量名
程序是用变量名来引用变量数值的。比如,当显示largestByte变量的数值的时候,MaxVariablesDemo程序就使用名字largestByte。一个名字,比如largesByte包含了一个单一的标识符,被称为简单的名字(即变量名)。在JAVA编程语言中,对于变量名有下面的必须满足:
它必须是一个合法的标识符。一个标识符是以字母开头的一串Unicode字符。
它必须不是一个关键字、布尔型字符(true或者false)或者保留字NULL。
它必须在作用域中是唯一的。在不同的作用域才允许存在相同名字的变量。在一些条件下,如果变量被定义在一个嵌套的代码块中,它可能和其它变量共享相同的名字。这点在以后的教程中会提到。
这里有个约定:变量名是以小写字母开头,而类名是以一个大写字母开头的。如果变量名包含了多个单词,而每个单词要组合在一起,则在每个单词的第一个字母大写,比如IsVisible。而下划线(_)可以处在变量的任何地方,但是一般地它只用在常数中分离单词,因为常数名都是用大写字母的,利用下划线可以看得更清除。
语言基础
3.1.3 作用域
变量的作用域是一个程序的区域,在上面变量可以通过它的名字来引用。其次,作用域也决定什么时候系统为变量创建和清除内存。作用域只应用成员变量并决定是否变量可以从所在类的外部使用。在程序中变量声明的位置建立它的作用域并且将它放置到以下四类之一:
成员函数作用域
当地变量作用域
方法参数作用域
异常处理参数作用域
(图14)
如图14所示。成员变量示类或者对象的成员。它是在类中定义而不在任何方法或者构造函数中定义。成员函数的作用域是类的完全定义。但是,当成员是使用在成员初始化表达式中的时候,成员的定义需要在它使用之前出现。在后面的教程中我们要再深入学习成员变量,这里就不讲了。
你可以在一个代码块中定义当地变量。总的说来,当地变量的作用域从它的声明扩展到了它被定义的代码块结束。在MaxVariablesDemo中,定义在主方法中的所有变量都是当地变量。程序中的每一个变量的作用域从变量的定义扩展到了主方法的结束,它在程序代码中是用右括号}来指示的。
参数是方法或者构造函数的正式参数,它们用于传递数值给方法和构造函数。参数的作用域是整个方法或者构造函数。
异常处理参数跟参数很相似,差别在是前者是传递参数给异常处理而后者是传递给方法或者构造函数。异常处理参数的作用域处在{和}之间的代码,它紧跟着catch语句。利用异常来处理