实例变量声明语法

New*_*_IL 3 java constructor class object instance-variables

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

private double balance = 0.0;
Run Code Online (Sandbox Code Playgroud)

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

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

private Canvas canvas = new Canvas();
private ColorImage image1 = new ColorImage("file.gif");
Run Code Online (Sandbox Code Playgroud)

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

我的问题:为什么第二种语法看起来好像与第一种语言有很大不同?

任何帮助,将不胜感激.

Jon*_*eet 5

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

它不会偏离在所有从第一.

Part                        First example       Second example
Access modifier             private             private
Type                        double              Canvas
Name                        balance             canvas
Initialization expression   0.0                 new Canvas()
Run Code Online (Sandbox Code Playgroud)

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

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