返回介绍

4.4.1 规定初始化

发布于 2024-10-15 23:56:14 字数 1091 浏览 0 评论 0 收藏 0

如果想自己为变量赋予一个初始值,又会发生什么情况呢?为达到这个目的,一个最直接的做法是在类内部定义变量的同时也为其赋值(注意在 C++里不能这样做,尽管 C++的新手们总“想”这样做)。在下面,Measurement 类内部的字段定义已发生了变化,提供了初始值:

class Measurement {
  boolean b = true;
  char c = 'x';
  byte B = 47;
  short s = 0xff;
  int i = 999;
  long l = 1;
  float f = 3.14f;
  double d = 3.14159;
  //. . .

亦可用相同的方法初始化非基本(主)类型的对象。若 Depth 是一个类,那么可象下面这样插入一个变量并进行初始化:

class Measurement {

Depth o = new Depth();

boolean b = true;

// . . .

若尚未为 o 指定一个初始值,同时不顾一切地提前试用它,就会得到一条运行期错误提示,告诉你产生了名为“违例”(Exception)的一个错误(在第 9 章详述)。

甚至可通过调用一个方法来提供初始值:

class CInit {

int i = f();

//...

}

当然,这个方法亦可使用自变量,但那些自变量不可是尚未初始化的其他类成员。因此,下面这样做是合法的:

class CInit {

int i = f();

int j = g(i);

//...

}

但下面这样做是非法的:

class CInit {

int j = g(i);

int i = f();

//...

}

这正是编译器对“向前引用”感到不适应的一个地方,因为它与初始化的顺序有关,而不是与程序的编译方式有关。

这种初始化方法非常简单和直观。它的一个限制是类型 Measurement 的每个对象都会获得相同的初始化值。有时,这正是我们希望的结果,但有时却需要盼望更大的灵活性。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文