Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

System.out.println((String)rb.getObject("Bundle description")); Behavior be = (Behavior)rb.getObject("Behavior"); System.out.println(be.getBehavior()); System, out. println(be.getCapital());

}

Результатом будет:

Русский набор ресурсов Русский вариант поведения Москва

English resource bundle English behavior London

Классы и81Не8оигсеВипй1е и РгорегиевНеБоигсеВиг^е

У класса ResourceBundle определено два прямых потомка ListResourceBundle и PropertiesResourceBundle. PropertiesResourceBundie хранит набор ресурсов в файле, который представляет собой набор строк.

Алгоритм конструирования объекта, содержащего набор ресурсов, был описан в предыдущем параграфе. Во всех случаях, когда в качестве последнего элемента используется .properties, например, baseclass + "_" + language 1 + "_" + country 1 + ".properties", речь идет о создании flesourceBundle из файла с наименованием baseclass + "_" + language 1 + "_" + country 1 и расширением properties. Обычно класс peSOurceBundle помещают в пакет resources, а файл свойств - в каталог ^sources. Тогда для того, чтобы инстанциировать нужный класс, необ­ходимо указать полный путь к этому классу (файлу):

getBundlef'resources.MyResource", Locale. getDefaultO);

ListResourceBundle хранит набор ресурсов в виде коллекции и являет­ся абстрактным классом. Классы, которые наследуют ListResourceBundle, должны обеспечить:

•   переопределение метода Object[][] getContents(), который воз­вращает массив ресурсов;

•   собственно двумерный массив, содержащий ресурсы. Рассмотрим пример:

public class MyResource extends ListResourceBundle { Vector v = new Vector(); Object[][] resources = { {"StringKey","String"}, {"DoubleKey",new Double(O.O)}, {"VectorKey",v},

};

public MyResource() { super();

v.addf'Element 1"); v.addf'Element 2"); v.addfElement 3");

}

protected Object[][] getContents() { return resources;

}

}

public class Test { public Test() {

}

public static void main(String[] args) { Test test = new Test();

ResourceBundle rb = ResourceBundle.getBundle ("experiment.MyResource",Locale.getDefaultO);

Vector v = (Vector)rb.getObject("VectorKey"); Iterator it = v.iterator(); while(it.hasNext()) {

System.out.println(it.next());

}

}

}

Результатом будет:

Element 1 Element 2 Element 3

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

Заключение

В этой лекции были рассмотрены вспомогательные классы пакета java.util. Как можно было заметить, они относятся к самым разным зада­чам, а потому редкая программа обходится без использования хотя бы од­ного класса этого пакета.

Напомним кратко все основные классы и их особенности:

• Для работы с датой и временем должны использоваться классы Date, Calendar. Класс Calendar абстрактный, существует кон­кретная реализация этого класса GregorianCalendar.

• Класс Observer и интерфейс Observable реализуют парадигму MVC и предназначены для уведомления одного объекта об изме­нении состояния другого.

• Коллекции (Collections) не накладывают ограничений на порядок следования и дублирование элементов.

• Списки (List) поддерживают порядок элементов (управляются либо самими данными, либо внешними алгоритмами).

• Наборы (Set) не допускают дублированных элементов.

• Карты (Maps) используют уникальные ключи для поиска содер­жимого.

• Применение массивов делает добавление, удаление и увеличение количества элементов затруднительным.

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

•  Использование деревьев (Tree) облегчает вставку, удаление и уве­личение размера хранилища, снижает скорость индексированного доступа, но увеличивает скорость поиска.

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

•  Класс Properties удобен для хранения наборов параметров в виде пар ключ/значение. Параметры могут сохраняться в потоки (файлы) и загружаться из них.

• Реализация классом интерфейса Comparator позволяет сравнивать экземпляры класса друг с другом и, соответственно, сортировать их, например, в коллекциях.

• Arrays является классом-утилитой и обеспечивает набор методов, реализующих различные приемы работы с массивами. Не имеет конструктора.

•   StringTokenizer - вспомогательный класс, предназначенный для разбора строк на лексемы.

•  При необходимости работать с сущностями, представленными в виде битовых последовательностей, удобно использовать класс BitSet.

•  Манипулировать ресурсами, которые различаются в зависимости от локализации, удобно с помощью классов ResourceBundle, ListResourceBundle, PropertiesResourceBundle. Собственно ло-каль задается с помощью класса Locale.

КУРС___________ _______________________________ п

11рограммирование на ja

Вариант 1

Необходимо написать метод, который возвращает случайное число в диапазоне от О до 100, кратное 5. Из перечисленных вариантов выберите правильный.

□       public int getRandom5() {

return (int)(Math.random()*20) * 5;

}

□       public int getRandom5() {

Math m = new Math()

return (int)(m.random()*20) * 5;

}

□       public int getRandom5() {

return (Math.random()*20) * 5;

}

2.   В JDK 1.2 введены новые классы и интерфейсы, которые позволяют работать с наборами объектов. Отметьте те из них, которые являются интерфейсами.

java.util.List

java.util.TreeMap

java. util .AbstractList

java.util.SortedMap

java. util. Iterator

java.util.Collections

3.   Какое значение будет выведено на консоль в представленном фрагменте кода?

String strl = "abc"; String str2 = "abc"; System.out.println(str1 == str2);

□ true

□ false

КуРС                                                                                               Программирование Haj^

Вариант 2

Вариант 3

1.   Какое из выражений относительно класса java.lang.Runtime является корректным?

□ объект Runtime создается при помощи следующего кода. Runtime г = Runtime.getRuntimeO;

□ метод дс(), определенный в RuntimeQ, вызывает начало сборки мусора виртуальной машиной Java

□ метод freeMemoryO, определенный в классе Runtime, освобождает неиспользуемую память

2.   Какие высказывания относительно java.util. Vector и java.util.Hashtable можно считать корректными?

|~1   в Vector могут сохраняться ссылки как на объекты, так и на примитивные типы

□       ссылки на объекты в Vector хранятся в порядке их добавления

[~|   в качестве ключей для Hashtable должны передаваться объекты типа String

□ ссылки на объекты в Hashtable хранятся в порядке их добавления

□ и Hashtable, и Vector являются синхронизированными, чтобы избежать ситуации, когда несколько потоков пытаются получить доступ к одной и той же коллекции

3.   Будет ли переменная sb после выполнения кода в строке 2 указывать на тот же самый объект?

1. StringBuffer sb = new StringBuffer("abc");

2. sb.appendf'x");

□ да

□ нет

Необходимо написать метод, который получает в качестве

параметра значение угла в градусах типа double

и вычисляет его косинус.

Какой из приведенных вариантов верен?

Q   double getCos(double angle) { return Math.cos(angle);

|"1   double getCos(double angle) {

return Math.cos(angle * Math.PI / 180);

}

□   double getCos(double angle) {

return Math.cos(angle * PI / 180);

}

Приведенный ниже пример кода вызывает ошибку компи­ляции

double getCos(double angle) { return Math.cos(angle);

}

public static void showStatus(Boolean flag) {

if(flag) { System.out.println( "FIRED")

} else {

System.out.println("NOT READY");

}

}

Какое из перечисленных исправлений решит проблему?

□ заменить if(flag) { на if(flag.equals(true)

□ заменить public static void showStatus(Boolean flag) { на public static void showStatus(boolean flag) {

□ заменить if(flag) { на if(flag.booleanValue()) {

Какой из перечисленных ниже классов имеет наибольшее сходство с классом Vector?

□ AbstractCollection D   ArrayList

□ Hashtable