相关疑难解决方法(0)

如果私有帮助方法可以是静态的,那么它们应该是静态的

假设我有一个旨在实例化的类.我在类中有几个私有的"帮助器"方法,它们不需要访问任何类成员,并且只对它们的参数进行操作,返回结果.

public class Example {
   private Something member;

   public double compute() {
       double total = 0;
       total += computeOne(member);
       total += computeMore(member);
       return total;         
   }

   private double computeOne(Something arg) { ... }
   private double computeMore(Something arg) {... } 
} 
Run Code Online (Sandbox Code Playgroud)

有没有特别的理由指定computeOnecomputeMore作为静态方法 - 或任何特殊原因不?

将它们保持为非静态是最容易的,即使它们肯定是静态的而不会引起任何问题.

java methods static static-methods

197
推荐指数
10
解决办法
8万
查看次数

什么时候应该让私有成员静态,以及在我的情况下如何覆盖它

由于私有方法是隐式最终的.

私有或静态或最终方法是早期绑定意味着它们不能被覆盖.

但在我的代码中,它实际上正常运行.

public class B extends A {
    public static void main(String[] args) {
        new B().privateMethod(); //no error -output B-privateMethod.
    }

    private void privateMethod() {
        System.out.println("B-privateMethod.");
    }
}

class A{
    private void privateMethod() {
        System.out.println("A-privateMethod.");
    }

    private static void privateStaticMethod() {
        System.out.println("privateStaticMethod.");
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,我想确保使私有成员静态的好处,除了可以使用class-name.member,而不是类中的非静态成员.它们是私人的,所以不能在课外使用.例如hugeCapacity(),ArrayList类中的方法.

private static final int DEFAULT_CAPACITY = 10;

private static int hugeCapacity(int minCapacity) {
    if (minCapacity < 0) // overflow
        throw new OutOfMemoryError();
    return (minCapacity > MAX_ARRAY_SIZE) ?
        Integer.MAX_VALUE : …
Run Code Online (Sandbox Code Playgroud)

java access-modifiers

9
推荐指数
2
解决办法
170
查看次数

在这个简单的例子中,static关键字的目的是什么?

可能重复:
方法何时应该是静态的?

通常在为类编写静态方法时,可以使用该方法访问该方法ClassName.methodName.在这个简单的例子中使用'static'的目的是什么?为什么应该/不应该在这里使用它?私有静态也失败了使用静态的目的?

public class SimpleTest { 

   public static void main(String[] args) {
         System.out.println("Printing...");
         // Invoke the test1 method - no ClassName.methodName needed but works fine?
         test1(5);
   }

   public static void test1(int n1) {
         System.out.println("Number: " + n1.toString());
   }
   //versus
   public void test2(int n1) {
         System.out.println("Number: " + n1.toString());
   }
   //versus
   private static void test3(int n1) {
         System.out.println("Number: " + n1.toString());
   }
}
Run Code Online (Sandbox Code Playgroud)

我看了几个教程.例如http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

我对它的理解是,不是创建一个类的实例来使用该方法,而是可以使用类名 - 在某些情况下节省内存,每次使用特定方法构建对象都没有意义.

java static

5
推荐指数
1
解决办法
5722
查看次数

标签 统计

java ×3

static ×2

access-modifiers ×1

methods ×1

static-methods ×1