黑马程序员技术交流社区

标题: 程序是执行流程是怎样的? [打印本页]

作者: 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 编辑

  1. public class Car {
  2.         public static void main(String[] args) {

  3.                 show(new CarDemo());//调用show()方法,传入new CarDemo()对象,此时在堆内存中建立CarDemo对象,color="red",num=2,run加载到方法区中。这个可以理解为根据工程图纸建立实体,下面用show方法在实体上进行修改。

  4.         }

  5.         public static void show(CarDemo carDemo) {//相当于CarDemo carDemo=new CarDemo();在栈内存中创建carDemo指向堆内存中创建好的对象。
  6.                 carDemo.num = 3;//修改汽车上的参数num,赋值为3
  7.                 carDemo.color = "black";//修改汽车上的参数color,赋值为black
  8.                 carDemo.run();//调用方法区中的run方法,执行打印动作,输出black----------3

  9.         }
  10. }

  11. class CarDemo {
  12.         String color = "red";
  13.         int num = 2;

  14.         void run() {
  15.                 System.out.println(color + "------------" + num);
  16.         }
  17. }
复制代码



作者: 翼展哈哈    时间: 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