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 他 同时或者之前 !
我改了你代码 你看下是不是你要的效果!!
是否想明白了呢?