将值赋给任何方法之外的变量,并在构造函数中分配这些值之间是否存在差异?
看看Oracle的Java教程,他们有:
public class Bicycle {
int cadence = 0;
int speed = 0;
int gear = 1;
void changeCadence(int newValue) {
cadence = newValue;
}
这与说/为什么他们只是说:
有什么不同Bicycle(){
int cadence = 0;
}
答案 0 :(得分:6)
如果在构造函数中声明变量,它将是构造函数的本地变量,并且在类中的任何其他位置都不可见。
答案 1 :(得分:4)
如果你在构造函数中定义一个变量,它就是构造函数的本地变量。但是类中的变量是类'state'的一部分。
但如果你的意思是:
class A {
int i = 1;
...
}
VS
class B {
int i;
B() {
i = 1;
}
...
}
区别在于:在第一种情况下,i
的默认值在所有情况下都是1,但在第二种情况下,如果显示的构造函数被调用,则默认值i
为1,也许在其他构造函数中,其他默认值是其他东西(如果没有赋值给i
则为0)。
答案 2 :(得分:3)
如果您在variable
内声明constructor
,则只能访问此变量inside this constructor
。但是,您可以在class
上创建变量,并在constructor
或method
上访问该变量。
答案 3 :(得分:2)
创建对象实例时,将初始化全局变量。您可以(但不必)在构造函数中更改其中的一些。
我认为你的意思是
Bicycle() {
cadence = 0;
}
答案 4 :(得分:1)
在构造函数中:它将是Local变量
Java contains the following types of variables:
实例变量(非静态字段):在面向对象编程中,对象将其各个状态存储在没有static关键字声明的“非静态字段”中。类的每个对象都有自己的这些非静态变量值,因此我们可以说它们与对象(类的实例)相关。这些变量也称为实例变量。如果未初始化,这些变量将采用默认值。
类变量(静态字段):这些与集体有关,并且没有任何对象可以声称它们是其独资经营者。使用static关键字定义的变量由所有对象共享。这里对象不存储单个值,但是它们被迫在它们之间共享它。使用static关键字将这些变量声明为“静态字段”。始终在同一类的不同对象之间共享同一组值。所以这些变量就像全局变量一样,对于类的所有对象都是相同的。如果未初始化,这些变量将采用默认值。
局部变量:在方法或代码块中定义的变量称为局部变量。这些变量只能在方法或代码块中访问。如果未初始化,这些变量不会采用默认值。在使用这些值之前,需要对这些值进行初始化。
参数:参数或参数是方法声明中使用的变量。
答案 5 :(得分:1)
构造函数与任何其他方法一样。在其中声明的变量仅在其中可用,并且当您超出范围时它们将被销毁。
答案 6 :(得分:1)
这种情况的不同之处在于,您不仅要在构造函数中分配变量(在第二种情况下)。你也在那里宣布它。因此,变量是构造函数的局部变量,而不是从外部可见。
答案 7 :(得分:0)
我认为您的问题是:如果我们可以直接为变量(类的)提供默认值,为什么要在构造函数中提供它。如果这是问题,那么我认为这是因为即使对象未初始化,变量中的值也可用,这不是一种健康的做法,也没有多大意义。相反,在构造函数中赋值不仅会被隐藏,而且还会遵守 java 的 oops 规则。