实例变量声明语法

时间:2015-04-21 12:31:05

标签: java class object constructor instance-variables

在声明实例变量时,我看到我的新手眼中看起来像Java中的冲突约定。例如,经典银行帐户实例变量可能看起来像这样,这很有意义。

private double balance = 0.0;

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

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

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

现在它看起来像对象名称,甚至库/包/类本身的名称也被用作数据类型。而且,实例变量已经加入到看起来像构造函数的地方。

我的问题: 当第二种语法看起来与第一种语法有很大的偏差时,为什么这样呢?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:5)

  

为什么第二种语法看起来好像与第一种语言有很大偏差?

它与第一个完全没有

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

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

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

答案 1 :(得分:3)

  

访问修饰符,数据类型,变量名称和值都是我(错误地)认为进入实例变量

它实际上是一样的:

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

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

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

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

private double balance = 1.0 - 1.0;

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