- •Аннотация
- •Лекция 1. Что такое Java? История создания.
- •1. Что такое Java?
- •2. История создания Java
- •2.1. Сложности внутри Sun Microsystems
- •2.2. Проект Green
- •2.3. Компания FirstPerson
- •2.4. World Wide Web
- •2.5. Возрождение Oak
- •2.6. Java выходит в свет
- •3. История развития Java
- •3.1. Браузеры
- •3.2. Сетевые компьютеры
- •3.3. Платформа Java
- •4. Заключение
- •5. Контрольные вопросы
- •Аннотация
- •1. Основы объектно-ориентированного программирования
- •1.1. Методология процедурно-ориентированного программирования
- •1.2. Методология объектно-ориентированного программирования
- •1.3. Объекты
- •1.3.1. Состояние.
- •1.3.2. Поведение
- •1.3.3. Уникальность
- •1.4. Классы
- •1.4.1. Инкапсуляция
- •1.4.2. Полиморфизм
- •1.5. Типы отношений между классами
- •1.5.1. Агрегация
- •1.5.2. Ассоциация
- •1.5.3. Наследование
- •1.5.4. Метаклассы
- •1.6. Достоинства ООП
- •1.7. Недостатки ООП
- •1.8. Заключение
- •1.9. Контрольные вопросы
- •Аннотация
- •Лекция 3. Лексика языка
- •1. Лексика языка
- •1.1. Кодировка
- •1.2. Анализ программы
- •1.2.1. Пробелы
- •1.2.2. Комментарии
- •1.2.3. Лексемы
- •1.3. Виды лексем
- •1.3.1. Идентификаторы
- •1.3.2. Ключевые слова
- •1.3.3. Литералы
- •1.3.3.1. Целочисленные литералы
- •1.3.3.2. Дробные литералы
- •1.3.3.3. Логические литералы
- •1.3.3.4. Символьные литералы
- •1.3.3.5. Строковые литералы
- •1.3.3.6. Null литерал
- •1.3.3.7. Разделители
- •1.3.3.8. Операторы
- •1.3.3.9. Заключение
- •1.4. Дополнение: Работа с операторами
- •1.4.1. Операторы присваивания и сравнения
- •1.4.2. Арифметические операции
- •1.4.3. Логические операторы
- •1.4.4. Битовые операции
- •1.5. Заключение
- •1.6. Контрольные вопросы
- •Аннотация
- •Лекция 4. Типы данных
- •1. Введение
- •2. Переменные
- •3. Примитивные и ссылочные типы данных
- •3.1. Примитивные типы
- •3.2. Целочисленные типы
- •4. Дробные типы
- •5. Булевский тип
- •6. Ссылочные типы
- •6.1. Объекты и правила работы с ними
- •6.2. Класс Object
- •6.3. Класс String
- •6.4. Класс Class
- •7. Заключение
- •8. Заключение
- •9. Контрольные вопросы
- •Аннотация
- •Лекция 5. Имена. Пакеты
- •1. Введение
- •2. Имена
- •2.1. Простые и составные имена. Элементы.
- •2.2. Имена и идентификаторы
- •2.3. Область видимости (введение)
- •3. Пакеты
- •3.1. Элементы пакета
- •3.2. Платформенная поддержка пакетов
- •3.3. Модуль компиляции
- •3.3.1. Объявление пакета
- •3.3.2. Импорт-выражения
- •3.3.3. Объявление верхнего уровня
- •3.4. Уникальность имен пакетов
- •4. Область видимости имен
- •4.1. "Затеняющее" объявление (Shadowing)
- •4.2. "Заслоняющее" объявление (Obscuring)
- •5. Соглашения по именованию
- •6. Заключение
- •7. Контрольные вопросы
- •Аннотация
- •Лекция 6. Объявление классов
- •1. Введение
- •2. Модификаторы доступа
- •2.1. Предназначение модификаторов доступа
- •2.2. Разграничение доступа в Java
- •3. Объявление классов
- •3.1. Заголовок класса
- •3.2. Тело класса
- •3.3. Объявление полей
- •3.4. Объявление методов
- •3.5. Объявление конструкторов
- •3.6. Инициализаторы
- •4. Дополнительные свойства классов
- •4.1. Метод main
- •4.2. Параметры методов
- •4.3. Перегруженные методы
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 7. Преобразование типов
- •1. Введение
- •2. Виды приведений
- •2.1. Тождественное преобразование
- •2.2. Преобразование примитивных типов (расширение и сужение)
- •2.3. Преобразование ссылочных типов (расширение и сужение)
- •2.4. Преобразование к строке
- •2.5. Запрещенные преобразования
- •3. Применение приведений
- •3.1. Присвоение значений
- •3.2. Вызов метода
- •3.3. Явное приведение
- •3.4. Оператор конкатенации строк
- •3.5. Числовое расширение
- •3.5.1. Унарное числовое расширение
- •3.5.2. Бинарное числовое расширение
- •4. Тип переменной и тип ее значения
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •1. Введение
- •2. Статические элементы
- •3. Ключевые слова this и super
- •4. Ключевое слово abstract
- •5. Интерфейсы
- •5.1. Объявление интерфейсов
- •5.2. Реализация интерфейса
- •5.3. Применение интерфейсов
- •6. Полиморфизм
- •6.1. Поля
- •6.2. Методы
- •6.3. Полиморфизм и объекты
- •7. Заключение
- •8. Контрольные вопросы
- •Аннотация
- •Лекция 9. Массивы
- •1. Введение
- •2. Массивы, как тип данных в Java
- •2.1. Объявление массивов
- •2.2. Инициализация массивов
- •2.3. Многомерные массивы
- •2.4. Класс массива
- •3. Преобразование типов для массивов
- •3.1. Ошибка ArrayStoreException
- •3.2. Переменные типа массив, и их значения
- •4. Клонирование
- •4.1. Клонирование массивов
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 10. Операторы и структура кода
- •1. Управление ходом программы
- •2. Нормальное и прерванное выполнение операторов
- •3. Блоки и локальные переменные
- •4. Пустой оператор
- •5. Метки
- •6. Оператор if
- •7. Оператор switch
- •8. Управление циклами
- •8.1. Цикл while
- •8.2. Цикл do
- •8.3. Цикл for
- •9. Операторы break и continue
- •9.1. Оператор continue
- •9.2. Оператор break
- •10. Именованные блоки
- •11. Оператор return
- •12. Оператор synchronized
- •13.1. Причины возникновения ошибок
- •13.2. Обработка исключительных ситуаций
- •13.2.1. Конструкция try-catch
- •13.2.2. Конструкция try-catch-finally
- •13.3. Использование оператора throw
- •13.4. Обрабатываемые и необрабатываемые исключения
- •13.5. Создание пользовательских классов исключений
- •13.6. Переопределение методов и исключения
- •13.7. Особые случаи
- •14. Заключение
- •15. Контрольные вопросы
- •Аннотация
- •Лекция 11. Пакет java.awt
- •1. Введение
- •2. Апплеты
- •2.1. Тег HTML <Applet>
- •2.2. Передача параметров
- •2.3. Контекст апплета
- •2.4. Отладочная печать
- •2.5. Порядок инициализации апплета
- •2.6. Перерисовка
- •2.7. Задание размеров графических изображений
- •2.8. Простые методы класса Graphics
- •2.9. Цвет
- •2.9.1. Методы класса Color
- •2.10. Шрифты
- •2.10.1. Использование шрифтов
- •2.10.2. Позиционирование и шрифты: FontMetrics
- •2.10.3. Использование FontMetrics
- •2.10.4. Центрирование текста
- •3. Базовые классы
- •4. Основные компоненты
- •5. Менеджеры компоновки
- •6. Окна
- •7. Меню
- •8. Обработка событий
- •8.1. Рисование "каракулей" в Java
- •8.2. Рисование "каракулей" с использованием встроенных классов
- •9. Заключение
- •10. Контрольные вопросы
- •Аннотация
- •Лекция 12. Потоки выполнения. Синхронизация
- •1. Введение
- •2. Многопоточная архитектура
- •3. Базовые классы для работы с потоками
- •3.1. Класс Thread
- •3.2. Интерфейс Runnable
- •3.3. Работа с приоритетами
- •3.4. Демон-потоки
- •4. Синхронизация
- •4.1. Хранение переменных в памяти
- •4.2. Модификатор volatile
- •4.3. Блокировки
- •5. Методы wait(), notify(), notifyAll() класса Object
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 13. Пакет java.lang.
- •1. Введение
- •2. Object
- •3. Class
- •4. Wrapper Classes
- •4.1. Integer
- •4.2. Character
- •4.3. Boolean
- •4.4. Void
- •5. Math
- •6. Строки
- •6.1. String
- •6.2. StringBuffer
- •7. Системные классы
- •7.1. ClassLoader
- •7.2. SecurityManager - менеджер безопасности
- •7.3. System
- •7.4. Runtime
- •7.5. Process
- •8. Потоки исполнения
- •8.1. Runnable
- •8.2. Thread
- •8.3. ThreadGroup
- •9. Исключения
- •10. Заключение
- •11. Контрольные вопросы
- •Аннотация
- •Лекция 14. Пакет java.util
- •1. Введение
- •2. Работа с датами и временем
- •2.1. Класс Date
- •2.2. Классы Calendar и GregorianCalendar
- •2.3. Класс TimeZone
- •2.4. Класс SimpleTimeZone
- •3. Интерфейс Observer и класс Observable
- •4. Коллекции
- •4.1. Интерфейсы
- •4.1.1. Интерфейс Collection
- •4.1.2. Интерфейс Set
- •4.1.3. Интерфейс List
- •4.1.4. Интерфейс Map
- •4.1.5. Интерфейс SortedSet
- •4.1.6. Интерфейс SortedMap
- •4.1.7. Интерфейс Iterator
- •4.2. Aбстрактные классы используемые при работе с коллекциями.
- •4.3. Конкретные классы коллекций
- •4.4. Класс Collections
- •5. Класс Properties
- •6. Интерфейс Comparator
- •7. Класс Arrays
- •8. Класс StringTokenizer
- •9. Класс BitSet
- •10. Класс Random
- •11. Локализация
- •11.1. Класс Locale
- •11.2. Класс ResourceBundle
- •12. Заключение
- •13. Контрольные вопросы
- •Аннотация
- •Лекция 15. Пакет java.io
- •1. Система ввода/вывода. Потоки данных (stream)
- •1.1. Классы InputStream и OutputStream
- •1.2. Классы-реализации потоков данных
- •1.2.1. Классы ByteArrayInputStream и ByteArrayOutputStream
- •1.2.2. Классы FileInputStream и FileOutputStream
- •1.2.3. PipedInputStream и PipedOutputStream
- •1.2.4. StringBufferInputStream
- •1.2.5. SequenceInputStream
- •1.3. Классы FilterInputStreeam и FilterOutputStream. Их наследники.
- •1.3.1. BufferedInputStream и BufferedOutputStream
- •1.3.2. LineNumberInputStream
- •1.3.3. PushBackInputStream
- •1.3.4. PrintStream
- •1.3.5. DataInputStream и DataOutputStream
- •2. Serialization
- •2.1. Версии классов
- •3. Классы Reader и Writer. Их наследники.
- •4. Класс StreamTokenizer
- •5. Работа с файловой системой.
- •5.1. Класс File
- •5.2. Класс RandomAccessFile
- •6. Заключение
- •7. Контрольные вопросы
- •Аннотация
- •Лекция 16. Введение в сетевые протоколы
- •1. Основы модели OSI
- •2. Physical layer (layer 1)
- •3. Data layer (layer 2)
- •3.1. LLC sublayer.
- •3.2. MAC sublayer.
- •4. Network layer (layer 3)
- •4.1. Class A
- •4.2. Class B
- •4.3. Class CClass DClass E
- •5. Transport layer (layer 4)
- •6. Session layer (layer 5)
- •7. Presentation layer (layer 6)
- •8. Application layer (layer 7)
- •9. Утилиты для работы с сетью
- •9.1. IPCONFIG (IFCONFIG)
- •9.3. Ping
- •9.4. Traceroute
- •9.5. Route
- •9.6. Netstat
- •9.7. Задания для практического занятия
- •10. Пакет java.net
- •11. Заключение
- •12. Контрольные вопросы
Стр. 28 из 42 |
Локализация |
}
System.out.println(); r = new Random(100);
for(int cnt=0;cnt<9;cnt++){ System.out.print(r.nextInt() + " ");
}
System.out.println();
// Generating sequence of bytes byte[] randArray = new byte[8]; r.nextBytes(randArray); test.dumpArray(randArray);
}
void dumpArray(byte[] arr){
for(int cnt=0;cnt< arr.length;cnt++){ System.out.print(arr[cnt]);
}
System.out.println();
}
}
-1193959466 -1139614796 837415749 -1220615319 -1429538713 118249332 -951589224
-1193959466 -1139614796 837415749 -1220615319 -1429538713 118249332 -951589224
81;-6;-107;77;118;17;93;-98;
11. Локализация
11.1. Класс Locale
Класс Locale предназначен для отображения определенного региона. Под регионом принято понимать не только географическое положение, но так же языковую и культурную среду. Так например для помимо того, что указывается страна Швейцария, можно указать так же и язык французский или немецкий.
Определено два варианта конструкторов в классе Locale
Locale(String language, String country)
Locale(String language, String country, String variant)
Первые два параметра в обоих конструкторах определяют язык и страну для которой определяется локаль, согласно кодировке ISO. (См приложения XXX1,XXX2). Список поддерживаемых стран и языков можно так же получить с помощью вызова статических методов Locale.getISOLanguages() Locale.getISOCountries() соответственно. Во втором варианте конструктора указан так же строковый параметр variant в котором кодируется информация о платформе. Если здесь необходимо указать дополнительные параметры,
Программирование на Java
Rendered by www.RenderX.com
Класс Locale |
Стр. 29 из 42 |
то их необходимо разделить символом подчеркивания, причем более важный параметр должен следовать первым.
Пример использования
Locale l = new Locale("ru","RU");
Locale l = new Locale("en","US","WINDOWS");
Статический метод getDefault() возвращает текущую локаль, сконструированную на основе настроек операционной системы под управлением которой функционирует JVM.
Для наиболее часто использующихся локалей заданы константы. Например Locale.US или
Locale.GERMAN.
После того как экземпляр класса Loale создан, с помощью различных методов можно получить дополнительную информацию о локали.
public class Test { public Test() {
}
public static void main(String[] args) { Test test = new Test();
Locale l = Locale.getDefault();
System.out.println(l.getCountry() + " " + l.getDisplayCountry() + " " + l.getISO3Country());
System.out.println(l.getLanguage() + " " + l.getDisplayLanguage() + " " + l.getISO3Language());
System.out.println(l.getVariant() + " " + l.getDisplayVariant()); l = new Locale("ru","RU","WINDOWS"); System.out.println(l.getCountry() + " " + l.getDisplayCountry() + "
" + l.getISO3Country());
System.out.println(l.getLanguage() + " " + l.getDisplayLanguage() + " " + l.getISO3Language());
System.out.println(l.getVariant() + " " + l.getDisplayVariant());
}
}
US United States USA en English eng
RU Russia RUS ru Russian rus WINDOWS WINDOWS
Программирование на Java
Rendered by www.RenderX.com
Стр. 30 из 42 |
Локализация |
11.2. Класс ResourceBundle
Абстрактный Класс ResourceBundle предназначен для хранения объектов специфичных для локали. Например, когда необходимо получить набор строк, зависящих от локали используют ResourceBundle.
Использование ResourceBundle настоятельно рекомендуется, если предполагается использовать программу в многоязыковой среде. С помощью этого класса легко манипулировать, наборами ресурсов зависящих от локалей, легко их менять, добавлять новые и т.д.
Набор ресурсов - это фактически набор классов, имеющих одно базовое имя. Далее наименование класса дополняется наименованием локали, с которой связывается этот класс. Например, если имя базового класса будет MyResources, то для английской локали имя класса будет MyResources_en, для русской - MyResources_ru. Помимо этого может добавляться идентификатор языка, если для данного региона определено несколько языков. Например MyResources_de_CH так будет выглядеть швейцарский вариант немецкого языка. Кроме того можно указать дополнительную признак variant (см. описание
Locale
). Так, описанный раннее пример для платформы UNIX будет выглядеть следующим образом: MyResources_de_CH_UNIX
Загрузка объекта для нужной локали производится с помощью статического метода getBundle.
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", someLocale);
Если объект, имя которого в точности совпадает с именем, указанным в getBundle, то будет найден тот, имя которого максимально сходно с запрошенным. Приоритет перебора суффиксов будет такой. В начале ищется файл с указанной локалью, если такого файла нет, то будет подбираться класс с локалью по умолчанию. Если его тоже нет, то будет выбираться класс наименование которого совпадает с базовым классом.
baseclass + "_" + language1 + "_" + country1 + "_" + variant1
baseclass + "_" + language1 + "_" + country1 + "_" + variant1 + ".properties"
baseclass + "_" + language1 + "_" + country1
baseclass + "_" + language1 + "_" + country1 + ".properties" baseclass + "_" + language1
baseclass + "_" + language1 + ".properties"
baseclass + "_" + language2 + "_" + country2 + "_" + variant2
baseclass + "_" + language2 + "_" + country2 + "_" + variant2 + ".properties"
baseclass + "_" + language2 + "_" + country2
baseclass + "_" + language2 + "_" + country2 + ".properties" baseclass + "_" + language2
baseclass + "_" + language2 + ".properties" baseclass
Программирование на Java
Rendered by www.RenderX.com
Класс ResourceBundle |
Стр. 31 из 42 |
baseclass + ".properties"
Индексы 1 2 в данном случае подразумевают затребованную локаль и локаль по умолчанию.
Например если необходимо найти ResourceBundle для локали fr_CH (Швейцарский французский), а локаль по умолчанию en_US при этом название базового класса
ResourceBundle MyResources, то порядок поиска подходящего ResourceBundle будет таков.
MyResources_fr_CH
MyResources_fr
MyResources_en_US
MyResources_en
MyResources
Результатом работы getBundle будет загрузка необходимого класса ресурсов в память, однако данные этого класса могут быть сохранены на диске. Т.о. если нужный класс не будет найден, то к требуемому имени класса будет добавлено расширение ".properties" и будет совершена попытка найти файл с данными на диске.
Следует помнить, что необходимо указывать полностью квалифицированное имя класса ресурсов т.е. имя пакета, имя класса. Кроме того, класс ресурсов должен быть доступен в контексте его вызова (т.е. там где вызывается getResourceBundle), те не быть private и т.д.
Всегда должен создаваться базовый класс без суффиксов, т.е. если вы создается ресурсы с именем MyResource, должен быть в наличии класс MyResource.class
ResourceBundle хранит объекты в виде пар ключ/значение. Как уже отмечалось ранее, класс ResourceBundle абстрактный, поэтому при его наследовании необходимо переопределить методы Enumeration getKeys()
public Object handleGetObject(String key)
первый метод должен возвращать список всех ключей, которые определены в ResourceBundle, второй должен возвращать объект связанный с конкретным ключом.
Рассмотрим пример использования ResourceBundle.
public class MyResource extends ResourceBundle {
private Hashtable res = null; public MyResource() {
res = new Hashtable(); res.put("TestKey","English Variant");
}
public Enumeration getKeys() { return res.keys();
}
protected Object handleGetObject(String key) throws
Программирование на Java
Rendered by www.RenderX.com
Стр. 32 из 42 |
Локализация |
java.util.MissingResourceException { return res.get(key);
}
}
public class MyResource_ru_RU extends ResourceBundle{ private Hashtable res = null;
public MyResource_ru_RU() { res = new Hashtable();
res.put("TestKey","Русский варинат");
}
public Enumeration getKeys() { return res.keys();
}
protected Object handleGetObject(String key) throws java.util.MissingResourceException {
return res.get(key);
}
}
public class Test { public Test() {
}
public static void main(String[] args) { Test test = new Test(); ResourceBundle rb =
ResourceBundle.getBundle("experiment.MyResource",Locale.getDefault());
System.out.println(rb.getString("TestKey"));
rb = ResourceBundle.getBundle("experiment.MyResource",new Locale("ru","RU"));
System.out.println(rb.getString("TestKey"));
}
}
English Variant
Русский Вариант
Кроме того, следует обратить внимание, что ResourceBundle может хранить не только строковые значения. В нем можно хранить также двоичные данные или просто методы, реализующие нужную функциональность в зависимости от локали.
public interface Behavior { public String getBehavior(); public String getCapital();
}
Программирование на Java
Rendered by www.RenderX.com
Класс ResourceBundle |
Стр. 33 из 42 |
public class EnglishBehavior implements Behavior{ public EnglishBehavior() {
}
public String getBehavior(){ return "English behavior";
}
public String getCapital(){ return "London";
}
}
public class RussianBehavior implements Behavior { public RussianBehavior() {
}
public String getBehavior(){
return "Русский вариант поведения";
}
public String getCapital(){ return "Москва";
}
}
public class MyResourceBundle_ru_RU extends ResourceBundle { Hashtable bundle = null;
public MyResourceBundle_ru_RU() { bundle = new Hashtable();
bundle.put("Bundle description","Набор ресурсов для русской локали"); bundle.put("Behavior",new RussianBehavior());
}
public Enumeration getKeys() { return bundle.keys();
}
protected Object handleGetObject(String key) throws java.util.MissingResourceException {
return bundle.get("key");
}
}
public class MyResourceBundle_en_EN { Hashtable bundle = null;
public MyResourceBundle_en_EN() { bundle = new Hashtable();
bundle.put("Bundle description","English resource set"); bundle.put("Behavior",new EnglishBehavior());
}
public Enumeration getKeys() { return bundle.keys();
}
protected Object handleGetObject(String key) throws
Программирование на Java
Rendered by www.RenderX.com
Стр. 34 из 42 |
Локализация |
java.util.MissingResourceException { |
|
return bundle.get("key"); |
|
} |
|
} |
|
public class MyResourceBundle extends ResourceBundle { |
|
Hashtable bundle = null; |
|
public MyResourceBundle() { |
|
bundle = new Hashtable(); |
|
bundle.put("Bundle description","Default resource bundle"); |
|
bundle.put("Behavior",new EnglishBehavior()); |
|
} |
|
public Enumeration getKeys() { |
|
return bundle.keys(); |
|
} |
|
protected Object handleGetObject(String key) throws |
|
java.util.MissingResourceException { |
|
return bundle.get(key); |
|
} |
|
} |
|
public class Using { |
|
public Using() { |
|
} |
|
public static void main(String[] args) { Using u = new Using();
ResourceBundle rb = ResourceBundle.getBundle("lecture.MyResourceBundle",Locale.getDefault());
System.out.println((String)rb.getObject("Bundle description")); rb = ResourceBundle.getBundle("lecture.MyResourceBundle",new
Locale("en","EN")); System.out.println((String)rb.getObject("Bundle description")); Behavior be = (Behavior)rb.getObject("Behavior"); System.out.println(be.getBehavior()); System.out.println(be.getCapital());
}
}></eg>
<eg><![CDATA[
Русский набор ресурсов
English resource bundle English behavior London></eg>
</div2>
<div2 id="JAVA-LEC14-ListResourceBundle ">
<head>Классы ListResourceBundle и PropertiesResourceBundle</head> <p>У класса <kw>ResourceBundle</kw> определено два прямых потомка
<kw>ListResourceBundle</kw> и <kw>PropertiesResourceBundle</kw>. </p>
Программирование на Java
Rendered by www.RenderX.com
Класс ResourceBundle |
Стр. 35 из 42 |
<p>
<kw>PropertiesResourceBundle</kw> хранит набор ресурсов в файле, который представляет собой набор строк. </p>
<p>Следует акцентировать внимание, что в случае с <kw>PropertiesResourceBundle</kw> данные хранятся в обычном текстовом файле и соответственно можно иметь дело только со строковыми значениями. </p>
<p>Алгоритм конструирования объекта содержащего набор ресурсов был описан в предыдущем параграфе. Во все случаях когда в качестве последнего элемента используется <code>.properties</code>, например <code>baseclass + "_" + language1 + "_" + country1 + ".properties"</code> речь идет о создании <kw>ResourceBundle</kw> из файла с наименованием <code>baseclass + "_" + language1 + "_" + country1</code> и расширением <code>properties. </code>Обычно класс <kw>ResourceBundle</kw> помещают в пакет <kw>resources</kw>, а файл свойств в каталоге <kw>resources</kw>. Тогда для того что инстанциировать нужный класс необходимо указать полный путь к этому классу(файлу) </p>
<eg><![CDATA[
getBundle("resources.MyResource",Locale.getDefault());
ListResourceBundle хранит набор ресурсов в виде коллекции и является абстрактным классом. Классы которые наследуют ListResourceBundle должны обеспечить
•переопределение метода Object[][] getContents() который возвращает массив ресурсов.
•и собственно двумерный массив содержащий ресурсы.
Рассмотрим пример
public class MyResource extends ListResourceBundle { Vector v = new Vector();
Object[][] resources = { {"StringKey","String"}, {"DoubleKey",new Double(0.0)}, {"VectorKey",v},
};
public MyResource(){ super(); v.add("Element 1"); v.add("Element 2"); v.add("Element 3");
}
protected Object[][] getContents() { return resources;
}
}
public class Test { public Test() {
Программирование на Java
Rendered by www.RenderX.com
Стр. 36 из 42 |
Локализация |
}
public static void main(String[] args) { Test test = new Test(); ResourceBundle rb =
ResourceBundle.getBundle("experiment.MyResource",Locale.getDefault()); 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.
Следует заострить внимание на том, что в отличие от PropertiesResourceBundle возможно задание ресурсов не только в виде строк, что требуется несомненно чаще всего, но и виде объектов. Например ничто не мешает сохранить в списке ресурсов скажем объект Image или звуковой трек.Следует избегать однако создания чересчур громоздких объектов содержащих ресурсы т.к. это увеличивает время их загрузки и расходует память.
Далее следует обратить внимание, что если определены как файл ресурсов так и объект с одинаковыми именами, то использован будет объект. Следует это из описания алгоритма поиска необходимого списка ресурсов. (см. выше)
Ключом в ResourceBundle может служить только строковое значение. Если в качестве ключа указать другой объект ( это возможно в случае наследования ResourceBundle, ListResourceBundle), ошибки времени исполнения не возникнет, но данный ресурс будет недоступен. Т.к. в ResourceBundle определены методы получающие в качестве параметра объект типа String.
Например класс MyResource будет откомпилировано нормально.
public class MyResource extends ListResourceBundle { Vector v = new Vector();
Object[][] resources = { {"Key1","String1"},
{new Double(1.0),"Double value"} };
protected Object[][] getContents() { return resources;
}
}
Программирование на Java
Rendered by www.RenderX.com