在声明实例变量时,我看到我的新手眼中看起来像Java中的冲突约定。例如,经典银行帐户实例变量可能看起来像这样,这很有意义。
private double balance = 0.0;
访问修饰符,数据类型,变量名称和值都是我(错误地)认为进入实例变量的。现在令人困惑的部分。
考虑导入的库/类/包,名为ColorImage。它显然有一个canvas对象,但这是实例变量声明的样子。
private Canvas canvas = new Canvas();
private ColorImage image1 = new ColorImage("file.gif");
现在它看起来像对象名称,甚至库/包/类本身的名称也被用作数据类型。而且,实例变量已经加入到看起来像构造函数的地方。
我的问题: 当第二种语法看起来与第一种语法有很大的偏差时,为什么这样呢?
任何帮助都将不胜感激。
答案 0 :(得分:5)
为什么第二种语法看起来好像与第一种语言有很大偏差?
它与第一个完全没有 。
Part First example Second example
Access modifier private private
Type double Canvas
Name balance canvas
Initialization expression 0.0 new Canvas()
你在哪里看到这种差异?是的,类型可以是类,而不仅仅是原语。是的,初始化表达式可以是任何表达式(不使用其他实例变量),而不仅仅是文字。这根本不会改变语法。
请注意,访问修饰符是可选的(默认为"包访问"),还有其他潜在修饰符(volatile
,final
,static
)。但在您的示例中,应用的修改器集完全相同。
答案 1 :(得分:3)
访问修饰符,数据类型,变量名称和值都是我(错误地)认为进入实例变量
它实际上是一样的:
private ColorImage image1 = new ColorImage("file.gif");
私人 - 访问修饰符
ColorImage - 数据类型
image1 - 变量名称
new ColorImage(" file.gif") - 创建新对象并返回对象引用值的表达式
Java数据类型可以是基本类型或引用类型。在您的示例中,double
是基本类型,ColorImage
和Canvas
都是引用类型。
在=
的右侧,你可以有任何表达式:
private double balance = 1.0 - 1.0;
或
private double balance = zero();
static double zero() {
return 0.0;
}