类实例化时候的属性问题

public class DrawDavid {
private double marginLeft; // 三角形与坐标系左边的边距
private double marginTop; // 三角形与坐标系上边的边距
private double sideLength; // 边长

int i = 5;
final double PI = Math.PI;
// 三角形的三个顶点和高
private final double height = (sideLength * Math.sin(60 * PI / 180));
private final Point pTop = new Point((int)(marginLeft + sideLength / 2), (int)marginTop);
private final Point pLeft = new Point((int)marginLeft, (int)(marginTop + height ));
private final Point pRight = new Point((int)(marginLeft + sideLength), (int)(marginTop + height ));

/**
 * @param marginLeft
 * @param marginTop
 * @param sideLength
 */
public DrawDavid(double marginLeft, double marginTop, double sideLength) {
    this.marginLeft = marginLeft;
    this.marginTop = marginTop;
    this.sideLength = sideLength;
}

     public static void main(String[] args) {
    DrawDavid d = new DrawDavid(60, 60, 360);
              System.out.println(d.i);          //为5
              System.out.println(d.pTop.x);     //为0  ?
     }

}

请问属性pTop在实例化以后为什么还是为null ?当我访问d.pTop的时候new Point((int)(marginLeft + sideLength / 2), (int)marginTop);不会执行吗?

[quote]你的方法我知道,但是有点想不通,当marginLeft属性改变后,跟他相关的pTop属性不会改变吗? [/quote]

再通俗点:
要是 new 一个对象的时候是 先 造出这个对象 然后给属下赋值呢?
(肯定得先造出来 才能赋值嘛)
造这个对象的时候 marginLeft 是没值的! 能行?

pTop与marginLeft等实例变量同时构造,这时变量marginLeft还没有值

[code="java"]public class DrawDavid {
double marginLeft; // 三角形与坐标系左边的边距
double marginTop; // 三角形与坐标系上边的边距
double sideLength; // 边长

int i = 5; 
  double PI =0;
// 三角形的三个顶点和高 
  double height = 0; 
  Point pTop =null;
  Point pLeft = null;
  Point pRight = null;

/** 
* @param marginLeft 
* @param marginTop 
* @param sideLength 
*/ 
public DrawDavid(double marginLeft, double marginTop, double sideLength) { 
this.marginLeft = marginLeft; 
this.marginTop = marginTop; 
this.sideLength = sideLength; 
  PI = Math.PI; 
  height = (sideLength * Math.sin(60 * PI / 180)); 
  pTop = new Point((int)(marginLeft + sideLength / 2), (int)marginTop); 
  pLeft = new Point((int)marginLeft, (int)(marginTop + height )); 
  pRight = new Point((int)(marginLeft + sideLength), (int)(marginTop + height )); 
} 

         public static void main(String[] args) { 
DrawDavid d = new DrawDavid(60, 60, 360); 
                  System.out.println(d.i);          //为5 
                  System.out.println(d.pTop.x);     //为0  ? 
         } 

} [/code]

输出结果 5 , 240

原因就是 蔡老板说的那样!

初始化

[quote]没太懂你的意思 DrawDavid d = new DrawDavid(60, 60, 360); 后marginLeft肯定有值啊,System.out.println(d.marginLeft); 的话会输出60.0啊 System.out.println(d.pTop.x); 就为0 [/quote]

pTop 在 marginLeft 他 同时或者之前 !
我改了你代码 你看下是不是你要的效果!!

是否想明白了呢?