Технологія програмування на мові Java

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  “Технологія програмування на мові Java” Методичні вказівки до лабораторної роботи №1 з курсу “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки” ЗАТВЕРДЖЕНО на засіданні кафедри “Системи автоматизованого проектування” Протокол № 1 від 30.08.2010 ЛЬВІВ 2010 “Технологія програмування на мові Java”. Методичні вказівки до виконання лабораторної роботи №1 з курсу: “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки”. Укладачі: Керницький А.Б., ст.викл., др.інж. Каркульовський В.І., доцент, к.т.н. Загарюк Р.В., асистент, к.т.н. Відповідальний за випуск: Рецензенти: 1. МЕТА РОБОТИ Ознайомитися з технологією програмування із використанням пакета SDK та ECLIPSE, примітивними типами даних, операціями над ними. 2.КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 2.1. СТРУКТУРА ПРОГРАМИ НА МОВІ JAVA Фірма SUN Microsystems – розробник технології Java - безкоштовно розповсюджує набір необхідних програмних інструментів для повного циклу роботи з цією мовою програмування: компіляції, інтерпретації, відлагодження, що включає і багату бібліотеку класів, під назвою JDK (Java Development Kit). Java програма існує у вигляді класу. Вона починається службовим словом class, за яким іде назва класу, а далі, у фігурних дужках, тіло класу – поля змінних і методи: Лістинг 2.1. Перша програма на мові Java class Zero{ public static void main(String[] args){ System.out.println("Hello, World!"); } } Програма може бути написана у будь-якому текстовому редакторі, наприклад Notepad. Потім її потрібно зберегти у файлі, назва якого співпадає з назвою класу і з розширенням .java, у даному випадку Zero.java. Потім програму необхідно скомпілювати, що у даному випадку означає перевести її у байт коди. На комп’ютерах версія JDK може відрізнятися від тієї, яка описана у методичних вказівках (вони оновлюються майже щорічно). Те ж саме стосується і її місця знаходження на диску. Тому при потребі потрібно внести корективи у нижче наведену адресу папки bin. Знаходимо в комп’ютері програму Командная строка (CMD) і відкриваємо її. Рис. 2.1. Програма Командная стрічка Потрібно повернутися до кореневої директорії С, де знаходиться JDK. Для цього потрібно набрати у командному рядку сd C:\ і натиснути Enter (cd – change directory). Тепер потрібно викликати компілятор javac, що знаходиться у папці bin і вказати йому файл для компіляції (після натискання Enter компілятор створить файл с байт-кодами, дасть йому назву Zero.class і запише у біжучий каталог. Якщо все пройшло як потрбіно, Командная строка повернеться до кореневої директорії С). Для запуску програми необхідно викликати інтерпретатор java (JVM), передавши йому в якості аргумента назву класа. Рис. 2.2. Перша Java програма На цьому прикладі можна зауважити низку суттєвих особливостей мови Java. Будь-яка програма є одним або декількома класами. У прикладі є лише один клас (class). Початок класу позначачється службовим словом class, за яким іде назва класу, що вибирається довільно. У даному випадку Zero. Все, що міститься у класі, записується у фігурних дужках і складає тіло класу (class body). Всі дії виконуються за допомогою методів обробки інформації (method). Цей термін вживається у мові Java замість назви "функція", що використовується в інших мовах. Методи розрізняються за іменами. Один із методів обов’язково повинен називатися main. З нього починається виконання програми. У прикладі лише один метод, тому його назва main. Метод завжди повертає (returns) лише одне значення, тип якого обов’язково вказується перед назвою метода. Метод може і не повертати жодного значення, виконуючи роль процедури, як у прикладі. Тоді замість типу значення записується слово void. Після назви метода у дужках через кому перераховуються аргументи (arguments) - або параметри метода. Для кожного аргумента вказується його тип і, через пробіл, назва. У прикладі лише один аргумент, його тип — масив, що складається з рядків символів. Рядок символів — це вбудований у Java API тип String, а квадратні дужки — ознака масива. Назва масива може бути довільною (у прикладі вибрана назва args). Перед типом значення, що повертається методом, можуть бути записані модифікатори (modifiers). У прикладі їх два: слово public означає, що цей метод доступний з будь-якого місцяпрограми; слово static забезпечує можливість виклику метода main () у самому початку виконання програми. Модифікатори необов’язкові, але для метода main () вони необхідні. У тексті після назви метода ставляться дужки, щоб підкреслити, що це є назва метода, а не простої змінної, а все, що містить метод, тіло метода (method body), записується у фігурних дужках. Єдина дія, яку виконує метод main () у прикладі, полягає у виклику іншого метода зі складеною назвою System.out.println() і передачі йому на опрацювання одного аргумента – текстової константи "Hello, World!". Текстові константи записуються у лапках, які є тільки обмежувачами і не входять у склад тексту. Складна назва System.out.println() означає, що у класі System, який входить у Java API, визначається змінна з назвою out, яка містить екземпляр одного із класів Java API - клас PrintStream. У ньому є метод println(). Дія метода println () полягає у виведенні свого аргумента у вихідний потік, який, як правило, пов’язаний з виведенням тексту на екран термінала. Після виведення курсор переходить на початок наступного рядка екрана, на що вказує закінчення ln, слово println – скорочення слів print line. У складі об’єкта out є метод print (), який залишає курсор у кінці виведеного рядка. Для ознайомлення з іншими вбудованими методами класу System необхідно відкрити однойменний файл папки Java2. Отже, всі Java-програми містять у собі чотирі основні елементи: класи (classes) – елементи програми, що містять у собі змінні та методи; інтерфейси (interfaces) – різновид класів, який викоритосвується у спеціальних випадках (реалізація множинного наслідування і протоколів); змінні (variables) – елементи програми, в яких зберігаються дані; методи (methods) – елементи програми, які виконують дії над даними (аналогічні функціям, процедурам і підпрограмам в інших мовах програмування); пакети (packages) – група зв’язаних за змістом класів та інтерфейсів. Для того, щоб використовувати класи та інтерфейси, які містяться у пакетах, необхідно зробити їх доступними у програмі. Для цього використовується оператор чи оператори import з назвою пакету та назвою класу пакету, який буде використовуватись, наприклад: import java.util.Date; виконує імпорт класу Date з пакету java.util. Якщо необхідно використовувати декілька класів чи інтерфейсів з пакету, звичайно замість назви класу чи інтерфейсу ставиться символ "*", що вказує на те, що у даній програмі доступні всі класи та інтерфейси даного пакету, наприклад: import java.awt.*; виконує імпорт всіх класів з пакету java.awt. Варто зауважити, що імпорт пакету java.lang задавати не потрібно, оскільки цей пакет імпортується у програми на мові Java по замовчуванню. Також неоюхідно зробити важливе зауваження. Мова Java розрізняє великі і малі літери, назви main, Main, MAIN є різними з "точки зору" компілятора Java. У прикладі важливо писати String, System з великої літери, a main з маленької. У середині текстової константи не має значення чи писати World чи world. Компілятор не "дивиться" на неї і різниця буде помітна лише на екрані. Свої назви можна записувати як завгодно, але між Java-програмістами заключено договір під назвою "Code Conventions for the Java Programming Language", з яким можна ознайомитися за адресою http://java.sun.com/docs/codeconv/index.html. Наведемо декілька пунктів з цього договору: назви класів починаються з великої літери; якщо назва містить декілька слів, то кожне слово починається з великої літери; назви методів і змінних починаються з малої літери; якщо назва містить декілька слів, то кожне наступне слово також починається з малої літери; назви констант записуються повністю великими літерами; якщо назва містить декілька слів, то між ними ставиться знак підкреслювання. Звичайно, ці правила є необов’язковими, але значно полегшують розуміння кода і надають програмі характерний для Java стиль. 2.2. ВСТАНОВЛЕННЯ SDK І СКЛАД SDK Встановлення здійснюється автоматично і єдині параметри, які необхідно вказати –це місце розміщення та назва пакету, а також компоненти, що будуть встановлюватись. При встановленні створюються наступні підкаталоги: bin – виконувані модулі та утиліти SDK; demo – демонстраційні приклади; include – файли заголовків C та C++, які використовуються для побудови середовища Java; lib – бібліотеки та архіви (в форматах .lib, .zip, та .jar), які використовуються SDK; src – вихідний код бібліотек Java (якщо цей компонент включений). Для того, щоб виконувані модулі та утиліти пакету SDK могли запускатися з будь-якого каталога без вказання шляху до них, необхідно додати в параметр команди PATH в autoexec.bat шлях до каталогу bin, наприклад: c:\jdk1.3\bin\ (або додати її вручну у змінні середовища); Крім того, Java використовує змінну середовища CLASSPATH для вказання шляху до класів Java. Якщо SDK встановлений у каталог за замовчуванням, тоді змінну СLASSPATH можно не встановлювати, інакше її необхідно встановити в autoexec.bat за допомогою команди SET CLASSPATH=назва-каталога 2.3. ТЕХНОЛОГІЯ ПРОГРАМУВАННЯ НА МОВІ JAVA З ВИКОРИСТАННЯМ SDK Текст програми на мові Java перетворюється у спеціальні команди (байт-коди) віртуальної машини Java, які не залежать від конкретної комп’ютерної платформи та операційної системи. У свою чергу, при виконанні програми, байт-коди перетворюються у команди процесора та одразу ж виконуються (режим інтерпретації).  Рис.2.3. Забезпечення багатоплатформенності мови Java Необхідно звернути увагу на те, що під час компіляції вказується повна назва файлу з текстом програми (з розширенням .java), а при запуску інтерпретатора – назва файлу, який містить байт-коди. Файли компілятора javac.exe та інтерпретатора java.exe знаходяться у підкаталозі bin каталогу, який містить SDK, і є програмами, які виконуються в режимі командного інтерпретатора (Windows NT/2000/XP/2003) чи MS DOS (Windows 95/98). Команда запуску програми javac має насутпний вигляд: javac [опції] [вихідні файли] [@файли] Вказані аргументи можуть йти у довільному порядку. Якщо виконується компіляція одного чи декількох вихідних файлів, їх можна задати в командній стрічці, відокремивши один від одного пробілами. Іншим рішенням є запис назв файлів, які будуть компілюватися, в окремому файлі і вказати назву цього файлу в параметрі @файли. Основні опції програми javac наведені нижче: classpath – встановлення шляху до каталогів, де розміщуються класи користувача; sourcepath – встановлення шляху до каталогів, де розміщуються вихідні файли користувача; d каталог – вказування каталогу, в якому будуть міститися відкомпільовані програми; g – виведення всієї відлагоджувальної інформації про файли, включаючи локальні змінні; verbose – виведення інформації про кожний завантажений клас та кожний відкомпільований вихідний файл. Команда запуску програми java має такий вигляд: java [опції] клас [параметри ...] java [опції] -jar назва-jar-файлу [параметри ...] Клас – це назва класу (без розширення .class), який має бути виконаний. Назва-jar-файлу – назва архіву, де знаходиться клас, який має бути виконаний (використовується тільки разом із опцією -jar). Параметри – параметри командної стрічки, які передаються у метод main (відділяються один від одного пробілами). Основні опції програми java наведені нижче: classpath або cp – встановлення шляху до каталогів, де розміщуються класи користувача; showversion – виведення повідомлення про версію та продовження роботи; verbose або (verboseclass) – виведення інформації про кожний завантажений клас. 2.4. КОМЕНТАРІ У ПРОГРАМІ У тексті програми можна вставляти коментарі, які компілятор не буде враховувати. У період налаштування можна виключати з програми один або декілька операторів, помітивши їх символами коментаря (“закоментувати). Коментарі вводяться наступним чином: за двома похилими рисками //, без пробілу між ними, починається коментар, що продовжується до кінця рядка; за похилою рискою і зірочкою /* починається коментар, котрий може займати декілька рядків, до зірочки і похилої риски */ (без пробілів між цими знаками). Коментарі дуже зручні для читання і розуміння коду, вони перетворюють програму в документ, що описує її дії. Програму з хорошими коментарями називають самодокументованою. Тому в Java введені коментарі третього типу, а в склад JDK — програму javadoc, яка поміщає ці коментарі в окремі файли формату HTML і створює гіперпосилання між ними: за похилою рискою і двома зірочками підряд, без пробілів, /** починається коментар, який може займати декілька рядків до зірочки з однією похилою рискою */ і опрацьовується програмою javadoc. У такий коментар можна вставити вказівки програмі javadoc, які починаються символом @. Таким чином створюється документація в JDK. Додамо коментарі до нашого прикладу (лістинг 2.2). Лістинг 2.2. Перша програма з коментарями class HelloWorld{ /** *Пояснення змісту і особливостей програми... * @author Ім’я Прізвище (автора) * @version 1.0 (версія програми) */ // HelloWorld — це лише назва // Наступний метод починає виконання програми public static void main(String[] args){ // args не використовується /* Наступний метод просто виводить свій аргумент на екран дисплея */ System.out.println("Hello, 21st Century World!"); // наступний виклик закоментований, метод не буде виконуватися // System.out.println("Farewell, 20th Century!"); } } Зірочки на початку стрічки не відіграють жодної ролі, вони лише допомагають слідкувати за коментарем. Приклад 2.2. звичайно перевантажений поясненнями (це поганий стиль), тут просто показані різні форми коментарів. 2.5. КОНСТАНТИ У мові Java можна записувати константи різних типів у різних виглядах. Перерахуємо їх. 2.5.1. ЦІЛІ КОНСТАНТИ Цілі константи можна записувати у трьох системах числення: у десятковій формі: +5, -7, 12345678; у вісімковій формі, починаючи з нуля: 027, -0326, 0777; в записі таких констант неприпустимими є цифри 8 і 9; у шістнадцятковій формі, починаючи з нуля і латинської літери х або X: 0xff0a, 0xFC2D, 0x45a8, 0X77FF; тут великі і малі літери не розрізняються. Цілі константи зберігаються у форматі типу int (див. нижче). У кінці цілої константи можна записати велику літеру L або малу l (рекомендують не використовувати, тому що її легко сплутати з одиницею), тоді константа буде зберігатися у довгому форматі типу long (див. нижче): +25L, -0371, 0xffL, 0xDFDF1. 2.5.2. Дійсні константи Дійсні константи записуються лише в десятковій системі числення в двох формах: з фіксованою крапкою: 37.25, -128.678967, +27.035; з плаваючою крапкою: 2.5е34, -0.345е-25, 37.2Е+4; можна писати велику або малу латинську літеру Е; пробіли і дужки неприпустимі. У кінці дійсної константи можна поставити літеру F або f, тоді константа буде зберігатися у форматі типу float (див. нижче): 3.5f, -45.67F, 4.7e-5f. Можна вказувати і літеру D (або d): 0.045D, -456.77889d, що означає тип double, але це зайве, оскільки дійсні константи і так зберігаються у форматі типу double. 2.5.3. Символьні константи Для запису одиничних символів використовуються наступні форми: Друковані символи можна записувати в апострофах: 'а', 'N', '?'. Чкщо замініть у програмі HelloWorld команду System.out.println("Hello, World!") на System.out.println('H'), тоді буде надрукована літера Н. Якщо ж написатиSystem.out.println('Hello, World!'), тоді компілятор відмовиться працювати з такою програмою. Керуючі символи записуються в апострофах з оберненою похилою рискою: '\n' — символ переведення рядка newline з кодом ASCII 10; '\r' — символ повернення каретки CR з кодом 13; '\f' — символ переведення сторінки FF з кодом 12; '\b' — символ повернення на крок BS з кодом 8; '\t' — символ горизонтальної табуляції НТ з кодом 9; '\\' — обернена похила риска; '\"' — лапка; '\'' — апостроф. Код будь-якого символу з десятковим кодуванням від 0 до 255 можна задати, записавши його не більше ніж трьома цифрами у вісімковій системі числення в апострофах після оберненої похилої риски: '\123' — буква S, '\346' — буква “ц”. Не рекомендується використовувати цю форму запису для друкованих і керуючих символів, перерахованих у попередньому пункті, оскільки компілятор переведе вісімковий запис у вказану вище форму. Найбільший код '\377' — десяткове число 255. Код будь-якого символу у кодуванні Unicode набирається в апострофах після оберненої похилої риски, латинської літери u і чотирма шістнадцятковими цифрами: '\u0053' — буква S, '\u0416' — знак питання ?. Спробуйте програму з командами System.out.println('\123'); System.out.println('\346'); System.out.println('\u0053'); System.out.println('\u0416'); Символи зберігаються у форматі типу char (див. нижче). Великі кириличні літери у кодуванні Unicode займають діапазон від '\u0410' — велика літера А, до '\u042F' — велика літера Я, малі літери '\u0430' — а, до '\044F' — я. У якій би формі не записувалися символи, компілятор переводить їх в Unicode, включаючи і вихідний текст програми, оскільки і компілятор, і виконуюча система Java працюють тільки з кодуванням Unicode. 2.5.4. Рядкові константи Рядки символів поміщаються у лапки. Керуючі символи і коди записуються в рядках точно так само, з оберненою похилою рискою, але без апострофів, і викликають ті самі дії. Рядки можуть розташовуватися лише в одному рядку вихідного кода. Заборонено відкриваючі лапки ставити в одному рядку, а закриваючі — у наступному. Приклади: "Цей рядок\nз переносом" "\"Карпати\" — Чемпіон!" Для рядкових констант визначена операція з’єднання і позначається плюсом. " Зєднання " + "рядків" дає в результаті рядок "Зєднання рядків". 2.6. ІМЕНА (НАЗВИ) Імена (names) змінних, класів, методів і інших об’єктів можуть бути простими (загальна назва — ідентифікатори (idenifiers)) і складними (qualified names). Ідентифікатори в Java складаються з так званих літер Java (Java letters) і цифр 0 - 9, причому першим символом ідентифікатора не може бути цифра. У число літер Java обов’язково входять великі і малі латинські літери, знак долара $ і знак підкреслювання _, а також символи національних алфавітів. Рекомендується не вживти в назвах знак долара. Компілятор Java використовує його для запису назв вкладених класів. Приклади правильних ідентифікаторів: a1 , my_var, var3_5, _var, veryLongVarName, aName, theName, a2Vh36kBnMt456dX У назвах краще не вживати малу літеру l, яку легко сплутати з одиницею, і літеру О, котру легко прийняти за нуль. У класі Character, що входить до складу Java API, є два методи, які перевіряють, чи придатний даний символ для використання в ідентифікаторі: isJavaIdentifierStart() перевіряє чи є символ літерою Java придатною для першої літери ідентифікатора та isJavaldentifierPart(), який виясняє, чи можна взагалі вживати цей символ в ідентифікаторі. Спробуйте наступні дві програми щоби побачити який із ASCII символів на що придатний. class Test { public static void main(String[] args) { for (int i = 0; i < 256; i++) { if (Character.isJavaIdentifierStart((char)i)) System.out.println(Integer.toString(i)+ " " + (char)i + " is Java Identifier Start Symbol" ); else System.out.println(Integer.toString(i)+ " " + (char)i + " isn't Java Identifier Start Symbol" ); } } } і class Test { public static void main(String[] args) { for (int i = 0; i < 256; i++) { if (Character.isJavaIdentifierPart((char)i)) System.out.println(Integer.toString(i)+ " " + (char)i + " is Java Identifier Part Symbol" ); else System.out.println(Integer.toString(i)+ " " + (char)i + " isn't Java Identifier Part Symbol" ); } } } Службові слова Java, такі як class, void, static, є зарезервованими, їх не можна використовувати в якості ідентифікаторів. Складна назва (qualified name) — це декілька ідентифікаторів, розділених крапками без пробілів, наприклад, System.out.println. 2.7. ПРИМІТИВНІ ТИПИ ДАНИХ І ОПЕРАЦІЇ 2.7.1. Загальна класифікація Всі типи вихідних даних, вбудованих у мову Java, діляться на дві групи: примітивні типи (primitive types) и ссилочні типи (reference types). Ссилочні типи діляться на масиви (arrays), класи (classes) та інтерфейси (interfaces). Примітивних типів є вісім. Їх можна розділити на логічний тип boolean і числові (numeric). До числових типів відносяться цілі (integеr) та дійсні (floating-point) типи. Цілих типів п’ять: byte, short, int, long, char. Символи можна використовувати всюди, де вживається тип int, тому JLS зараховує їх до цілих типів. Наприклад, їх можна використовувати в арифметичних обчисленнях, скажімо, можна написати 2 + 'b', до двійки буде доданий ASCII код 98 літери 'b' і в результаті додавання одержимо 100. У записі 2 + "b" плюс розуміється як з’єднання рядків, двійка буде перетворена у рядок, в результаті одержимо рядок "2b". Дійсних типів є два: float і double. Оскільки за назвою змінної неможливо визначити її тип, всі змінні обов’язково повинні бути описані перед їх використанням. Описання полягає у тому, що записується назва типу, потім, через пробіл, список назв змінних, розділених комою. Для всіх або деяких змінних можна вказати початкові значення після знака рівності, якими можуть бути будь-які константні вирази цього ж типу. Опис кожного типу закінчується крапкою з комою. У програмі може бути скільки завгодно описів кожного типу. Слід пам’ятати, що Java — мова зі строгою типізацією (strongly typed language). 2.7.2. Логічний тип Значення логічого типу boolean виникають у результаті різних порівнянь, наприклад, 2 > 3, і використовуються, головним чином, в умовних та циклічних операторах. Логічних значень є два: true (вірно) і false (невірно). Це службові слова Java. Описан змінних цього типу виглядає наступним чином: boolean b = true, bb = false, bool2; Над логічними даними можна виконувати операції присвоювання, наприклад, bool2 = true, у тому числі й сумісні з логічними операціями; порівняння на рівність b == bb і на нерівність b != bb, а також логічні операції. 2.7.3. Логічні операції Логічні операції: заперечення (NOT) ! (позначається знаком оклику); кон’юнкція (AND) & (амперсанд); диз’юнкція (OR) | (вертикальна риска); виключне АБО (XOR) ^ (каре). Ці операції виконуються над логічними даними, їх результатом буде також логічне значення true або false. Нагадаємо таблицю логічних операцій: Таблиця 2.1. Логічні операції b1 b2 !b1 b1&b2 b1|b2 b1^b2  true true false true true false  true false false false true true  false true true false true true  false false true false false false  Словами ці правила можна виразити так: заперечення змінює значення істинності; кон’юнкція вірна, тільки якщо обидва операнди вірні; диз’юнкція невірна, тільки якщо обидва операнди невірні; виключне АБО вірне, тільки якщо значення операндів є різними. Крім перерахованих чотирьох логічних операцій існує ще дві логічні операції скороченого обчислення: скорочена кон’юнкція (conditional-AND) &&; скорочена диз’юнкція (conditional-OR) ||. Здвоєні знаки амперсанда і вертикальної риски необхідн записувати без пробілів. Правий операнд скорочених операцій обчислюється тільки у тому випадку, якщо від нього залежить результат операції, тобто якщо лівий операнд кон’юнкції має значення true, або лівий операнд диз’юнкції має значення false. Це правило дуже зручне і часто використовується , наприклад, можна записувати вирази (n != 0) && (m/n > 0.001) або (n == 0) || (m/n > 0.001) не боячись ділення на нуль. 2.7.4. Цілі типи Специфікація мови Java, JLS, визначає розрядність (кількість байтів, що відводяться для зберігання значень типу в оперативній пам’яті) і діапазон значень кожного типу. Для цілих типів вони наведені у табл. 2.2. Таблиця 2.2. Цілі типи Тип Розрядність (байт) Діапазон  byte 1 від -128 до 127  short 2 від -32768 до 32767  int 4 від -2147483648 до 2147483647  long 8 від -9223372036854775808 до 9223372036854775807  char 2 від '\u0000' до '\uFFFF', у десятковій формі від 0 до 65535   Для Java розрядність не настільки важлива, оскільки на деяких комп’ютерах вона може відрізнятися від наведеної у таблиці, Проте діапазон значень повинен витримуватись беззастережно. Хоча тип char займає два байти, в арифметичних обчисленнях він працює як тип int, йому виділяється 4 байти, два старших байти заповнюються нулями. Приклади визначення змінних цілих типів: byte b1 = 50, b2 = -99, bЗ; short det = 0, ind = 1; int i = -100, j = 100, k = 9999; long big = 50, veryBig = 2147483648L; char c1 = 'A', c2 = '?', newLine = '\n'; Цілі типи зберігаються у двійковому вигляді з додатковим кодом. Останнє означає, що для від’ємних чисел зберігається не їх двійкове представлення, а доповняльний код цього двійкового представлення. Доповнюючий код отримують наступним: у двійковому представленні всі нулі замінюються на одиниці, а одиниці на нулі, після чого до результату додається одиниця. Наприклад, значення 50 змінної b1, визначеної вище, буде зберігатися в одному байті з вмістом 00110010, а значення -99 змінної b2 — у байті із вмістом, який обчислюється таким чином: число 99 переводиться у двійкову форму, одержується 01100011, одиниці міняються з нулями, одержується 10011100, і додається одиниця. Миодержали байт із вмістом 10011101. Над цілими типами можна виконувати велику кількість операцій. Їх набір визначився у мові С. Особливості застосування цих операцій у мові Java показані на прикладах. 2.7.5. Операції над цілими типами Всі операції, які виконуються над цілими числами, можна розділити на наступні групи. 2.7.5.1. Арифметичні операції До арифметичних операцій відносяться: додавання + (плюс); віднімання - (дефіс); множення * (зірочка); ділення / (похила риска — слеш); остача від ділення (ділення по модулю) % (процент); інкремент (збільшення на одиницю) ++; декремент (зменьшення на одиницю) - - Між спареним плюсами і мінусами не можна залишати пробіли. Додавання, віднімання і множення цілих значень виконується як звичайно, а от ділення цілих значень в результаті дає знову ціле (так зване "ціле ділення"), наприклад, 5/2 дасть у результаті 2, а не 2.5, а 5/(-3) дасть -1. Дробова частина відкидається. Операція ділення за модулем визначається наступним чином: а % b = а - (а / b) * b; наприклад, 5%2 дасть в результаті 1, а 5% (-3) дасть 2, тому що 5 = (-3) * (-1) + 2, але (-5)%3 дасть -2, оскільки -5 = 3 * (-1) - 2. Операції інкремент і декремент означають збільшення або зменшення значення змінної на одиницю і застосовуються тільки для змінних, а не для констант чи виразів, не можна написати 5++ або (а + b)++. Ці операції можна записати і перед змінною: ++i, - - j. При першій формі запису (постфіксній) у виразі приймає участь старе значення змінної і лише потім відбувається збільшення чи зменшення її значення. При другій формі запису (префіксній) спочатку зміниться змінна і її нове значення буде приймати участь у виразі. 2.7.5.2. Приведення типів Результат арифметичної операції має тип int, крім того випадку, коли один із операндів є типу long. У цьому випадку результат буде типу long. Перед виконанням арифметичної операції завжди відбувається підвищення (promotion) типів byte, short, char. Вони перетворюються у тип int, а може бути, і в тип long, якщо інший операнд має тип long. Операнд типу int підвищується до типу long, якщо інший операнд є типу long. Звичайно, числове значення операнда при цьому не змінюється. Це правило приводить інколи до неочікуваних результатів. Спроба скомпілювати програму, представлену у лістинзі 2.3, призведе до повідомлення компілятора про помилку: Лістинг 2.3. Невірне визначення змінної class InvalidDef{ public static void main (String [] args) { byte b1 = 50, b2 = -99; short k = b1 + b2; // Невірно! System.out.println("k=" + k); } } Це повідомлення означає, що у файлі InvalidDef.java, у рядку 4, виявлена можлива втрата точності (possible loss of precision). Потім приводиться виявлений (found) і потрібний (required) типи, виводиться рядок, в якому виявлена (а не зроблена) помилка, і відмічається символ, при аналізі якого знайдена помилка. У кінці вказано загальну кількість виявлених (а не зроблених) помилок (1 error). У таких випадках потрібно виконувати явне приведення типу. У даному випадку це буде звуження (narrowing) типу int до типу short. Воно здійснюється операцією явного приведення, яка записується перед потрібним значенням у вигляді імені типу в дужках. Визначення short k = (short)(b1 + b2); буде вірним. Звуження відбувається просто відкиданням старших бітів, що необхідно враховувати для великих значень. Наприклад, визначення byte b = (byte) 300; присвоїть змінній b значення 44. Дійсно, у двійковому представленні числа 300, рівному 100101100, відкидається старший біт і отримується 00101100. Таким чином можна привести і явне розширення (widening) типу, якщо в цьому є необхідність. Якщо результат цілої операції виходить за діапазон свого типу int або long, то автоматично відбувається приведення за модулем, який рівний довжині цього діапазона, і обчислення продовжуються, переповнення жодним чином не відбувається. 2.7.5.3. Операції порівняння У мові Java існує шість звичайних операцій порівняння цілих чисел за величиною: більше >; менше <; більше або дорівнює >=; менше або дорівнює <=; дорівнює ==; не дорівнює !=. Спарені символи записуються без пробілів, їх не можна переставляти місцями, запис => будет невірним. Результат порівняння — логічне значення: true, в результаті, наприклад, порівняння 3 != 5; або false, наприклад, в результаті порівняння 3 == 5. Для запису складних порівнянь необхідно застосовувати логічні операції. Наприклад, в обчисленнях часто приходиться здійснювати перевірку типу а < х < b. Подібний запис у мові Java призведе до повідомлення про помилку, оскільки перше порівняння, а < х, дасть true або false, a Java не знає, більше це, ніж b, чи менше. У даному випадку необхідно написати вираз (а < х)
Антиботан аватар за замовчуванням

25.05.2016 15:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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