Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы Рыков.docx
Скачиваний:
102
Добавлен:
21.04.2015
Размер:
305.38 Кб
Скачать
  1. Особенности языка Java: интерпретируемость, независимость от платформы, мобильность.

Интерпретируемость. Интерпретатор языка Java может пересылаться на любую машину и выполнять байт-код непосредственно на ней.

Независимость от архитектуры. Компилятор генерирует объектный файл, формат которого не зависит от архитектуры компьютера. Скомпилированная программа может выполняться на любых процессорах под управлением системы выполнения программ языка Java. Для этого компилятор языка Javaгенерирует команды байт-кода, не зависящие от конкретной архитектуры компьютера. Байт-код разработан таким образом, что бы на любой машине его можно было легко интерпретировать либо на лету перевести в машинозависимый код. Кросс-платформенность достигается за счет использования виртуальной машины JVM (Java Virtual Machine). JVM - это программа, которая пишется специально для каждой реальной платформы, чтобы с одной стороны скрыть все ее особенности, а с другой - предоставить единую среду исполнения для Java-приложений.

Машинонезависимость. В отличие от языков C и C++, в спецификации Java нет аспектов, зависящих от системы реализации. И размер основных типов данных, и арифметические операции над ними точно определены.

 Динамичность. Язык Java был разработан так, чтобы легко адаптироваться к постоянно изменяющейся среде. В библиотеки можно свободно добавлять новые методы и объекты, не причиняя никакого вреда.

  1. Типы данных в языке Java: простые и ссылочные типы.

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

  1. Массивы в Java: массивы простых типов и массивы объектов.

Массивы могут быть основаны как на примитивных типах (например, для хранения числовых значений 100 измерений), так и на ссылочных (например, если нужно хранить описание 100 автомобилей в гараже в виде экземпляров класса Car).

  1. Классы в языке Java: особенности реализации, определение класса.

Определение класса:

Для создания классов вы можете использовать только ключевое слово class. Что же касается union, то это ключевое слово в Java не применяется. В языке программирования С++ описание класса может быть отделено от его определения. Для Java это не так - описание класса недопустимо. Все методы должны быть определены внутри определения класса. Недопустимо определение вложенных классов. В Java также нет шаблонов. Вы можете создавать классы только на базе других классов. Объект класса создается при помощи ключевого слова new, однако вы не можете удалить объект явным образом, так как ключевое слово delete языка программирования С++ в Java не используется. При определении класса вы не можете указать деструктор. Функции удаления объектов Java из памяти выполняет система сборки мусора. Внутри одного исходного файла вы можете определить только один общедоступный класс public. Все классы в Java наследуются от класса Object, поэтому для любого объекта вы можете использовать методы этого класса.

Определение методов:

Вы не можете определять методы вне тела класса, создавая таким образом глобальные функции. Нет также возможности определения вне класса глобальных данных. Тем не менее, внутри класса можно определять статические методы и поля (с помощью ключевого слова static), которые будут играть роль глобальных методов и данных. Пользуясь ключевыми словами static и final, вы можете определять внутри классов глобальные константы. Если в базовом классе метод определен с ключевым словом final, его нельзя переопределить в дочернем классе, созданном на базе данного метода. Методы не могут быть определены как inline. Методы Java могут создавать исключения, вызванные возникновением ошибок или других событий. Все создаваемые исключения должны либо обрабатываться внутри метода, либо описываться в определении метода после ключевого слова throws.

Переопределение операторов:

В языке С++ вы могли переопределить операторы, такие как +, -, ++ и так далее. Язык Java не допускает такое переопределение, что сделано для упрощения программирования. Тем не менее, операторы “+” и “+=” перегружены по умолчанию для выполнения операции слияния текстовых строк класса String.

Интерфейсы:

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

Ссылки на методы класса:

Так как в Java нет указателей, нет возможности ссылаться на методы с помощью оператора ->. Для ссылки на метод класса используется только оператор “точка”. Оператор “::” также не определен в Java. Если вам необходимо вызвать метод из базового класса, следует использовать ключевое слово super.

Наследование:

С помощью ключевого слова extends вы можете унаследовать один класс (дочерний) от другого (базового). Множественное наследование не допускается. Таким образом, для каждого дочернего класса может быть только один базовый класс. При необходимости, однако, этот дочерний класс может реализовывать произвольное количество интерфейсов. Для ссылки на методы базового класса вы должны использовать ключевое слово super. При необходимости вы можете вызвать в первой исполняемой строке конструктора дочернего класса конструктор базового класса (опять же с помощью ключевого слова super).

  1. Классы в языке Java: управление доступом к элементам класса; понятие пакета.

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

Управление доступом к элементам класса: Класс в Java может включать в себя поля, методы, методы-конструкторы, а также блоки инициализации и внутренние (вложенные) классы. К элементам класса относятся поля, методы (и внутренние классы). Поле — переменная, содержащая данные класса или экземпляра класса (объекта типа данного класса). Метод — это именованный фрагмент исполнимого кода класса, вызов которого возможен как внутри класса, так и для объектов класса. Все поля и методы доступны для методов данного класса. Для ограничения доступа к полям и методам из других классов используются спецификаторы доступа.

  1. Классы в языке Java: поля класса.

