A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 747437484 中级黑马   /  2013-12-13 16:07  /  1302 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

4 个回复

倒序浏览
这个我在没弄明白,一会找找师傅,哈哈
回复 使用道具 举报
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);
         }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 熊猫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. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
楼主您好,以下是我对该程序运行过程的解释:
首先,当在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方法所占的空间被回收,之后主函数也执行结束,所占内存空间也被回收,整个进程结束!
        希望可以帮到楼主,有什么不对的,欢迎批评指正!

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马