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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗雪梅 中级黑马   /  2012-9-27 22:15  /  1514 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗雪梅 于 2012-9-28 22:11 编辑

class Person

//静态方法,传递是的本类对象的参数
      static void method(Person p )

     {
          System.out.println(p);
     }

//主方法
     public static void main(String[] args)
    {
//创建了一个本类对象,然后输出
         Person pp=new Person();

         System.out.println(pp);
    }

在一本书中看到的,很简单的几行代码,但是他说明的问题是参数传递
第一个方法传递本类对象做为参数
第二个,主方法中直接创建了一个本类对象
实在没想明白他说的,传递的效率比创建对象高是什么意思,是指在内在开辟空间还是指运算呢,谢谢




评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
static void method(Person p )//------------------(1)
     {
                System.out.println(p);
     }

static void method()//--------------------------(2)
     {
     Person p = new Person;
    System.out.println(p);
        }

(1)和(2)的区别:
(2)是硬编码,你每次调用(2),只能System.out.println(p);
(1)比(2)要灵活,每次调用(1),我可传入p1,也可以传入p2......,也就可以打印不同的对象了;
他所说的传递效率更高,我认为体现在这里.

你认为怎么样?


评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
静态(static)方法是编译时直接加载加载到内存中的栈中
而通过 new 实例化一个对象,这个对象是放在内存的堆中
我觉得应该是这块的原因不知道对不对

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1,我觉得和单例模式的先加载和延迟加载有点关系,先加载的活不管怎么样都在堆中建立了对象
2, static void method(Person p )可以多态的传入而  Person p = new Person;
    System.out.println(p);只能传入已经new好的对象。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
要知道,传递一个引用只是连接到一个内存中的对象,而new的时候是开辟了一个新的空间,并进行引用传递。
回复 使用道具 举报
因为传递对象作为参数只在栈中开辟内存,而不在堆中开辟内存,这就是所说的空间复杂服比较小,所以速度快,效率高!
回复 使用道具 举报
class Person

//静态方法,传递是的本类对象的参数
      static void method(Person p )

     {
          System.out.println(p);
     }

//主方法
     public static void main(String[] args)
    {
//创建了一个本类对象,然后输出
         Person pp=new Person();

         System.out.println(pp);
    }

在一本书中看到的,很简单的几行代码,但是他说明的问题是参数传递
第一个方法传递本类对象做为参数
第二个,主方法中直接创建了一个本类对象
实在没想明白他说的,传递的效率比创建对象高是什么意思,是指在内在开辟空间还是指运算呢,谢谢

我认为:首先静态的一般函数在类的字节码文件加载的时候比其它函数(包括主函数)要提前一步执行完毕。其次,本程序中
在主函数内还要接着在堆内存里继续创建实例对象。我想应该是java语法的先后顺序造成的效率差异。


回复 使用道具 举报
柳彬 中级黑马 2012-9-28 21:23:40
8#
你那个静态方法还不是要传入一个已经创建的对象为参数,怎么说明效率。其实传递效率高是所用时间最少,速度最快
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马