создание объекта в Java - PullRequest
       5

создание объекта в Java

0 голосов
/ 07 апреля 2011
class cricket{
    void bat(){
        System.out.println("sachin");
    }
    public static void main(String ar[]){
        cricket cricket=new cricket();
        cricket.bat();
    }
}

Выход: Сэчин


имя объекта совпадает с именем класса .. как это возможно .. программа выдает правильный вывод. В чем причина?

Ответы [ 4 ]

7 голосов
/ 07 апреля 2011

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

int int = 3; // not allowed
Integer Integer = 3; // allowed, but discouraged

Если бы ваш код был более условным, это было бы так:

class Cricket{
  void bat(){
    System.out.println("sachin");
  }
  public static void main(String ar[]){
    Cricket cricket=new Cricket();
    cricket.bat();
  }
}

Наличие переменной, точно такой же, как у класса, может вызватьнекоторая путаница со статическими методами.Учтите это:

void foo(Runnable r)  throws Exception {
    Thread Thread = new Thread(r);
    Thread.start();
    Thread.sleep(100); // Okay, now WTF does this do?
}
6 голосов
/ 07 апреля 2011

Когда компилятор Java видит:

 cricket cricket=new cricket();

, он знает, что левая сторона - это объявление переменной, а правая сторона - вызов конструктора, потому что между «new» и ( разрешен только класс..

Локальные переменные сохраняются в другом пространстве имен («область локального блока»), поэтому это работает.

Но, как вы заметили, это сбивает с толку читателя.Вот почему правила для Java гласят «прописные имена классов»:

Cricket cricket = new Cricket();

Заглавная буква полностью игнорируется компилятором Java, но это очень помогает читателям-людям.

2 голосов
/ 07 апреля 2011

Это разрешено (имена объектов и имена классов не сталкиваются), но это сбивает с толку, так что обычно это считается плохой идеей.

1 голос
/ 07 апреля 2011

Вот где все становится действительно грязно:

class bug {
    public static void chirp() {
    }
}

class cricket {
    public void chirp() {
    }
}

//...
cricket bug = new cricket();
bug.chirp();

Какой chirp() вызывается, и как вы называете другой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...