Java Private静态与类内的Private方法[重复]

rfbsl7qr  于 2022-11-20  发布在  Java
关注(0)|答案(1)|浏览(117)
    • 此 问题 在 此处 已有 答案 * * :

When to use static methods ( 23 个 答案 )
1 小时 前 关闭 。
有人 能 解释 一下 在 哪 种 情况 下 我们 使用 私有 静态 方法 还是 只 在 类 中 使用 私有 方法 吗 ?
我 的 困惑 来自 于 它们 都 是 私有 方法 , 所以 我们 不能 调用
无论 如何 都 要 从 类 的 外部 调用 它们 ( 这 违背 了 关键 字 static 的 目的 ) 。

plicqrtu

plicqrtu1#

非静态方法和静态方法(无论它们是私有的还是公共的)之间的主要区别-将this作为隐藏参数隐式传递给非静态方法
因此,即使方法是私有,且只能在类本身内调用--最终它是性能差异,但在数字处理应用程序中,它会产生可测量的差异
这是一个简单的测量:

public class Test {
    public static class Calc {
        public long sum1() {
            long r = 0;
            for (long i = 1; i < 10_000_000_000L; i++)
                r += sum(i, i);
            return r;
        }

        public long sum2() {
            long r = 0;
            for (long i = 1; i < 10_000_000_000L; i++)
                r += sum_static(i, i);
            return r;
        }

        private long sum(long a, long b) {
            return a + b;
        }

        private static long sum_static(long a, long b) {
            return a + b;
        }
    }

    public static void main(String[] args) {
        final Calc c = new Calc();
        final long t1 = System.currentTimeMillis();
        for (int i = 0; i < 10; i++)
            System.out.println(c.sum1());
        final long t2 = System.currentTimeMillis();
        for (int i = 0; i < 10; i++)
            System.out.println(c.sum2());
        final long t3 = System.currentTimeMillis();

        System.out.println("non static " + (t2 - t1));
        System.out.println("    static " + (t3 - t2));
    }
}

静态版本大约快10%(YMMV)

相关问题