【问题标题】:Instance Variable Declaration Syntax实例变量声明语法
【发布时间】:2015-06-28 14:52:38
【问题描述】:

当涉及到声明实例变量时,我看到在我的新手眼中似乎是 Java 中相互冲突的约定。例如,一个经典的银行账户实例变量可能看起来像这样,这很有意义。

private double balance = 0.0;

访问修饰符、数据类型、变量名和值都是我(错误地)认为进入实例变量的所有内容。现在是令人困惑的部分。

考虑一个名为 ColorImage 的导入库/类/包。它显然有一个画布对象,但这是实例变量声明的样子。

private Canvas canvas = new Canvas();
private ColorImage image1 = new ColorImage("file.gif");

现在看起来对象名称,甚至库/包/类本身的名称,都被用作数据类型。此外,实例变量已加入到构造函数中。

我的问题: 为什么第二个语法看起来与第一个大相径庭?

任何帮助将不胜感激。

【问题讨论】:

  • 有什么问题?你不知道基元和对象的区别吗?

标签: java class object constructor instance-variables


【解决方案1】:

为什么第二个语法看起来与第一个大相径庭?

它与第一个完全不同

Part                        First example       Second example
Access modifier             private             private
Type                        double              Canvas
Name                        balance             canvas
Initialization expression   0.0                 new Canvas()

您在哪里看到了差异?是的,类型可以是一个类,而不仅仅是一个原始类型。是的,初始化表达式可以是任何表达式(不使用其他实例变量)而不仅仅是文字。这根本不会改变 语法

请注意,访问修饰符是可选的(默认为“包访问”),还有其他潜在的修饰符(volatilefinalstatic)。但是在您的示例中,应用的修饰符集完全相同。

【讨论】:

  • 感谢您的回复。不,我不知道我可以使用类作为数据类型,而不是原语。
  • @NewGuy_IL:如果你不能使用类作为变量的数据类型,那么它们就不会很有用......
【解决方案2】:

访问修饰符、数据类型、变量名和值都是我(错误地)认为进入实例变量的全部内容

其实是一样的:

private ColorImage image1 = new ColorImage("file.gif");

private - 访问修饰符
ColorImage - 数据类型
image1 - 变量名
新 ColorImage ("file.gif") - 创建新对象并返回对象引用值的表达式

Java 数据类型可以是原始类型引用类型。在您的示例中,double 是原始类型,ColorImageCanvas 都是引用类型。

= 的右侧可以有任何表达式:

private double balance = 1.0 - 1.0;

private double balance = zero();
static double zero() {
    return 0.0;
}

【讨论】:

  • 感谢您提供如此清晰的解释。这帮助很大。
  • @NewGuy_IL 很高兴为您提供帮助!
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多