например, у вас нет объекта Ferrari для доступа. Вы должны создать объект Ferrari, а затем получить доступ к его членам. static main - это специальная статическая функция. Вы можете думать об этом как об отдельном, если хотите. Поэтому, если вы переместите свой основной метод за пределы Ferrari, вы ожидаете, что вам придется создать экземпляр Ferrari, чтобы использовать его ... то же самое здесь.

package com.valami;

 public class Ferrari
 {
  private int v = 0;


  private void alam()
  {
   System.out.println("alam");
  }

  public Ferrari()
  {
   System.out.println(v);
  }



  public static void main(String[] args)
  {
   Ferrari f = new Ferrari();
   f.v = 5;
   System.out.println(f.v);
  }

 }

привет! У меня есть один простой вопрос .... ПОЧЕМУ я могу получить приватную переменную из метода main? Я знаю, я нахожусь в сдерживающем классе, но это главное. Я полагал, что основной НЕ является частью класса, который содержит его ... Тогда я бы не стал обращаться к частному члену, но могу ... ПОЧЕМУ? Пожалуйста, помогите ... спасибо

Ответы на вопрос(7)

что и метод main (), метод main () имеет к ней доступ. В общем, даже статические методы имеют доступ к закрытым полям экземпляров одного и того же класса.

Решение Вопроса

) Что не является main - это часть вашего объекта, он не будет частью объектов, которые вы создаете из класса, но он все еще является частью класса. Это верно для любой статической функции, так как main - это просто обычная статическая функция, которую фреймворк знает, что она должна искать при выполнении программы.

/ Виктор

что он указывает компилятору, где должно начинаться выполнение программы. Кроме того, он ведет себя так же, как и любой другой метод класса, и имеет доступ к закрытым переменным, как и любой другой метод класса.

например, у вас нет объекта Ferrari для доступа. Вы должны создать объект Ferrari, а затем получить доступ к его членам. static main - это специальная статическая функция. Вы можете думать об этом как об отдельном, если хотите. Поэтому, если вы переместите свой основной метод за пределы Ferrari, вы ожидаете, что вам придется создать экземпляр Ferrari, чтобы использовать его ... то же самое здесь.

ктов того же типа.

Следующее также возможно

public class Foo {

    private int a;

    public void mutateOtherInstance(Foo otherFoo) {
        otherFoo.a = 1;
    }
}

Вы можете поспорить, если это желательно или нет, но JLS определило, что это законно, это просто правило жизни.

 Viktor16 янв. 2011 г., 20:53
Это также возможно в C #, и я думаю, что C ++ (но не цитируйте меня об этом) идеально подходит для внутренней сортировки и функций равенства, когда у вас есть текущий объект (this) и экземпляр того же класса, и вам нужно сравнить частные данные.
 Benjamin Gale16 янв. 2011 г., 20:44
Проголосовал - я никогда не знал, что это возможно. Я скорее человек на C #, чем на Java, но я только что проверил это на C #, и он работает так же.
 varunl20 мая 2013 г., 08:23
@ArjanTijms Я хочу прочитать больше об этом. Не могли бы вы помочь мне найти ссылку? Я не уверен, что я должен искать.
 Arjan Tijms20 мая 2013 г., 09:22
@varunl Из глубины моей головы эта книга, по крайней мере, объясняет это:amazon.com/dp/0071591060 Возможно, вы захотите, заглянуть в JSL, чтобы увидеть, содержит ли он еще некоторые детали.
 Arjan Tijms16 янв. 2011 г., 21:07
Интересно, я никогда не знал этого о C #. В C ++ это определенно законно.

main метод в классеFerrari и, следовательно, может получить доступ к закрытым переменным, даже если он статический.

main() является часть содержащего класса. По факту,main() точно так же, как любой другой метод, за исключением того, что вы можете запустить JVM и сказать ему, чтобы запуститьmain() метод класса из командной строки.

Ваш ответ на вопрос