请问:私有静态方法有什么特别意义?

private static void privatestatic() {

      System.out.println("test for private static.");

}

想不出这么写有什么意义,但是又允许这么写。

让此类的其它(非private的)静态方法调用啊

打个比方如果不恰当勿喷, 调味料需要盐和糖,但是盐和糖同时加入效果就很一般。不可能因为一起用效果不好,就取消其中一种吧!,毕竟2种作用不同。

本类自调用

私有静态方法可以禁止通过类名直接调用吧

实际工作中编程,是不是整天这个方法调用另一个方法,另一个方法再调用另另一个方法……调用另另另另一个方法?
这要是想通过读代码搞清楚一个功能,不得查祖宗十八代。

你真正开始做实际项目后就能理解了,这种样的设计其实是合理的
因为一个“方法”,应该尽量简洁,很明确的做一个具体的业务或者说“动作”
把方法分工的明确一些,一是便于复用,二是增加可读性(注释什么的当然也要写清楚)

一般来说,一个方法除非有什么实在难以细化的地方,尽量不要超过200行

至于你说难以查找,这个实际上是不存在的,所有的IDE都有快速链接到另一个方法实现段的功能
你注释写好了,就会感觉非常清晰
你自己想象一下,是2个1000行的方法可读性好(两个1000行的方法中,可能会有大量重复的代码)
还是10来个100行的方法可读性好(将重复代码提取了出来,包装成具体方法进行复用)

考虑这样的用例,比如你有个方法,里面处理非常复杂,代码超过上万行,不好维护,你会怎么考虑?
public static void methodA() {
    //处理很复杂,要上万行代码,不方便维护


一般的考虑会把方法拆开,划分为多个子方法调用
public static void methodA() {
    //do something
    //call methodB()
    //call methodC()
   //... so on


这些子方法methodB等等是不能给用户直接调用的(因为处理的整合性必须从methodA开始调用),那么methodB肯定要private(用户 不可见),而methodA是静态方法,静态方法不能直接调用非静态方法,所以methodB也要静态,于是就有了 private static 

可能是这个方法给某个静态方法调用的(静态方法只能用静态),但是为了安全性不想让外部直接调用。其实纠结这个问题没啥意义,这种特殊的形式一般都用于java的系统类,防止用户随意调用改变参数造成系统损坏,平时基本用不到。

如果你写一个公有静态方法,里面需要调用其他方法,由不想让用户调用里面的方法,就需要私有静态方法了

比如你写个main类,不创建main所在的类,直接在statci main的里写逻辑,那么如果要写个方法,这个必须是static的方式;然后我们 再设想一个情况,把main的逻辑封装成了一个static的方法(并将方法名修改成了proc),但是原main方法(修改后的proc方法)调用的方 法不想暴露出去,那么这些static的方法就成了private static的形式

10来个100行的方法可读性好,但被切成一小段一小段,读了这个忘记那个的感觉。
2个1000行的可读性不好,但那只是一个屏幕显示不下而已。
所以注释很重要啊,每一个方法,都加上注释,写清楚这个方法是做什么的
以后需要同样功能时,也可以直接调用以前就封装好的现成的方法

实际上,我们在项目中,甚至很少出现100行以上的方法

拿到别人的代码时,一眼看到一个几百行的方法,直接就不想看下去了……

这只是你没掌握快速阅读代码的诀窍罢了,优秀的方法命名会让你不需要看方法体就能大概了解其作用.
这个做个类比就清楚了,一个衣柜里衣服是堆一起的,一个分门别类的标记了袜子,裙子,裤子,小孩衣服,等等,你觉得哪个的可维护性更高?抽取方法就是一个 分门别类的过程,通过约定俗成的约束来减轻你阅读代码的代码量,而且优秀的设计是不需要你记起前面方法体里的细节的,相关的逻辑都内聚在一起了

谢谢回复。命名方法有没有人用中文的?其它国家其它语言的人呢?还是说全世界正规编程都用英文做变量名?

全世界我怎么知道...这个建议还是用英文吧,又不需要多好的英语水平

如果此类中有静态方法需要调用其他私有方法,那么此私有方法需要为静态方法

静态内部类可直接调用外部类私有静态方法,供内部类使用,外部类不可见

1、它可以被公有静态方法调用,是公用静态方法中的一个子逻辑,但这个子逻辑又不想被公开化
2、它可以被类的实例方法调用(公有、私有、保护、默认都可以)。

比如,一个类需要统计类本身的对象被创建了多少次:

public class Employee {

    private static int count = 0;

    private static void instanceCreated(){

        synchronized(Employee.class){

            count++;

        }

    }

    public static int getInstanceCreatedCount(){

        return count;

    }

    public Employee(){

        instanceCreated();

    }

}

单例模式都没听说过吗?

其实很容易理解, 比如lrc你写一个工具类, 工具类中的方法都是public static 的; 但是多个方法中有部分重复代码, 或者某个方法中的代码 太长,不利于理解.  这种情况下, 你就最好把一部分代码抽取成为一个static方法, 而这部分抽取的方法,你并不想开放出去, 只是工具类中你内 部调用的,那么这个就只能是 private static的方法了; 

另外使用的一个对象你希望是单例的, 静态成员变量之类的; 
如果这个对象比较简单的情况下, 你可以直接 private static XXObject xx = new XXObject();
可是如果这个对象构造比较复杂,或者你想在静态加载是就设置一个参数, 那么就只能用静态代码块, 或者 private static XXObject xx = staticMethod();

保护和命名空间

私有静态 为单例模式服务的吧

每一个层次的方法负责一个层次的功能

类负责对外展示整体功能,不相关的就是私有的,静态私有就是为了支持静态public的。

每一个方法都应该是业务逻辑完整的,不应该是一层层的读代码才知道什么意思

意义就是不让其他类调用,本类的可以调用这个方法。

发布了79 篇原创文章 · 获赞 2 · 访问量 2272

猜你喜欢

转载自blog.csdn.net/liuji0517/article/details/104689926