Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
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