实例变量声明语法

3

在Java中,对于实例变量的声明,我看到了一些似乎有冲突的约定。例如,一个经典的银行账户实例变量可能如下所示,这是非常合理的。

private double balance = 0.0;

实例变量可能会包含访问修饰符、数据类型、变量名以及值。我曾错误地认为这些都是实例变量的组成部分。现在,问题来了。

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

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

现在看起来对象名称,甚至库/包/类本身的名称都被用作数据类型。此外,实例变量已经与看起来像构造函数的内容合并在一起。
我的问题是:为什么第二种语法在看起来明显偏离第一种语法时仍然可以使用?
任何帮助将不胜感激。

1
什么问题?你不知道原始数据类型和对象之间的区别吗? - Kayaman
2个回答

5
为什么这个第二种语法看起来与第一种语法有很大的偏离,但实际上并没有任何偏离。
Part                        First example       Second example
Access modifier             private             private
Type                        double              Canvas
Name                        balance             canvas
Initialization expression   0.0                 new Canvas()

你在哪里看到了不一致之处?是的,类型可以是一个类,而不仅仅是原始类型。是的,初始化表达式可以是任何表达式(不使用其他实例变量),而不仅仅是字面值。这并没有改变语法
请注意,访问修饰符是可选的(默认为“包访问”),还有其他潜在的修饰符(volatilefinalstatic)。但在你的例子中,应用的修饰符集合完全相同。

感谢回复。不,我不知道我可以使用类作为数据类型,而不是基本类型。 - NewGuy_IL
1
@NewGuy_IL:如果你不能将类用作变量的数据类型,它们就没有太多用处了... - Jon Skeet

3

我(错误地)认为一个实例变量只需要访问修饰符、数据类型、变量名称和一个值

实际上,它就是这样的:

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

private - 访问修饰符
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;
}

非常感谢您提供这么清晰易懂的解释,对我帮助很大。 - NewGuy_IL
@NewGuy_IL 很高兴能够帮助! - Anderson Vieira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接