学习了编程语言也有几年的时间了,但是对于编程语言中的语法在电脑内存中的一些调用关系却一直不清楚,直到最近,在学习Java的时候才有所了解。故在此总结。
首先先看一段代码:
class Point{
private double x;
private double y;
Point(double x1,double y1){
x=x1;
y=y1;
}
public double getX(){return x;}
public double getY(){return y;}
public void setX(double i){x=i;}
public void setY(double j){y=j;}
}
class Circle{
private Point o;
private double radius;
Circle(Point p,double r){
o=p;
radius=r;
}
Circle(double r){
o=new Point(0.0,0.0);
radius=r;
}
boolean contains(Point p){
double x = p.getX() - o.getX();
double y = p.getY() - o.getY();
if(x*x+y*y> radius + radius )return false;
else return true;
}
public void setO(double x, double y){
o.setX(x);
o.setY(y);
}
public Point getO() {return o;}
public double getRadius(){return radius;}
public void setRadius(double r){radius=r;}
public double area(){
return 3.14 * radius * radius;
}
}
public class TestCircle{
public static void main (String arg[]){
Circle c1=new Circle(new Point(1.0,2.0),2.0);
Circle c2 =new Circle(5.0);
//略 ***********************
}
}
当程序执行到“
Circle c1=new Circle(new Point(1.0,2.0),2.0);
”这句话时,程序从内向外逐个解析。
具体在内存中的占用情况如下:
下图中,左边的大的方框表示内存中的栈,而右边代表内存中的堆。
当程序New一个对象的时候,总是先调用该对象的一个构造方法,以此来实现对对象的参数赋值。
图中,左边的大的方框表示内存中的栈,而右边代表内存中的堆,以下各图亦是如此。