Поля (переменные) класса - объявляются вне методов и доступны всем методам класса.

Объявление поля класса имеет вид: [спецификатор доступа] [модификаторы] тип_данных имя_поля [=значение_инициализации];

Спецификаторы доступа (public, protected, private).

Модификаторы полей класса - static Переменная, имеющая этот модификатор, является полем класса в целом и существует в единственном экземпляре, независимо от того, сколько объектов класса создано и создавались ли они вообще.

Final - Этот модификатор поля класса запрещает изменение значения поля после его инициализации (попытка присваивания нового значения приводит к ошибке при компиляции).

Transient - Данный модификатор указывает, что экземпляр переменной не является частью устойчивого состояния объекта и поэтому не должен записываться на постоянное хранение при сериализации объекта, т.е. записи его состояния в файл. Не используется совместно с final и static.

Volatile - Используется в многопоточном программировании. Сообщает компилятору, что к полю могут одновременно обращаться несколько потоков текущего процесса и это поле не следует использовать при оптимизации программы.

  1. Классы в языке Java: методы, конструкторы.

Объект класса имеет данные (переменные) и поведение (методы), определяемые его классом. Поведение — это множество операций, которые объект может выполнять над данными. Метод — это именованный фрагмент исполнимого кода класса, вызов которого возможен как внутри класса, так и для объектов класса. Связанное хранение в классе, как полей данных, так и методов для работы с ними называется инкапсуляцией. Определение метода содержит объявление метода и тело метода.

Модификаторы методов:

  • abstract — модификатор реализации

  • static — модификатор принадлежности

  • final — модификатор переопределения

  • Synchronized-методы используются для организации корректной работы многопоточных приложений.

  • native — это метод, только объявленный в Java-классе, а реализованный как внешняя библиотека в машинно-зависимом коде.

Конструкторы - это специальные методы, используемые для инициализации создаваемых объектов (экземпляров классов).

Особенности конструкторов:

  • Используются для инициализации полей класса.

  • Имя конструктора должно совпадать с именем класса, содержащим объявление конструктора.

  • Конструктор не возвращает значения.

  • Конструктор вызывается при создании экземпляра класса с помощью оператора new.

  • Класс может содержать несколько конструкторов с различными списками параметров.

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

  • Модификаторами конструктора могут быть только спецификаторы доступа. Обычно используется public, чтобы уровень доступа к конструктору не был ниже уровня доступа к самому классу.

  • В теле конструктора в качестве начальных операторов могут использоваться операторы вызова других конструкторов

8.Исключения: понятие исключения; классы исключений; необходимость обработки исключений.

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

Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable. Его потомками являются подклассы Exception и Error.

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

Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине. Программа дополнительную память всё равно не сможет обеспечить для JVM.

В Java все исключения делятся на три типа: контролируемые исключения (checked) и неконтролируемые исключения (unchecked), к которым относятся ошибки (Errors) и исключения времени выполнения (RuntimeExceptions, потомок класса Exception).

Контролируемые исключения представляют собой ошибки, которые можно и нужно обрабатывать в программе, к этому типу относятся все потомки класса Exception (но не RuntimeException).

Обработка исключения может быть произведена с помощью операторов try…catch, либо передана внешней части программы. Например, метод может передавать возникшие в нём исключения выше по иерархии вызовов, сам его не обрабатывая.

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

9.Исключения: операторы языка Java, используемые для обработки исключений.

Существует пять ключевых слов, используемых в исключениях: try,catch,throw,throws,finally. Порядок обработки исключений следующий.

Операторы программы, которые вы хотите отслеживать, помещаются в блок try. Если исключение произошло, то оно создаётся и передаётся дальше. Ваш код может перехватить исключение при помощи блокаcatchи обработать его. Системные исключения автоматически передаются самой системой. Чтобы передать исключение вручную, используетсяthrow. Любое исключение, созданное и передаваемое внутри метода, должно быть указано в его интерфейсе ключевым словомthrows. Любой код, который следует выполнить обязательно после завершения блокаtry, помещается в блокfinally

10.Исключения: организация обработки исключений; определение собственных исключений.

Операторы программы, которые вы хотите отслеживать, помещаются в блок try. Если исключение произошло, то оно создаётся и передаётся дальше. Ваш код может перехватить исключение при помощи блока catch и обработать его. Системные исключения автоматически передаются самой системой. Чтобы передать исключение вручную, используется throw. Любое исключение, созданное и передаваемое внутри метода, должно быть указано в его интерфейсе ключевым словом throws. Любой код, который следует выполнить обязательно после завершения блока try, помещается в блок finally

определение собственных исключений : просто определите подкласс Exception (который, разумеется, является подклассом Throwable). Ваши подклассы не обязаны реализовывать что-либо — важно само их присутствие в системе типов, которое позволит использовать их как исключения.

Класс Exception не определяет никаких собственных методов. Естественно, он наследует методы, представленные в Throwable. Таким образом, всем исключениям, включая те, что вы создадите сами, доступны методы, определенные в Throwable.