C, PHP, VB, .NET

Дневникът на Филип Петров


* Типове данни, масиви и оператори в Java

Публикувано на 12 септември 2009 в раздел ПИК3 Java.

Вече споменахме, че обектите са в основана на езика Java. В езика е залегнала йерархична структура за групирането им. Всички обекти със сходни свойства се обединяват в класове. Класовете от своя страна се обединяват в пакети. Засега обаче ще се фокусираме към синтаксис на езика и ще се спрем по-подробно на класовете и модификаторите за достъп в по-следваща статия.

"Сорс-кодът" на програмите на Java се записва във файлове с разширение .java. Когато бъдат компилирани до байткод те получават разширение .class. Именно този .class файл е преносимият код, който може да бъде компилиран на различни машини.

Както всяка стандартна програма, така и Java програмите имат своя "входна точка", т.е. място от което се стартират. Обикновено е прието в .java файла да дефинираме клас със същото име като файла и той да бъде публичен, т.е. "достъпен за външния свят". В този клас се дефинира и основен метод (в Java е прието функциите и процедурите да се наричат методи) с име "main". Ето как ще изглежда нашата първа Java програма. Създайте текстов файл с име myfirstprogram.java и запишете в него следната информация:

public class myfirstprogram{
  public static void main(String[] args) {
    System.out.format("%s", "Hello World\n");
  }
}

Ако компилирате този файл се досещате, че ще бъде изписан надписът "Hello World". По конвенция методът main трябва да бъде публичен и статичен (както казахме по-късно ще се спрем над дефиниция на тези термини - засега приемете това наготово). Подадения му входен параметър args е масив от входни параметри от тип String, който може да бъде подаден чрез командния ред. Методът System.out.format() е стандартен форматиран изход познат от C като printf() и се използва за отпечатване на информация в конзолата.

Няма да се спираме над дефиниция на основните типове данни - те са добре познати от програмирането на C:

  • boolean - булев тип приемащ за стойност литерали true или false;
  • char - символ в кодировка unicode;
  • byte - 8 битово цяло число;
  • short - 16 битово цяло число;
  • int - 32 битово цяло число;
  • long - 64 битово цяло число;
  • float - 32 битово число с плаваща запетая;
  • double - 64 битово число с плаваща запетая.

При тип char специалните символи са:

  • \n - нов ред;
  • \r - връщане в началото на ред;
  • \t - табулация;
  • \b - връщане на символ назад (backspace);
  • \' - апостроф;
  • \" - кавички;
  • \\ - знак наклонена черта.

За разлика от C и C++ стандартно в езика Java (без допълнителна библиотека) е наличен и низов тип String. Той се състои от поредица от 16 битови unicode символи (т.е. естествена алтернатива на масив от тип char). За разлика от основните типове данни обаче, той е обект. На този етап е достатъчно да знаем, че обектите се съхраняват в heap, а не в стека. По-нататък ще видим повече подробности.

Масиви в Java могат да бъдат задавани по два еквивалентни начина:

    int[] array1;
    int array2[];

Първият запис е нововъведение в Java спрямо C и C++. Вторият начин на записване е по-удобен за програмистите свикнали да пишат на C. Между тези два записа няма никаква разлика. Въпреки това не се окуражава използването на втория синтаксис - от Oracle препоръчват първия, тъй като той е типичен за езика Java. Масивите в Java са обекти. За разлика от C в Java не е предвидена възможност за създаване на масив с стек.

Показания пример по-горе се нарича "дефиниция на масив", т.е. създадена е променлива, която сочи към обект от тип масив, но самият той все още не е "създаден". Тъй като масивите са обекти, то те се създават чрез оператор new:

    array1 = new int[10];
    array2 = new int[5];

Както виждате размерността на масива се посочва при неговото създаване, а не при неговата дефиниция. Следващата стъпка е "инициализация" на масива. Тя става по стандартния познат начин:

    array1[0] = 4;
    array1[1] = 5;

Искаме да отбележим като особеност спрямо езика C, че в момента на създаване на масив той се инициализира автоматично със стандартни начални стойности. При целочислените типове данни това е числото 0 (с L накрая ако е long), при типовете в плаваща запетая е 0.0 (с f накрая ако е float), при char e символът \u0000, а при тип boolean е false. Това означава, че ако искаме да отпечатаме съдържанието на така записания масив array1, то първите два елемента ще са числата 4 и 5, а останалите до края ще са 0.

Двумерните и "n"-мерните масиви се дефинират аналогично:

    int[][] array3 = new int[2][3];
    array3[0][2] = 5;

Операторите в Java са следните:

1. Унарни:
a) ++ - инкрементиране с 1;
b) -- - декрементиране с 1;
c) + - положително число, например +3;
d) - - отрицателно число, например -3;
e) ~ - побитово инвертиране, например 00001111 става 11110000;
f) ! - логическо отрицание;
g) (<тип>) - преобразуване на тип данни, например ако x е от тип int, то можем да направим double d = (double)x.

2. Аритметични:
a) + - събиране (използва се и за конкатенация на обекти от тип String);
b) - - изваждане;
c) * - умножение;
d) / - деление;
e) % - остатък от деление при целочислените типове.

3. Сравнение:
a) < - по-малко;
b) <= - по-малко или равно;
c) > - по-голямо;
d) >= - по-голямо или равно;
e) == - равно;
f) != - не равно.

4. Логически:
a) && - логическо "и";
b) || - логическо "или".

5. Побитови:
a) & - побитово "и";
b) | - побитово "или";
c) ^ - побитово "изключващо или";
d) << - изместване вляво;
e) >> - изместване вдясно;
f) >>> - изместване вдясно без знак (нов оператор, който не присъства в C/C++, но на който няма да се спираме).

 



2 коментара


  1. не може ли да сложите някакви стрелкички, които да водят до следващия урок... сега трябва пак да връщам на раздел java->по-стари публикации... благодаря :)

Добави коментар

Адресът на електронната поща няма да се публикува


*