黑马程序员技术交流社区

标题: 哪种用法更好些呢? [打印本页]

作者: 罗雪梅    时间: 2012-9-27 22:15
标题: 哪种用法更好些呢?
本帖最后由 罗雪梅 于 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);
    }

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





作者: 叶征东    时间: 2012-9-27 22:34
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......,也就可以打印不同的对象了;
他所说的传递效率更高,我认为体现在这里.

你认为怎么样?



作者: 王玉岩    时间: 2012-9-27 22:36
静态(static)方法是编译时直接加载加载到内存中的栈中
而通过 new 实例化一个对象,这个对象是放在内存的堆中
我觉得应该是这块的原因不知道对不对
作者: 王贵朝    时间: 2012-9-27 22:50
1,我觉得和单例模式的先加载和延迟加载有点关系,先加载的活不管怎么样都在堆中建立了对象
2, static void method(Person p )可以多态的传入而  Person p = new Person;
    System.out.println(p);只能传入已经new好的对象。
作者: 陈琦    时间: 2012-9-28 15:58
要知道,传递一个引用只是连接到一个内存中的对象,而new的时候是开辟了一个新的空间,并进行引用传递。
作者: 胡斌    时间: 2012-9-28 16:11
因为传递对象作为参数只在栈中开辟内存,而不在堆中开辟内存,这就是所说的空间复杂服比较小,所以速度快,效率高!
作者: 杨华东    时间: 2012-9-28 18:29
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
你那个静态方法还不是要传入一个已经创建的对象为参数,怎么说明效率。其实传递效率高是所用时间最少,速度最快




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2