我可以知道类变量和构造函数中声明的变量之间的区别吗?

时间:2017-09-14 12:29:20

标签: java variables scope

我想知道构造函数中声明的类变量和变量之间的区别。例如:

class A {  
    int a; 
}  

vs

class A { 
    public A() { 
        int a;
    }
}

4 个答案:

答案 0 :(得分:0)

当你做

class A {  
    int a; 
}  

整数 a 可以被A类中的任何其他实例方法访问,并且该类的任何子对象(某些包限制)也可以访问...

因此主要区别在于该变量的范围

另一方面......当你做的时候

    public A() { 
        int a;
    }

一旦构造函数返回,变量a就超出了该范围......

答案 1 :(得分:0)

class A { int a; }中,变量a在整个类中共享,通过您将在其中实现的所有方法(以及其他包的类,int,精确的情况)。

至于class A { public A() { int a; } },变量a只能在构造函数的范围内访问。这意味着它在构造函数返回时被销毁。

在第一个类中,a是堆分配的,而在另一种情况下,它是堆栈分配的。

答案 2 :(得分:0)

class A {  
    int a; 
}  

该变量可以在类中的任何地方使用

但是,

class A { 
    public A() { 
        int a;
    }
}

变量a只能在函数A()

中访问

所以

class A {  
    int a; 
    public printA() {
        Log.i("TEST", a); // will work fine
    } 
}  

但是

class A {  
    public printA() {
        int a;
        Log.i("TEST", a); // will work fine
    } 
    public void printA1() {
        ...
        ...
        Log.i("TEST", a); // will throw an error
    }
}  

答案 3 :(得分:0)

类变量有两种类型

  1. 静态变量 - 类级变量
  2. 非静态变量 - 实例变量
  3. 构造函数,实例方法可以访问静态和非静态变量,但构造函数变量是局部变量,如方法变量,我们无法在构造函数外部访问。