Java Constructors-为变量赋值

时间:2013-03-25 22:13:19

标签: java constructor

将值赋给任何方法之外的变量,并在构造函数中分配这些值之间是否存在差异?

看看Oracle的Java教程,他们有:

public class Bicycle {

   int cadence = 0;
   int speed = 0;
   int gear = 1;

   void changeCadence(int newValue) {
      cadence = newValue;
   }

这与说/为什么他们只是说:

有什么不同
Bicycle(){
    int cadence = 0;
 } 

8 个答案:

答案 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上创建变量,并在constructormethod上访问该变量。

答案 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 规则。