Прості структури даних у in Java. Класи-оболонки, класи колекції, класи утиліти

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Комп’ютерні науки
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Методичні вказівки до лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Прості структури даних у in Java. Класи-оболонки, класи колекції, класи утиліти Методичні вказівки до виконання лабораторної роботи №7 з курсу “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки” ЗАТВЕРДЖЕНО на засіданні кафедри “Системи автоматизованого проектування” Протокол № 1 від 30.08.2010 ЛЬВІВ 2010 Мова програмування Java. Методичні вказівки до виконання лабораторної роботи №4 “Прості структури даних у in Java. Класи-оболонки, класи колекції, класи утиліти” з курсу: “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки”. Укладачі: Каркульовський В.І., доцент, к.т.н. Керницький А.Б., ст.викл., др.інж. Відповідальний за випуск: Рецензенти: 1. МЕТА РОБОТИ Одержати навики побудови алгоритмів лінійних обчислювальних процесів, навчитися складати алгоритми та програмувати процеси з розгалуженням, циклами, ітераційними циклами за допомогою мови Java. Одержати навички роботи із масивами. 2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ 2.1. ОПЕРАТОРИ МОВИ JAVA Java — повністю об’єктно-орієнтована мова. Це означає, що все, що тільки можна, в Java представлено обєктами. Вісім примітивних типів порушують це правило. Вони залишені в Java із-за багаторічної звички до чисел і символів. Та й арифметичні дії зручніше і скоріше виконувати зі звичайними числами, а не з об’єктами класів. Але і для цих типів у мові Java є відповідні класи — класи-оболонки (wrapper) примітивних типів. Звичайно, вони призначені не для обчислень, а для дій, типових при роботі з класами — створення об’єктів, перетворення об’єктів, одержання числових значень об’єктів у різних формах і передачі об’ємів у методи по посиланню. На рис. 4.1 показана одна із віток ієрархії класів Java. Для кожного примітивного типу є відповідний клас. Числові класи мають спільного предка — абстрактний клас Number, в якому описані шість методів, котрі повертають числове значення, що міститься в класі, приведене до відповідного примітивного типу: byteValue (), doubleValue (), floatValue (), intValue(), longValue (), shortValue (). Прогляньте уважно файл Number.html у папці java_lang і ще раз продумайте механізм використання абстрактних класів. Указані вище методи перевизначені у кажному із шести числових класів-оболонок. Рис. 4.1. Помимо методу порівняння об’єктів equals(), перевизначеного із класу Оbject, всі описані в цій лекції класи, крім Boolean і Сlass, мають метод compareTo (), котрий порівнює числове значення, що міститься в даному об’єкті, з числовим значенням об’єкту — аргументу методу compareTo(). В результаті роботи методу отримується ціле значення: 0, якщо значення рівні; від’ємне число (-1), якщо числове значення в даному об’єкті менше, ніж в об’єкті-аргументі; додатне число (+1), якщо числове значення в даному об’єкті більше числового значення, що міститься в аргументі. 4.2. Числові класи В кожному із шести числових класів-оболонок є статичні методи перетворення рядка символів типу String, котрий представляє число, у відповідний примітивний тип: Byte.parseByte(), Double.parseDouble(), Float.parseFloat(), Integer.parselnt(), Long.parseLong(), Short.parseShort(). Вихідний рядок типу string, як завжди у статичних методах, задається як аргумент методу. Ці методи корисні при введенні даних в поля введення, обробці параметрів командного рядка, т. е. тобто скрізь, де числа представляються рядками цифр зі знаками плюс або мінус і десятковою точкою. В кожному із цих класів є статичні константи MAX_VALUE і MIN_VALUE, котрі показують діапазон числових значень відповідних примітивних типів. В класах Double і Float єсть іще константи POSITIVE_INFINITY, NEGATIVE_INFINITY, NaN, про які йшла мова раніше, і логічні методи перевірки isNan(), isInfinite(). Якщо ви добре знаєте двійкове представлення дійсних чисел, то можете скористатися статичними методами floatToIntBits() і doubleToLongBits(), котрі перетворюють дійсне значення в ціле. Дійсне число задається як аргумент методу. Потім ви можете змінити окремі біти побітними операціями і перетворити змінене ціле число назад у дійсне значення методами intBitsToFloat() і longBitsToDouble(). Статичними методами toBinaryString(), toHexString() і toOctalString() класів Іnteger і Long можна перетворити цілі значення типів int і long, задані як аргумент методу, в рядок символів, котрий показує двійкове, шістнадцятеричне або восьмеричне представлення числа. Передивіться файли Byte, Double, Float, Integer, Long, Short у папці java-lang\Number і научіться користуватися методами цих класів. В лістинзі 4.1 показано застосування цих методів, а на рис. 4.2 реультат виконання програми Лістинг 4.1. Методи числових класів class NumberTest{ public static void main(String[] args){ int i = 0; short sh = 0; double d = 0; Integer k1 = new Integer(55); Integer k2 = new Integer(100); Double d1 = new Double(3.14); try{ i = Integer.parseInt(args[0]); sh = Short.parseShort(args[0]); d = Double.parseDouble(args[1]); d1 = new Double(args[1]); k1 = new Integer(args[0]); }catch(Exception e){} double x = 1.0/0.0; System.out.println("i = " + i) ; System.out.println("sh - " + sh) ; System.out.println("d = " + d) ; System.out.println("k1.intValue() = " + k1.intValue()); System.out.println("d1.intValue() = "+ d1.intValue()); System.out.println("k1 > k2? " + k1.compareTo(k2)); System.out.println ("x = " + x); System.out.println("x isNaN? " + Double.isNaN(x)); System.out.println("x isInfinite? " + Double.isInfinite(x)); System.out.println("x == Infinity? " + (x == Double.POSITIVE_INFINITY) ); System.out.println("d = " + Double.doubleToLongBits(d)); System.out.println("i = " + Integer.toBinaryString(i)); System.out.println("i = " + Integer.toHexString(i)); System.out.println("i = " + Integer.toOctalString(i)); } } Рис. 4.2 Методи parseІnt() і конструктори класів вимагають обробики виключень, тому в лістинг 4.1 вставлено блок try{} catch(){}. Обробку виключних ситуацій ми розберемо в лекції 16. Передивіться файли Byte, Double, Float, Integer, Long, Short у папці java.lang і научіться користуватися методами цих класів. 4.3. Клас Boolean Це дуже невеликий клас, призначений головним чином для того, щоб передавати логічні значення в методи по посиланню. Конструктор Boolean (String s) створює об’єкт, котрий містить значення true, якщо рядок s рівний "true" в будь-якій комбінації регістрів літер, і значення false — для будь-якого іншого рядка. Логічний метод booleanValue() повертає логічне значення, що зберігається в об’єкті. Передивіться файл Boolean у папці java.lang і научіться користуватися методами цього класу. 4.4. Класс Character В цьому класі зібрані статичні константи і методи для роботи з окремими символами. Статичний метод digit(char ch, int radix) переводить цифру ch системи числення з основою radix в її числове значення типу int. Статичний метод forDigit(int digit, int radix) робить обернене перетворення цілого числа digit у відповідну цифру (тип char) у системі числення з основою radix. Основа системи числення повинна знаходитися в діапазоні від Character.MIN_RADIX до Character.MAX_RADIX. Метод toString() переводить символ, котрий міститься в класі, в рядок з тим же символом. Статичні методи toLowerCase(), toUpperCase(), toTitleCase() повертають символ, що міститься в класі, у вказаному регістрі. Останній із цих методів служить для правильного переводу у верхній регістр чотирьох кодів Unicode, котрі не виражаються одним символом. Декілька статичних логічних методів перевіряють різні характеристики символу, переданого в якості аргументу методу: isDefined() — виясняє, чи визначений символ в кодуванні Unicode; isDigit() — перевіряє, чи являється символ цифрою Unicode; isIdentifierIgnorable() — виясняє, чи можна використовувати символ в ідентифікаторах; isISOControl() — визначає, чи є символ управляючим; isJavaІdentifierPart() — виясняє, чи можна використовувати символ в ідентифікаторах; isJavaIdentifierStart() — виясняє, чи може символ бути на початку ідентифікатору; isLetter() — перевіряє, чи являється символ літерою Java; IsLetterOrDigit() — перевіряє, чи являється символ літерою або цифрою Unicode; isLowerCase() — визначає, чи символ записаний в нижньому регістрі; isSpaceChar() — виясняє, чи є символ пробілом в Unicode; isTitleCase() — перевіряє, чи являється символ титульним; isUnicodeldentifierPart() — виясняє, чи можна використовувати символ в іменах Unicode; isUnicodeIdentifierStart() — перевіряє, чи являється символ літерою Unicode; isUpperCase() — визначає, чи символ записаний у верхньому регістрі; isWhiteSpace() — виясняє, чи являється символ пробілом. Точні діапазони управляючих символів, поняття верхнього і нижнього регістра, титульного символу, пробільних символів, краще всього подивитися по документації Java API. Лістинг 4.2 демонструє використання цих методів, а на рис. 4.3 показаний результат цієї програми. Лістинг 4.2. Методи класу Character в програмі CharacterTest class CharacterTest{ public static void main(String[] args){ char ch = '9'; Character c = new Character(ch); System.out.println("ch = " + ch); System.out.println("c.charValue() = " + c.charValue()); System.out.println("number of 'A' = " + Character.digit('A', 16)); System.out.println("digit for 12 = " + Character.forDigit(12, 16)); System.out.println("ch = " + c.toString()); System.out.println("ch isDefined? " + Character.isDefined(ch)); System.out.println("ch isDigit? " + Character.isDigit(ch)); System.out.println("ch isIdentifierIgnorable? " + Character.isIdentifierIgnorable(ch)); System.out.println("ch isISOControl? " + Character.isISOControl(ch)); System.out.println("ch isJavaldentifierPart? " + Character.isJavaIdentifierPart(ch)); System.out.println("ch isJavaldentifierStart? " + Character.isJavaIdentifierStart(ch)); System.out.println("ch isLetter? " + Character.isLetter(ch)); System.out.println("ch isLetterOrDigit? " + Character.isLetterOrDigit(ch)); System.out.println("ch isLowerCase? " + Character.isLowerCase(ch)); System.out.println("ch isSpaceChar? " + Character.isSpaceChar(ch)); System.out.println("ch isTitleCase? " + Character.isTitleCase(ch)); System.out.println("ch isUnicodeIdentifierPart? " + Character.isUnicodeIdentifierPart(ch)); System.out.println("ch isUnicodeIdentifierStart? " + Character.isUnicodeIdentifierStart(ch)); System.out.println("ch isUpperCase? " + Character.isUpperCase(ch)); System.out.println("ch isWhitespace? " + Character.isWhitespace(ch)); } } Рис. 4.3 В клас Character вкладені класи Subset і UnicodeBlock, причому клас Unicode і ще один клас, inputSubset, являється розширенням класу Subset, як це видно на рис. 4.1. Об’єкти цього класу містять підмножини Unicode. Передивіться файл Character у папці java.lang і визначте, чи всі методи цього класу були задіяні у попередній програмі. Разом з класами-оболонками зручно розглянути два класи для роботи з як завгодно великими числами. 4.5. Клас Biglnteger Всі примітивні цілі тип мають обмежений діапазон значень. В цілочисельній арифметиці Java немає переповнення, цілі числа приводяться по модулю, рівному діапазону значень. Для того щоб можна було виконувати цілочисельні обчислення з будь-якою розрядністю, у склад Java API введений клас Biglnteger, котрий зберігається в пакеті java.math. Цей клас розширює клас Number, значить, в ньому перевизначені методи doubleValue(), floatValue(), intValue(), longValue(). Методи byteValue() і shortValue() не перевизначені, а прямо наслідуються від класу Number. Дії з об’єктами класу Biglnteger не приводять ні до переповнення, ні до приведення по модулю. Якщо результат операції великий, то число розрядів просто збільшується. Числа зберігаються в двійковій формі с додатковим кодом. Перед виконанням операції числа вирівнюються по довжині розповсюдженням знакового розряду. Шість конструкторів класу створюють об’єкт класу Biglnteger із рядка символів (знака числа і цифр) або із масиву байтів. Дві константи — ZERO і ONE — моделюють нуль і одиницю в операціях з об’єктами класу Biglnteger. Метод toByteArray() перетворює об’єкт в масив байтів. Більшість методів класу Biglnteger моделюють цілочисельні операції і функції, повертаючи об’єкт класу Biglnteger: abs() — повертає об’єкт, котрий містить абсолютну величину числа, яке зберігається в даному об’єкті this; add(x) — операція this + х; and(x) — операція this & х; andNot(x) — операція this & (~х) ; divide (x) — операція this / х; divideAndRemainder(х) — повертає масив із двох об’єктів класу Biglnteger, який містить частку і остачу від ділення this на х; gcd(x) — найбільший спільний дільник абсолютних значень об’єкту this і аргументу х; mах(х) — найбільше із значень об’єкту this і аргумента х; min(x) — найменше із значень об’єкту this і аргументу х; mod(x) — остача від ділення об’єкту this на аргумент методу х; modІnverse(x) — остача від ділення числа, оберненого об’єкту this, на аргумент х; modPow(n, m) — остача від ділення об’єкта this, піднесеного до степеня n, на m; multiply (х) —операція this * х; negate() — зміна знаку числа, що зберігається в об’єкті; not() — операція ~this; оr(х) — операція this | х; pow(n) — операція піднесення числа, яке зберігається в об’єкті, до степеня n; remainder(х) —операція this % х; shiftLeft (n) — операція this « n ; shiftRight (n) — операція this » n; signum() — функція sign (x); subtract (x) — операція this - x; xor(x) — операція this ^ x. В лістинзі 4.3 приведені приклади використання даних методів Лістинг 4.3. Методи класу Biglnteger в програмі BiglntegerTest import java.math.BigInteger; class BigIntegerTest{ public static void main(String[] args){ BigInteger a = new BigInteger("99999999999999999") ; BigInteger b = new BigInteger("88888888888888888888"); System.out.println("bits in a = " + a.bitLength()); System.out.println("bits in b = " + b.bitLength()); System.out.println("a + b = " + a.add(b)); System.out.println("a & b = " + a.and(b)); System.out.println("a & ~b = " + a.andNot(b)); System.out.println("a / b = " + a.divide(b)); BigInteger[] r = a.divideAndRemainder(b); System.out.println("a / b: q = " + r[0] + ", r = " + r[1]); System.out.println("gcd(a, b) = " + a.gcd(b)); System.out.println("max(a, b) = " + a.max(b)); System.out.println("min(a, b) = " + a.min(b)); System.out.println("a mod b = " + a.mod(b)); System.out.println("I/a mod b = " + a.modInverse(b)); System.out.println("а^n mod b = " + a.modPow(a, b)); System.out.println("a * b = " + a.multiply(b)); System.out.println("-a = " + a.negate()); System.out.println ("~a = " + a.not()); System.out.println("a | b = " + a.or(b)); System.out.println("а ^ 3 = " + a.pow(3)); System.out.println("a % b = " + a.remainder(b)); System.out.println("a « 3 = " + a.shiftLeft(3)); System.out.println("a » 3 = " + a.shiftRight(3)); System.out.println("sign(a) = " + a.signum()); System.out.println("a - b = " + a.subtract(b)); System.out.println("а ^ b = " + a.xor(b)); } } Рис. 4.4 Зверніть увагу на те, що в програму лістингу 4.3 треба імпортувати пакет java.math. Передивіться файл BigInteger у папці java.math і визначте, чи всі методи цього класу були задіяні у попередній програмі. 4.6. Клас Big Decimal Клас BigDecimal розташований в пакеті java.math. Кожний об’єкт цього класу зберігає два цілочисельні значення: мантису дійсного числа у вигляді об’єкту класу Biglnteger, і невід’ємний десятковий порядок числа типу int. Наприклад, для числа 76.34862 буде зберігатися мантиса 7 634 862 в об’єкті класу Biglnteger, і порядок 5 як ціле число типу int. Таким чином, мантиса може містити будь-яку кількість цифр, а порядок обмежений значенням константи integer.MAX_VALUE. Результат операції над об’ємами класу BigDecimal округляється по одному із восьми правил, визначеними наступними статичними цілими константами: ROUND_CEILING — округлення в сторону більшого цілого; ROUND_DOWN — округлення до нуля, до меншого по модулю цілого значення; ROUND_FLOOR — округлення до меншого цілого; ROUND_HALF_DOWN — округлення до найближчого цілого, середнє значення округляється до меншого цілого; ROUND_HALF_EVEN — округлення до найближчого цілого, середнє значення округляється до парного числа; ROUND_HALF_UP — округлення до найближчого цілого, середнє значення округляється до більшого цілого; ROUND_UNNECESSARY — вважається, що результат буде цілим, і округлення не знадобиться; ROUND_UP — округлення від нуля, до більшого по модулю цілому значенню. В класі BigDecimal чотири конструктори: BigDecimal (Biglnteger bi) — об’єкт буде зберігати велике ціле b і порядок рівний нулю; BigDecimal (Biglnteger mantissa, int scale) — задається мантиса mantissa и невідємний порядок scale обєкту; якщо порядок scale відємний, виникає виключна ситуація; BigDecimal (double d) — обєкт буде містити дійсне число подвійної точності d; якщо значення d нескінчено або NaN, то виникає виключна ситуація; BigDecimal (String val) — число задається рядком символів val, який повинен містити запис числа по правилах мови Java. При використанні третього із перерахованих конструкторів виникає неприємна особливість, відмічена в документації. Оскільки дійсне число при переводі в двійкову форму представляється, як правило, нескінченим двійковим дробом, то при створенні обєкту, наприклад, BigDecimal(0.1), мантиса, що зберігається в обєкті, буде дуже великою. Вона показана на рис. 4.5. Але при створенні такого ж обєкту четвертим конструктором, BigDecimal ("0.1"), мантиса буде рівна просто 1. В класі перевизначені методи doubleValue(), floatValue(), intValue(), longValue(). Більшість методів цього класу моделюють операції з дійсними числами. Вони повертаютьт обєкт класу BigDecimal. Тут буква х означає обєкт класу BigDecimal, буква n - ціле значення типу int, буква r - спосіб округлення, одну із восьми перечислених вище констант: abs() — абсолютное значення обєкту this; add(x) — операція this + х; divide(х, r) — операція this / х з округленням по способу r; divide(х, n, r) — операція this / х із зміною порядку і округленням по способу r; mах(х) — найбільше із this і х; min(x) — найменше із this і х; movePointLeft(n) — зсув вліво на n розрядів; movePointRight(n) — зсув вправо на n розрядів; multiply(х) — операція this * х; negate() — повертає обєкт з протилежним знаком; scale() — повертає порядок числа; setscale(n) — установлює новий порядок n ; setscale(n, r) — установлює новий порядок n і округляє число при необхідності по способу r; signum() — знак числа, котре зберігається в обєкті; subtract(х) — операція this - х; toBigInteger() — округлення числа, котре зберігається в обєкті; unscaledValue() — повертає мантису числа. Лістинг 4.4. Методи класу BigDecimal в програмі BigDecimalTest import java.math.*; class BigDecimalTest{ public static void main( String [] args) { BigDecimal x = new BigDecimal("-12345.67890123456789"); BigDecimal y = new BigDecimal("345.7896e-4"); BigDecimal z = new BigDecimal(new BigInteger("123456789"),8); System.out.println("|x| = " + x.abs()); System.out.println("x + у = " + x.add(y)); System.out.println("x / у = " + x.divide(y, BigDecimal.ROUND_DOWN)); System.out.println("х / у = " + x.divide(y, 6, BigDecimal.ROUND_HALF_EVEN)); System.out.println("max(x, y) = " + x.max(y)); System.out.println("min(x, y) = " + x.min(y)); System.out.println("x « 3 = " + x.movePointLeft(3)); System.out.println("x » 3 = " + x.movePointRight(3)); System.out.println("x * у = " + x.multiply(y)); System.out.println("-x = " + x.negate()); System.out.println("scale of x = " + x.scale()); System.out.println("increase scale of x to 20 = " + x.setScale(20)); System.out.println("decrease scale of x to 10 = " + x.setScale (10, BigDecimal.ROUND_HALF_UP)) ; System.out.println("sign(x) = " + x.signum()); System.out.println("x - у = " + x.subtract(y)); System.out.println("round x = " + x.toBigInteger()); System.out.println("mantissa of x = " + x.unscaledValue()); System.out.println("mantissa of 0.1 =\n= " + new BigDecimal(0.1).unscaledValue()); } } Передивіться файл BigDecimal у папці java.math і визначте, чи всі методи цього класу були задіяні у попередній програмі. Рис. 4.5 Приведемо ще один приклад. Напишемо простенький калькулятор, котрий виконує чотири арифметичні дії з числами довільної величинb. Він працює з командного рядка. Програма представлена в лістинзі 4.5, а приклади використання калькулятора — на рис. 4.6. Лістинг 4.5. Найпростіший калькулятор import java.math.*; class Calc{ public static void main(String[] args){ if (args.length < 3){ System.err.println("Usage: Java Calc operand operator operand"); return; } BigDecimal a = new BigDecimal(args[0]); BigDecimal b = new BigDecimal(args[2]); switch (args[1].charAt(0)){ case '+': System.out.println(a.add(b)); break; case '-': System.out.println(a.subtract(b)); break; case '*': System.out.println(a.multiply(b)); break; case '/': System.out.println(a.divide(b, BigDecimal.ROUND_HALF_EVEN)); break; default : System.out.println("Invalid operator"); } } } Рис. 4.6 Чому символ множення - зірочка — заключений на рис. 4.6 в лапки? "Юніксоїдам" це зрозуміло, а для других дамо коротке пояснення. Це особливість операційної системи, а не мови Java. Введений з клавіатури рядок спочатку проглядаює командна оболонка (shell) операційної системи, а зірочка для неї - вказівка підставить на це місце всі імена файлів із поточного каталогу. Оболонка зробить це, і інтерпретатор Java одержить від неї довгий рядок, в якому замість зірочки стоять імена файлів через пробіл. Зірочка в лапках розуміється командною оболонкою як звичайний символ. Командна оболонка знімає лапки і передає інтерпретатору Java те, що потрібно. 4.7. Клас Class Клас Object, котрий стоїть на чолі ієрархії класів Java, представляє всі обєкти, що діють в системі, являється їх спільною оболонкою. Всякий обєкт можна вважати екземпляром класу Object. Клас з іменем Class представляє характеристики класу, екземпляром якого являється обєкт. Він зберігає інформацію про те, чи не являється обєкт на самім ділі інтерфейсом, масивом або примітивним типом, який суперклас обєкту, яке імя класу, які в ньому конструктори, поля, методи і вкладені класи. В класі Сlass немає конструкторів, екземпляри цього класу створюються виконуючою системою Java під час завантаження класу і представляється методом getClass() класу Оbject, наприклад: String s = "Це рядок"; Class с = s.getClass(); Статичний метод forName(String class) повертає обєкт класу Class для класy, указаного в аргументі, наприклад: Class cl = Class.forName("Java.lang.String"); Але цей спосіб створення обєкту класу Class вважається застарілим (deprecated). В нових версіях JDK для цієї мети використовується спеціальна конструкція — до імені класу через точку додається слово class: Class c2 = Java.lang.String.class; Логічні методи isArray(), isIntetface(), isPrimitive() дозволяють уточнити, чи не являється обєкт масивом, інтерфейсом або примітивним типом. Якщо обєкт посилочного типу, то можна одержати дані про вкладені класи, конструктори, методи і поля методами getDeclaredcCasses(), getDeclaredConstructors(), getDeclaredMethods(), getDeclaredFields(), у вигляді масиву класів, відповідно Class, Constructor, Method, Field. Останні три класи розташованs в пакеті java.lang.reflect і містять дані про конструктори, поля і методи аналогічно тому, як класс Сlass зберігає дані про класи. Методи getClasses(), getConstructors(), getlnterfaces(), getMethods(), getFields() повертають такі ж масиви, але не всіх, а тільки відкритих членів класу. Метод getSuperClass() повертає суперклас обєкту посилочного типу, getPackage() - пакет, getModifiers() - модифікатори класу в бітовій формі. Модифікатори можна потім розшифрувати методами класу Modifier із пакету java.lang.reflect. Лістинг 4.6 показує застосування цих методів, а рис. 4.7 — виведення результатів Лістинг 4.6. Методи класу Class в програмі ClassTest import java.lang.reflect.*; class ClassTest{ public static void main(String[] args){ Class c = null, c1 = null, c2 = null; Field[] fld = null; String s = "Some string"; c = s.getClass(); try{ c1 = Class.forName("java.lang.String"); // Старий стиль c2 = java.lang.String.class; // Новий стиль if (!c1.isPrimitive()) fld = c1.getDeclaredFields(); // Всі поля класу String }catch(Exception e){} System.out.println("Class c: " + c); System.out.println("Class c1: " + c1); System.out.println("Class c2: " + c2); System.out.println("Superclass c: " + c.getSuperclass()); System.out.println("Package c: " + c.getPackage()); System.out.println("Modifiers c: " + c.getModifiers()); for(int i = 0; i < fld.length; i++) System.out.println(fld[i]); } } Рис. 4.7 Методи, котрі повертають властивості класів, спричиняють виключні ситуації, які вимагають обробки. Тому в програму введено блок try{} catch() {}. Розгляд обробки виключних ситуацій ми відкладаємо до уроку 16. Передивіться файл Class у папці java.lang і визначте, чи всі методи цього класу були задіяні у попередній програмі. 6.1. Клас Vector В класі Vector із пакету java.utiІ зберігаються елементи типу Оbject, а значить, довільного типу. Кількість елементів може бути довільним і наперед не визначається. Елементи одержують індекси 0, 1, 2, .... До кожного элемента вектора можна звернутися по індексу, як і до елемента массиву. Крім кількості елементів, яку називають розміром (size) вектора, єсть ще розмір буферу — ємність (capacity) вектора. Звичайно ємність співпадає з розміром вектора, але можна її збільшити методом ensureCapacity(int minCapacity) або порівняти з розміром вектора методом trimToSize(). В Java 2 клас Vector перероблений, щоб включити його в ієрархію класів-колекцій. Тому багато дій можна робити старими и новими методами. Рекомендується використовувати нові методи, оскільки старі можуть бути виключені із наступних версій Java. 6.1.1. Як створити вектор В класі чотири конструктори: Vector () - створює пустий обєкт нульової довжини; Vector (int capacity) - створює пустий обєкт указаної ємності capacity; Vector (int capacity, int increment) - створює пустий обєкт указаної ємності capacity і задає число increment, на яке збільшується ємність при необхідності; Vector (Collection с) - вектор створюється по указаній колекції. Якщо capacity відємне, створюється виключна ситуація. Після створення вектору його можна заповняти елементами. 6.1.2. Як додати елемент у вектор Метод add (Object element) дозволяє додати елемент в кінець вектора (те ж саме
Антиботан аватар за замовчуванням

25.05.2016 15:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!