V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

Java 中静态方法的本意是什么呢?就是为了可以不实例化地使用这个方法?

  •  
  •   Newyorkcity · 2018-06-08 21:07:21 +08:00 · 1530 次点击
    这是一个创建于 2363 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个工具类中的方法一般都是静态方法,这样利用了静态方法的特性,使得可以不实例化这个工具类而直接调用工具类的里面的方法。但我觉得静态方法的本意不应该是这个目的。
    说一下我会有这种想法的起因:
    我现在有这样一个工具类,其中的方法是为了将一行文本( String 类型)按照分隔符分割后,依序构成一个 JavaBean 后返回。
    比如文本是:
    『 Tea_LongJin_20180608_100.00 』
    那么就会转为一个 Tea 类,teaname="LongJin" productime="20180608" price = 100.00 并返回
    如果文本开头是 coffee,那么又要调用 ReadCoffee 方法。(调用谁的条件判断不是工具类和工具方法负责的,工具方法只是被调用。)
    那么将这一行文本分割转为字符串数组的过程中用到了『 public String[] split(String regex,int limit) 』方法,其中第二个参数是这行文本中分隔符的个数。
    那我就想,不论是读对应哪个类的文本,数分隔符的方法都是一样的步骤。那应该将它提出来。

    而这个抽象出来的方法为了能在静态的工具方法中被使用,就必须要是静态的。然而因为这个方法不应该被外部调用,所以又要私有化。这样一个 private static 的方法就让我觉得很怪异很不应该。。。

    我整个想法是否有哪里出错了呢?望指正。谢谢。
    4 条回复    2018-06-08 22:58:21 +08:00
    3pmtea
        1
    3pmtea  
       2018-06-08 22:13:59 +08:00
    private static 方法好像没啥毛病,jdk 也这么用

    非要用 non-static 方法来做的话,你也可以弄一个 inner private static class 去做你的字符串解析工作,然后在工具类里给一个 private static final field,这样也顺便实现了“一个类只做一件事”
    feiyuanqiu
        2
    feiyuanqiu  
       2018-06-08 22:22:28 +08:00 via Android
    静态方法就是函数

    你这个例子实际上就是序列化与反序列化,照着 Serializable 接口按自己的序列化规则实现就行
    JackEggie
        3
    JackEggie  
       2018-06-08 22:54:38 +08:00 via Android
    抽象出来的通用工具方法应该放到 util 包里给项目中的所有类使用吧。。。
    JackEggie
        4
    JackEggie  
       2018-06-08 22:58:21 +08:00 via Android
    静态的成员,包括方法,应该是类的属性吧。如果是工具类的属性,那就理所当然是工具类提供的静态工具方法咯。这样也方便了其它类的静态方法调用啦。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1066 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:34 · PVG 06:34 · LAX 14:34 · JFK 17:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.