class Point { 
   protected int x, y; 
   Point(int a, int b) { 
    setPoint(a, b); 
   } 
   public void setPoint(int a, int b) { 
    x=a; 
    y=b; 
   } 
  } 
这里面的构造函数是如何给成员变量付初值的?就用方法的名字就可以?
为什么不写成:this.a=a;this.b=b;?

解决方案 »

  1.   

    构造方法里面不是调用了 setPoint 方法嘛!
      

  2.   

    通过调用setPoint(a, b);将a赋值给x,将b赋值给y;
    在setPoint中的
    x = a;
    y = b;
    就相当于
    this.x = a;
    this.y = b;
      

  3.   

    成员变量只有x,y.this.a,this.b是不存在的.
    没有二义性的情况下this可以省略.
    和下面程序是等同的:
    class Point {
       protected int x, y;
       Point(int a, int b) {
        this.x = a;
            this.y = b;
       }
      } 
      

  4.   

    setPoint这方法里没有和X,Y重名的了!不用this也可以的!
      

  5.   

    它是通过一个方法setPoint给变量赋值,直接调用方法就实现了赋值,可以写成this.a=a;this.b=b;class Point { 
       protected int a, b; 
       Point(int a, int b) { 
        this.a=a;this.b=b; 
       }   
    } 这种方法更常见些
      

  6.   

    为什么不写成:this.a=a;this.b=b  
            直接这样写不安全,而且复用性低,易读性也差(最好不要直接操作非public属性,而是通过方法
    来操作它)
      

  7.   

    这样可以啦  因为setPoint方法里面就调用了类似this.x=a;this.y=b的方法
      

  8.   

    谢谢大家!我还想问:访问方法,不是要建立对象吗?为什么这里直接调用方法呢?为什么不写成:this.a=a;this.b=b  
            直接这样写不安全,而且复用性低,易读性也差(最好不要直接操作非public属性,而是通过方法 
    来操作它)这个回答,让我豁然开朗,只是我这段代码写错了
    this.x=a;this.y=b;
      

  9.   

    1.当你在Main方法里new构造函数时,会自动调用你写的构造函数,如果你用new出来的的对象在调用你的构造函数会报错。
    2.只要new你的构造函数就可以了。
    3.this.x ,this.y是调用本类的成员变量 和x,y是等同的。
      

  10.   

    java爱好者进这个群21875631  欢迎老鸟菜鸟!!!
      

  11.   

    来看一下,顺便推荐一个java基础视频教程给你们听听:http://www.cdlanhai.com/zxst/
      

  12.   

    这里有一个PHP的讨论群 
    群号是48603209 
    大家可以加进去相互交流下。
      

  13.   

    没出现局部变量和全局变量重名 所以不用this被
      

  14.   

    构造方法里调用了setPoint(a, b)给成员变量进行了赋值啊。
    形参和实参没同名的时候用不着加this
      

  15.   


    一般来讲,你如果在构造函数中想操作private类型变量也行,不过最好使用transient关键字。
    参考JDK源码:(Date类)
    public class Date
        implements java.io.Serializable, Cloneable, Comparable<Date>
    {
        private transient long fastTime;
        /**
         * Allocates a <code>Date</code> object and initializes it to 
         * represent the specified number of milliseconds since the 
         * standard base time known as "the epoch", namely January 1, 
         * 1970, 00:00:00 GMT. 
         *
         * @param   date   the milliseconds since January 1, 1970, 00:00:00 GMT.
         * @see     java.lang.System#currentTimeMillis()
         */
        public Date(long date) {
            fastTime = date;
        }
    }
      

  16.   

    多想想this这个关键字的用法吧!
      

  17.   

    我个人觉得this.a=a,this.b=b这种写法也是很常用的写法,都是一样的。
    如果参数多个的话,一般都采用此写法,this.a=a,你看过hibernate的po写法吗,一般构造都是这种写法的。