黑马程序员技术交流社区

标题: 静态使用问题, [打印本页]

作者: 范家鹏    时间: 2012-6-21 22:36
标题: 静态使用问题,
本帖最后由 范家鹏 于 2012-6-22 20:39 编辑

比如我有个数组工具类
public static int getMax(int[] arr)
        {
                int max = arr[0];

                for(int x=1; x<arr.length; x++)
                {
                        if(arr[x]>max)
                        {
                                max = arr[x];
                        }
                }

                return max;
        }
这是里面的一个工具,
可以创建对象之后用对象名调用这个功能,
给这个功能加静态之后也可以用类名直接调用,
那我应该选择哪个呢?
大家一般用哪个啊?
作者: 淡然    时间: 2012-6-21 22:39
本帖最后由 淡然 于 2012-6-21 22:51 编辑

一般直接使用类名直接调用
主要还是考虑使用起来很方便
作者: 钟成军    时间: 2012-6-21 22:42
添加static修饰符修饰方法后,不用创建对象就可以用类名直接调用。如果是工具类的话,是好用static修饰,因为不用再创建对象了;如果不是工具类,那么不用static修饰好些
作者: 田建    时间: 2012-6-21 22:42
这个因情况而定,当你只需要调用一次静态方法时自然没有必要new对象,直接用类名调用即可,那样比较方便;
但很可能这个工具类里面还有其他的方法,比如:getMin(),bubbleSort(),selectSort()等,这时你要使用这里面的多个方法,如果还要类名直接调用的话会显得不太方便,在这个时候就选择创建对象,再调用相应的方法!
作者: 李元峰    时间: 2012-6-21 22:43
一般用 类名.方法 这种形式调用,这样才能看出他一定是一个 Static 方法,而且这样做更高效,不用非要创建对象再去调用!
作者: 陆强强    时间: 2012-6-21 22:46
本帖最后由 陆强强 于 2012-6-21 22:56 编辑

类名调用可以自己加载同名.Java文件。只要在一个文件夹。
比如你在另一个程序里要用getMax,只要在getMax前加上getMax所在类的类名就行了
class FileReaderDemo {
        public static void main(String[] args) throws IOException
  {
                int[] arr={2,3,8,1,0,-4,7};
    ArrayTool.getmax(arr);
        
  }
}
我getmax(arr)在ArrayTool.Java文件里类名ArrayTool。所以可以直接编译

作者: 李伟    时间: 2012-6-21 22:52
最好直接用类名调用,这样就不用创建对象,从而节省了内存
作者: 张华廷    时间: 2012-6-21 23:16
大部分都用类名.方法这种形式调用,这样节省了创建对象,又避免调用相应的方法,所以类名调用直接
作者: 吴扬    时间: 2012-6-22 01:08
其实这两种方式都可以的,但是如果只作为工具类的话,首先考虑的是你这个方法有没有访问到类中的特有数据,即非静态数据,如果访问到了,这时候只有通过创建对象来调用了,如果没有访问到特有的数据,就可以使用static关键字来修饰该方法。原因是即使你实例化了对象,这个对象也仅仅只是调用了那些静态方法,没有访问到特有的数据,所以这个对象的创建是没有多大意义的,而且相比较而言更加的消耗资源。此时,就可以用类名调用静态方法的途径来实现。这样的话就可以节省内存了!
当你这个类中的所有的方法都是静态方法的时候,你还可以考虑把这个类的构造方法用private修饰,变为私有的,这样,这个类就不能实例化对象,只能通过“类名.静态方法”的形式来操作了。这也是封装的一种体现形式!
作者: 韦念欣    时间: 2012-6-22 01:33
本帖最后由 韦念欣 于 2012-6-22 01:35 编辑

工具类的实现目标是:具有很强的通用性;能有较多的重载方法;尽量传递较少的参数;耦合度低。能够为开发人员随时,随地,方便的使用。
随时使用:因为用的比较多,可以考虑用static关键字修饰方法,使得方法在整个生命周期过程中一直处于加载状态,使用时不用重新加载,并且使用类名即可调用。
随地使用:工具类的一个重要目标是给所有想用的,可能用到的人使用,所以一般的接口方法都设置成为public。
方便使用:方法的重载要做足,方法的参数不能太复杂,功能细致,这样的方法就更灵活,应用范围就更广。

所以楼主可以使用public static修饰,这样使用类名就可以方便的调用了。
作者: 山水游客    时间: 2012-6-22 10:53
工具类属于公用的,无论创建多少个对象实例都是共用一个方法和变量用类名直接调用工具类的方法比较好点,高效点,如果是新建对象再调用的话,又会消耗一定的内存空间。
作者: 廖理    时间: 2012-6-22 11:06
在我看来 ,其实工具类,可以提高程序的扩展性,你只要把要操作的对象作为参数传入即可,其他什么都不用改变。为我们消除了所有的后顾之忧。
何乐而不为呢,这样我们就不用为每一个数组写一个一模一样的方法。这样有利于升级。当然这也是要付出代价的,因为用工具类,我们就得把工具类的Class加载如内存
这样就得消耗内存空间。所以任何是都是有代价的。
作者: 李柏旺    时间: 2012-6-22 13:42
复用多,用static  ;  用的少就不用。
static也占内存,如果只用一次的变量就大量的使用static,这在企业开发中是不允许的,因为会耗掉性能




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