序员必读:基础篇(6)
JAVA程序员必读:基础篇
2.4.2初始化实例和类成员
下面讲讲初始化实例和类成员:
你可以在类中定义它们的时候,使用static初始化程序和实例初始化程序来为类和实例成员提供初始化数值:
class BedAndBreakfast {
static final int MAX_CAPACITY = 10;
boolean full = false;
}
这个对于原始数据类型是没有问题的。有时候,它可以用在创建数组和对象。但是这个初始化表单有它的限制,如下:
初始化程序只可以执行用赋值语句表达的初始化 。
初始化程序不能调用任何的包含异常错误的方法。
如果初始化程序调用一个包含异常错误的方法,它不能进行错误恢复。
如果你有一些初始化要完成,可能有些不能在初始化程序实现,因为出现了上面的限制之一,这时你不得不将初始化代码随意放置了。为了初始化类成员,在static初始化块中放置初始化代码。为了初始化实例成员,就要在构造函数中放置初始化代码了。
2.4.3 Static初始化块
下面再讲讲Static初始化块
下面举一个例子,如图8所示:
(图8)
errorStrings源代码必须在static初始化块中被初始化。这是因为错误恢复必须在源代码没有被找到得时候才被执行。同时,errorStrings是一个类成员,它不能在构造函数中被初始化。在前面得例子中一,一个static初始化块是以static关键字开头得,并且JAVA代码是用大括号{}括起来的。
一 个类可以有许多static初始化块,它可以出现在类中任何地方。系统保证static输出化块以及static初始化程序是按它们在源代码中的顺序被调用的。
2.4.4 初始化实例成员
如果你想初始化一个实例变量而且不能在变量声明处来处理它,那么就只能在构造函数中来为这个类初始化了。假如errorStrings是一个实例变量而不是一个类变量,你就可以使用以下的代码来初始化它:
import java.util.ResourceBundle;
class Errors {
ResourceBundle errorStrings;
Errors() {
try {
errorStrings = ResourceBundle.
getBundle("ErrorStrings");
} catch (java.util.MissingResourceException e) {
// error recovery code here
}
}
}
现在代码是在构造函数中为类来初始化这个errorStrings的。
有时,类包含了许多构造函数并且每个构造函数允许调用者为新对象的不同实例变量提供初始化数值。比如,java.awt.Rectangle有以下的三个构造函数:
Rectangle();
Rectangle(int width, int height);
Rectangle(int x, int y, int width, int height);
Rectangle()构造函数没有任何的参数,所以它不能让用户大小或者原点和大小提供初始化数值;而其它的两个构造函数,它可以让用户设置初始数值。
然而,所有的实例变量(原点和大小)都必须初始化。在这个例子中,类经常有一个构造函数来完成所有的初始化。其它的构造函数调用这个构造函数并且提供给它参数或者缺省数值。比如下面是以上所说的三个构造函数,它们初始化如下:
Rectangle() {
this(0,0,0,0);
}
Rectangle(int width, int height) {
this(0,0,width,height);
}
Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
JAVA语言支持实例初始化块,你可以放心使用它。这里建议使用构造函数来初始化,主要有以下三个原因:
所有的初始化代码处在一个地方,这样使得代码更容易维护和阅读。
缺省值可以清除地知道。
构造函数广泛被JAVA程序设计人员所熟悉,包括相对新的JAVA程序设计人员,而实例初始化程序不能,而且他可能导致其它JAVA程序设计员的困惑。
2.4.5 对象和类
你可能会注意到对象和类看起来很相似。在现实世界中,类和对象之间的区别经常是让程序员困惑的源泉。在现实世界中,很明显,类不能是它们描述的对象本身。然而,在软件中很困难来区分类和对象。有部分原因是软件对象只是现实世界中的电子模型或者是抽象概念。但是也因为对象通常有时是指类和实例。
JAVA程序员必读:基础篇
|
2.4.2初始化实例和类成员
下面讲讲初始化实例和类成员:
你可以在类中定义它们的时候,使用static初始化程序和实例初始化程序来为类和实例成员提供初始化数值:
class BedAndBreakfast {
static final int MAX_CAPACITY = 10;
boolean full = false;
}
这个对于原始数据类型是没有问题的。有时候,它可以用在创建数组和对象。但是这个初始化表单有它的限制,如下:
初始化程序只可以执行用赋值语句表达的初始化 。
初始化程序不能调用任何的包含异常错误的方法。
如果初始化程序调用一个包含异常错误的方法,它不能进行错误恢复。
如果你有一些初始化要完成,可能有些不能在初始化程序实现,因为出现了上面的限制之一,这时你不得不将初始化代码随意放置了。为了初始化类成员,在static初始化块中放置初始化代码。为了初始化实例成员,就要在构造函数中放置初始化代码了。
2.4.3 Static初始化块
下面再讲讲Static初始化块
下面举一个例子,如图8所示:
(图8)
errorStrings源代码必须在static初始化块中被初始化。这是因为错误恢复必须在源代码没有被找到得时候才被执行。同时,errorStrings是一个类成员,它不能在构造函数中被初始化。在前面得例子中一,一个static初始化块是以static关键字开头得,并且JAVA代码是用大括号{}括起来的。
一 个类可以有许多static初始化块,它可以出现在类中任何地方。系统保证static输出化块以及static初始化程序是按它们在源代码中的顺序被调用的。
2.4.4 初始化实例成员
如果你想初始化一个实例变量而且不能在变量声明处来处理它,那么就只能在构造函数中来为这个类初始化了。假如errorStrings是一个实例变量而不是一个类变量,你就可以使用以下的代码来初始化它:
import java.util.ResourceBundle;
class Errors {
ResourceBundle errorStrings;
Errors() {
try {
errorStrings = ResourceBundle.
getBundle("ErrorStrings");
} catch (java.util.MissingResourceException e) {
// error recovery code here
}
}
}
现在代码是在构造函数中为类来初始化这个errorStrings的。
有时,类包含了许多构造函数并且每个构造函数允许调用者为新对象的不同实例变量提供初始化数值。比如,java.awt.Rectangle有以下的三个构造函数:
Rectangle();
Rectangle(int width, int height);
Rectangle(int x, int y, int width, int height);
Rectangle()构造函数没有任何的参数,所以它不能让用户大小或者原点和大小提供初始化数值;而其它的两个构造函数,它可以让用户设置初始数值。
然而,所有的实例变量(原点和大小)都必须初始化。在这个例子中,类经常有一个构造函数来完成所有的初始化。其它的构造函数调用这个构造函数并且提供给它参数或者缺省数值。比如下面是以上所说的三个构造函数,它们初始化如下:
Rectangle() {
this(0,0,0,0);
}
Rectangle(int width, int height) {
this(0,0,width,height);
}
Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
JAVA语言支持实例初始化块,你可以放心使用它。这里建议使用构造函数来初始化,主要有以下三个原因:
所有的初始化代码处在一个地方,这样使得代码更容易维护和阅读。
缺省值可以清除地知道。
构造函数广泛被JAVA程序设计人员所熟悉,包括相对新的JAVA程序设计人员,而实例初始化程序不能,而且他可能导致其它JAVA程序设计员的困惑。
2.4.5 对象和类
你可能会注意到对象和类看起来很相似。在现实世界中,类和对象之间的区别经常是让程序员困惑的源泉。在现实世界中,很明显,类不能是它们描述的对象本身。然而,在软件中很困难来区分类和对象。有部分原因是软件对象只是现实世界中的电子模型或者是抽象概念。但是也因为对象通常有时是指类和实例。