HowTo:Úvodný príklad
Z Java.betlista.net
Úplne najjednoduchšší program v Jave, je
klasický príklad na vypísanie textu na štandardný výstup (na obrazovku).
Príklady typu Hello world patria
k základným príkladom, na ktorých sa ukazuje prvý príklad v danom programovacom
jazyku. Táto tradícia vznikla, keď tvorcovia programovacieho jazyka C -
Kernighan a Ritchie vydali svoju knihu o tomto jazyku (ktorá sa neskôr stala
normou - K&R) a v nej sa objavil aj tento príklad.
Aby som sa vrátil späť k Jave, tak tu
je najzákladnejší príklad (vysvetlenie pod):
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Všetko v tomto príklade je potrebné a
neide to vynechať.
Všetko v Jave je objekt (až na
výnimky), preto aj to, čo
vytvárate vy, ako programátor je objekt.
Musím ešte urobiť malú odbočku kým
budem pokračovať, odbočku, ktorá sa bude týkať rozdielov medzi objektom a
inštanciou objektu. Nebudem zachádzať do detailov, pretože si nedávam za
cieľ vysvetlovať tu princípy OOP. V skratke inštancia objektu už je to, čo zaberá miesto
v pamäti (nemyslím na disku, tam máte väčšinu vecí), pričom objekt je len akási
definícia - šablóna, ktorá hovorí o tom podľa čoho vytvoriť objekt a aké má mať
vlastnosti.
Druhým slovom je meno triedy
(HelloWorld), zátvorka označuje, že už došlo k začiatku definície triedy (po
mene triedy by ešte mohli byť kľúčové slová extends, implements a throws, ale o
tom inokedy). Preťažili sme metódu main a Java VM (Virtual Machine) vie, že má
vykonávanie začat spustením tejto metódy. Public znamená, že ju môžete
zavolať odkiaľkoľvek, static znamená, že ju môžete volať aj bez inštancie
danej triedy a void znamená, že metóda nevracia návratovú hodnotu.
Potom z triedy System získate inštanciu triedy PrintStream a pomocou jej metódy
println() vypíšete reťazec znakov (v našom prípade) na výstup.
Nasledujúci príklad už je
komplikovanejší, považoval som ho však za pomerne dôležitý, ak si chcete Javu
vyskúšať viac. Príklad ukazuje ako načítať String (reťazec znakov) zo
štandardného vstupu (konzole) a následne ho vypísať.
Princíp je vskutku jednoduchý. Najprv
si vypíšeme na štandardny výstup výzvu k tomu aby sme zadali reťazec (je to
tiež dobré k tomu aby sme vedeli, že program už beží) a tento zadaný reťazec budeme
následne čítať. Najpr si vytvoríme niečo do čoho vstup načítame - pole byte-ov.
Aj keď je byte číslo, nebuďte vystrašení, stačí si uvedomiť, že všetko
v počítači je reprezentované ako čísla (konkrétne 0 a 1) a práve teraz Vás nemusí zaujímať
ako sa z týchto čisel stanú znaky. Potom už len použijete konštruktor String-u,
ktorý berie ako parameter toto pole byte-ov a máte String.
Je vhodná chviľa povedať si čo je to
konštruktor. Konštruktor je špeciálna funkcia triedy, ktorá vytvorí inštanciu
objektu. Trieda má často viac konštruktorov, ktoré majú rôzne parametre a často
má aj tzv. bezparametrický konštruktor, ktorý nepotrebuje žiadne parametre (ako hovorí názov).
Ešte sa rozlišuje tzv. copy-constructor a ten ako parameter berie inštanciu
rovnakej triedy (ako tá, pre ktorú je konštruktorom) a vytvorí inštanciu zhodnú
s tou, ktorá mu prišla ako parameter.
Konstruktor ktorý som použil pre vytvorenie String-u berie 3 parametre - pole
byte-ov, offset a dĺžku stringu, ktorý má vytvorit. Offset (odsadenie) je počet
prvkov poľa, ktoré sa majú vynechat. Dĺžka nemusí byť dĺžka poľa, ktoré sme si
pre načítanie vytvorili, preto funkcia read() vracia počet byte-ov, ktoré sa jej
podarilo načítať. (Len v rýchlosti spomeniem, že metóda vyhadzauje výnimku -
exception, ak sa jej nepodarí čítať, preto je main metoda označená, že vyhadzuje
výnimky - throws Exception ja s nimi v tomto priklade nič nerobím)
Na záver by som ešte upozornmil, že dĺžka Stringu, ktorý vytvoríte nemusí byť
úplne taká, akú očakávate, preto ju na konci ešte vypisujem. Spôsobené je to tým,
že keď zadávate vstup, tak ho ukončíte odriadkovaním (enterom), ale aj tieto
znaky (vo windows sú to dva znaky) sa vám do vstupu dostanú.
package net.betlista.examples;
public class Read {
/**
* This class reads String from console.
* @param args not used in this program
*/
public static void main(String[] args) throws Exception {
String word = null;
System.out.print("Insert text: ");
//create buffer for reading input to it
byte[] buff = new byte[100];
int length = System.in.read(buff);
word = new String(buff, 0, length);
System.out.println(word);
System.out.println(word.length());
}
}
Keď už som tu rozoberal ako prečítať
String tak asi bude fér, keď poviem ako prečítať číslo (celé aj reálne).
Ako základ poslúži predchádzajúci príklad. V princípe prečítam String (ako
predtým) a potom s ním niečo urobím.
V metóde readInt() tento String pomocou metódy parse() tzv. rozparsujem - metóda
parse() za nás rozlúšti aké číslo sa "skrýva" v String-u a vráti nám už toto,
číslo, ak toto číslo zadáte nesprávne, tak metóda hodí výnimku
(NumberFormatException - čo je výnimka nesprávneho formátu čísla). Táto výnimka
dedí od RuntiException a to znamená, že ju nemusíme odchytávať, alebo ďalej
vyhadzovať. Podobne to spravíme pre reálne číslo.
package net.betlista.examples;
public class ReadAll {
static String read() throws Exception {
String word = null;
System.out.print("Insert text: ");
byte[] buff = new byte[100];
int length = System.in.read(buff);
word = new String(buff, 0, length);
return word;
}
public static void main(String[] args) throws Exception {
int i = readInt();
double d = readDouble();
}
static int readInt() throws Exception {
String s = read();
return Integer.parseInt(s);
}
static double readDouble() throws Exception {
String s = read();
return Double.parseDouble(s);
}
}
Chcel by som Vás ešte vyzvať, aby ste dodržovali konvencie pri pomenovávaní a to tak, že meno triedy začína veľkým písmenom a mená metód a premenných začínajú písmenami malými. Samozrejme to nie je záväzné, ale je to príjemné, keď už podľa mena viete o čo sa jedná (v praxi som sa už stretol aj s tým, že Java VM-e vadila metóda pomenovaná veľkým písmenom).
Na záver by som Vám chcel už len popriať veľa úspechov pri programovaní v Jave a nech sa Vám zapáči tak ako mne.
PS: Java sa číta ako džava a nie ako jáva.
