Ключевое слово "класс" в объявлении - PullRequest
9 голосов
/ 20 мая 2010

В интервью я столкнулся с довольно простым вопросом.

Почему мы используем ключевое слово class для объявления классов?

Ответы [ 5 ]

12 голосов
/ 20 мая 2010

Краткий ответ: , потому что это так в C ++ . Java взяла большую часть своего синтаксиса из C ++ - на мой взгляд, это мудрое решение, поскольку оно действительно помогало рисовать программистов, когда оно еще было новым.

Теперь, если ваш вопрос заключается в том, зачем вообще нужно ключевое слово - то есть, почему компилятор не может просто определить, где объявлены классы - возможно, это возможно, но использование ключевого слова имеет преимущества

  1. Быть компилируемым.
  2. Быть более читабельным для людей, чем неявные декларации.
  3. Как я уже говорил выше - похоже на синтаксис C ++.

EDIT: одна вещь - некоторые вещи просто не могут быть выведены компилятором в синтаксисе Java - например, единственное отличие между пустым классом и пустым интерфейсом ( оба являются легальными в Java) - это ключевое слово class / interface.

3 голосов
/ 20 мая 2010

Чтобы лучше разрешить неоднозначность. Файл .java может быть интерфейсом, перечислением или классом. Как бы вы, например, различали interface и abstract class без тел методов?

Компилятор Java просто не работает таким образом - то есть просмотрите объявление и посмотрите, что это может быть. Не сказать, что не может, просто так спроектирован.

2 голосов
/ 20 мая 2010

Причина просто в удобочитаемости.

  • Если класс объявляется, используйте ключевое слово class.
  • Если объявляется enum, используйте ключевое слово enum.
  • Если интерфейс объявляется, используйте ключевое слово interface.

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

Полный список ключевых слов приведен в спецификации языка Java:

JLS 3,9 Ключевые слова

Следующие последовательности символов, сформированные из букв ASCII, зарезервированы для использования в качестве ключевых слов и не могут использоваться в качестве идентификаторов:

        abstract    continue    for           new          switch
        assert      default     if            package      synchronized
        boolean     do          goto          private      this
        break       double      implements    protected    throw
        byte        else        import        public       throws
        case        enum        instanceof    return       transient
        catch       extends     int           short        try
        char        final       interface     static       void 
        class       finally     long          strictfp     volatile
        const       float       native        super        while

Ключевые слова const и goto зарезервированы, хотя в настоящее время они не используются.

Смотри также

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

1 голос
/ 20 мая 2010

Поскольку компилятору намного проще проверять исходный код по грамматике на предмет допустимого синтаксиса, разрешенного в классе, по сравнению с допустимым синтаксисом, разрешенным в определении интерфейса / перечисления / атрибута, если вы явно предоставите ему эту информацию, а не компилятор иметь разум, чтобы вывести это.

1 голос
/ 20 мая 2010

Чтобы отделить его от интерфейсов / методов, заявив, что есть вероятность, что он может быть создан где-то еще (если он не абстрактный и т. Д.).

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