java中this调用构造方法后面为什么不可以放已经定义好的变量-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

java中this调用构造方法后面为什么不可以放已经定义好的变量

蛮大人123 2016-03-13 17:40:10 1625
public class D{
public static void main(String[] args){
A c=new A();
c.print();
}
}
class A{
int a=1;
int b=2;
A(){
this(a,b);
}
A(int a,int b){
this.a=a;
this.b=b;
}
void print(){
System.out.println(a+","+b);
}
}

如果把A类中的ab定义为static的就可以,这又是为什么?

java构造方法 java调用构造方法 this变量 java调用变量 this调用
分享到
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:02:55

    static的成员变量表示是类所有,这个类的所有对象(实例)均共有,任何一个对象改变这个static变量之后,其他对象去取的时候,就取到改变后的。
    没有使用static修饰的成员变量是每个对象都有自己专属的一份,只能自己去访问,其他对象访问不了。

    理解上面的概念之后,回到楼主的问题上。
    有用static修饰a、b,按楼主的写法,会报错,因为拿自己的“专属”的属性来构造自己,是没有意思的。但如果修饰为static,这就不在是专属了,是大家共有。所以你在用static成员变量当参数去构造对象的之前,属性值可能已被改变。而不再是默认的值,这是有意义的。
    这就是为什么static的不报错,而非static的报错原因。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

相似问题
最新问题