Java构造函数-为变量赋值

Java构造函数-为变量赋值,java,constructor,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;

将值分配给任何方法之外的变量和在构造函数中分配这些值之间有区别吗

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

public class Bicycle {

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

   void changeCadence(int newValue) {
      cadence = newValue;
   }
这和他们刚才说的有什么不同吗

Bicycle(){
    int cadence = 0;
 } 

如果在构造函数中声明变量,它将是构造函数的本地变量,在类中的任何其他位置都不可见。

如果在
构造函数中声明
变量
,则只能在此构造函数中访问此变量。但是,您可以在
上创建一个变量,并在
构造函数
方法
上访问它。创建对象实例时,全局变量将被初始化。您可以(但不必)在构造函数中更改其中一些

我想你是说

Bicycle() { 
   cadence = 0; 
} 

在构造函数中:它将是局部变量

实例变量(非静态字段):在面向对象编程中,对象将其各自的状态存储在“非静态字段”中,该字段在声明时不使用static关键字。类的每个对象都有自己的一组非静态变量值,因此我们可以说这些变量与对象(类的实例)相关。因此这些变量也称为实例变量。如果未初始化,这些变量将采用默认值

类变量(静态字段):这些变量共同与类相关,对象中没有一个可以将它们声明为其唯一所有者。使用static关键字定义的变量由所有对象共享。在这里,对象不存储单个值,但它们被迫在它们之间共享该值。使用static关键字将这些变量声明为“静态字段”。同一类的不同对象之间始终共享同一组值。所以这些变量就像全局变量一样,对于类的所有对象都是相同的。如果未初始化,这些变量将采用默认值

局部变量:方法或代码块中定义的变量称为局部变量。这些变量只能在方法或代码块中访问。如果未初始化,这些变量不会采用默认值。在使用这些值之前,需要对其进行初始化


参数:参数或参数是方法声明中使用的变量

构造函数与其他方法类似。在它内部声明的变量仅在它内部可用,当您超出范围时,它们将被销毁。

这种情况下的区别在于,您不仅在构造函数中分配变量(在第二种情况下)。你也在那里申报。因此,变量是构造函数的局部变量,从外部看不到。

如果在构造函数中定义变量,则它是构造函数的局部变量。但是类中的变量是类状态的一部分

但如果你的意思是:

class A {
    int i = 1;
    ...
}
vs


区别在于:在第一种情况下,
i
的默认值在所有情况下都是1,但在第二种情况下,
i
的默认值是1,如果调用了所示的构造函数,那么在其他构造函数中,其他默认值可能是其他值(或者如果没有为
i
赋值,则为0).

你是说构造函数中的类全局可变步调吗?我的意思是:当你用有构造函数和没有构造函数的公共类自行车制造新自行车时,有什么区别?如果它是在没有构造器的情况下创建的,那么ints的节奏、速度、档位是否仍然传递给它?他在谈论替代实现。这是另一个代码。不要这样认为-我想他是在问构造函数的init类变量。只是完成代码:
cadence
变量必须在构造函数外部(之前)定义。如果不是,则不会编译+1,以澄清变量初始化可以在构造函数外部完成。在C++中,这是不允许的。
class B {
    int i;

    B() {
        i = 1;
    }
    ...
}