2015-04-27 3 views
0

Что касается моего понимания:где поведение частного и статический метод отличается от единственного частного метода

Если метод является статическим это

  1. рано связывать
  2. можно назвать с именем класс даже до того, как объект не будет создан
  3. может вызвать только статический член внутри него.

Я никогда не встречал другого поведения статического элемента во время компиляции или времени выполнения. Есть ли какие-нибудь?

Когда метод является частным это

  1. также рано связывать
  2. может вызвать только внутри вызова, так можно назвать непосредственно без объекта.

Например, метод 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 : 
     MAX_ARRAY_SIZE; 
} 

Поскольку в Java существует частный + статический метод. Почему их потребности происходят. Является ли это целью ограничения, чтобы ограничить доступ нестационарных переменных внутри метода?

+6

Дело в том, что статические методы связаны с типом, а не с каким-либо экземпляром типа, тогда как методы экземпляра связаны с экземпляром типа. Частная часть полностью ортогональна этому. (Например, вы можете вызвать частный статический метод без каких-либо экземпляров, когда-либо существовавших ...) –

+1

@JonSkeet Фактически сэр, поскольку частный метод является проблемой - они могут вызывать только внутри класса. Если вы можете называть их непосредственно name, поэтому зачем их связать с накладными расходами класса ClassName.methodName. – TheCurious

+0

@ dubey-theHarcortians: Вам не нужно указывать 'ClassName' для вызова статического метода, если вы вызываете его в том же классе (или подклассе). Дело в том, что вы должны сделать метод статическим, если он не логически работает с экземпляром класса - это так просто. –

ответ

2

Ну, если вы не хотите подвергать метод с внешним миром и использовать его только внутренне, вы можете пометить их как частных. Это относится и к методам static. Пример:

public class Sample { 

    public static void main(String[] args) { 
     SomeTestClass.display1(); // compilation error 
     SomeTestClass.display2(); 
    } 

} 

class SomeTestClass { 
    private static void display1() { 
     System.out.println("displaying 1.."); 
    } 

    public static void display2() { 
     display1(); 
     System.out.println("displaying 2.."); 
    } 
} 

В приведенном выше коде, method1() предполагается использовать только в классе SomeTestClass. Это увеличивает абстракция.

+1

«Ну, если вы не хотите выставлять метод во внешний мир и использовать его только внутренне, вы можете пометить их как статические». Нет, вы отмечаете это как личное ... –

+0

@JonSkeet - Я хотел сказать * private *, а не * static *. (Тем не менее, набрав ошибку: P) Исправил ее. – TheLostMind

 Смежные вопросы

  • Нет связанных вопросов^_^