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->по-стари публикации… благодаря :)

  2. Очевидно може… Ще се постарая когато имам време. Иначе междувременно виж това:
    https://www.cphpvb.net/sitemap/

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

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


*