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

Java 我能知道类变量和构造函数中声明的变量之间的区别吗?,java,variables,scope,Java,Variables,Scope,我想知道类变量和构造函数中声明的变量之间的区别。例如: class A { int a; } vs 当你这样做的时候 class A { int a; } 整数a可以被类a中的任何其他实例方法访问,该类的任何子对象(一些包限制)也可以被访问 所以主要的区别是变量的范围 另一方面。。。当你这样做的时候 public A() { int a; } 只要构造函数返回…在类a{int a;}中,变量a就不在该范围内。变量a在整个

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

class A {  
    int a; 
}  
vs

当你这样做的时候

class A {  
    int a; 
}  
整数a可以被类a中的任何其他实例方法访问,该类的任何子对象(一些包限制)也可以被访问

所以主要的区别是变量的范围

另一方面。。。当你这样做的时候

    public A() { 
        int a;
    }

只要构造函数返回…

类a{int a;}
中,变量a就不在该范围内。变量
a
在整个类中由您将在其中实现的所有方法(以及其他包的类,在这种情况下)共享

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

在第一个类中,
a
是堆分配的,而在另一个类中,它是堆栈分配的

class A {  
    int a; 
}  
该变量可以在类中的任何位置使用

但是,在

class A { 
    public A() { 
        int a;
    }
}
变量
a
只能在函数
a()内部访问

所以

但是


类变量有两种类型

  • 静态变量-类级变量
  • 非静态变量-实例变量
  • 构造函数,实例方法可以访问静态和非静态变量,但是构造函数变量和方法变量一样是局部变量,我们不能访问构造函数之外的变量

    class A { 
        public A() { 
            int 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
        }
    }