黑马程序员技术交流社区
标题:
程序是执行流程是怎样的?
[打印本页]
作者:
747437484
时间:
2013-12-13 16:07
标题:
程序是执行流程是怎样的?
public class Car {
public static void main(String[] args) {
show(new CarDemo());
}
public static void show(CarDemo carDemo) {
carDemo.num = 3;
carDemo.color = "black";
carDemo.run();
}
}
class CarDemo {
String color = "red";
int num = 2;
void run() {
System.out.println(color + "------------" + num);
}
}
作者:
丑男先生。
时间:
2013-12-13 16:28
这个我在没弄明白,一会找找师傅,哈哈
作者:
高丽华
时间:
2013-12-13 16:37
public class Car {
public static void main(String[] args) {//第一步读主函数
show(new CarDemo());//调用show方法,但是对象是new CarDemo(),所以第二步执行 CarDemo类;当执行完CarDemo类在调用show方法,其中涉及到了覆盖,就是CarDemo类中的 String color = "red";int num = 2;被show方法中的carDemo.num = 3;carDemo.color = "black";所覆盖!
即打印结果为black--------3
.
}
public static void show(CarDemo carDemo) {
carDemo.num = 3;
carDemo.color = "black";
carDemo.run();
}
}
class CarDemo {
String color = "red";
int num = 2;
void run() {
System.out.println(color + "------------" + num);
}
}
作者:
熊猫86
时间:
2013-12-13 16:52
本帖最后由 熊猫86 于 2013-12-13 16:55 编辑
public class Car {
public static void main(String[] args) {
show(new CarDemo());//调用show()方法,传入new CarDemo()对象,此时在堆内存中建立CarDemo对象,color="red",num=2,run加载到方法区中。这个可以理解为根据工程图纸建立实体,下面用show方法在实体上进行修改。
}
public static void show(CarDemo carDemo) {//相当于CarDemo carDemo=new CarDemo();在栈内存中创建carDemo指向堆内存中创建好的对象。
carDemo.num = 3;//修改汽车上的参数num,赋值为3
carDemo.color = "black";//修改汽车上的参数color,赋值为black
carDemo.run();//调用方法区中的run方法,执行打印动作,输出black----------3
}
}
class CarDemo {
String color = "red";
int num = 2;
void run() {
System.out.println(color + "------------" + num);
}
}
复制代码
作者:
翼展哈哈
时间:
2013-12-14 19:16
楼主您好,以下是我对该程序运行过程的解释:
首先,当在dos中执行“java Car”命令时,系统会启动一个java进程,开启java虚拟机,并为该进程分配一部分内存空间(即方法区,堆,栈,本地方法区等内存空间)。然后java虚拟机把Car.class字节码文件加载进内存的方法区,随着字节码文件的加载,静态方法show就可以被访问调用了;其次,java虚拟机找到Car.class文件的主函数(找不到主函数就报错),开始一条一条地执行,当遇到 代码行“show(new CarDemo());”时,就会先在classpath路径下寻找CarDemo的字节码文件(如果没找到,就找CarDemo的源文件,找到后编译执行产生所需的字节码文件CarDemo.class,如果CarDemo的源文件也没找到,就报错),找到后加载进内存方法区,然后java虚拟机在堆内存中开辟一段空间来创建并存放CarDemo型对象实体,对象实体的属性内容有color和num,之后将该对象实体的内存地址传递给show方法的形参carDemo(java虚拟机会在栈内存中为show方法开辟空间以存储引用carDemo的值),最后开始执行show方法的语句,给对象实体的属性赋新值并调用CarDemo的方法并打印输出color和num的新值;最后show方法执行结束,栈内存中show方法所占的空间被回收,之后主函数也执行结束,所占内存空间也被回收,整个进程结束!
希望可以帮到楼主,有什么不对的,欢迎批评指正!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2