Java pro začátečníky (2) - První program

Zatímco minulý díl byl motivační a měl objasnit, proč je Java správná volba, v tomto dílu si nainstalujeme vše potřebné pro vývoj a předvedeme první javovský program. Jak již je v tutoriálech zvykem, bude to „Hello world“. Na závěr si řekneme něco o tom, jak vlastně javovské programy fungují.

Instalace

První věcí, kterou budeme potřebovat je Java SE Development Kit, což je běhové prostředí Javy a sada nástrojů nutných pro vývoj Java aplikací (kompilátor, debugger (nástroj pro odstraňování chyb), profiler (nástroj pro ladění) atp.). Java JDK lze stáhnout například ze stránek společnosti Oracle. Aktuální verze v době psaní tohoto článku (srpen 2010) byla 6u21.

Vývojové prostředí

Další věcí, kterou si nainstalujeme je vývojové prostředí (IDE). Jedná se o aplikaci, která integruje vše, co je pro vývoj zapotřebí, což je textový editor, kompilátor, debugger a tak podobně. V Javě lze samozřejmě vyvíjet také z přikazové řádky a kódy editovat pomocí Notepadu, PSPadu a jiných editorů, ale tyto nástroje neposkytují tak kvalitní zázemí a řadu věcí, které má IDE automatizované, budete muset dělat ručně, případně se bez nich úplně obejít.

V tomto seriálu budeme používat IDE Netbeans, které si můžete stáhnout z netbeans.org. Pro potřeby tohoto seriálu si vystačíme s verzí pro Javu SE (v době psaní tohoto článku je aktuální verze 6.9.1). Alternativně můžete použít například IDE Eclipse. Obě tato prostředí jsou zcela zdarma.

Hello world

Po nainstalování Netbeans IDE jej pustíme. Z nabídky File vybereme New Project a zvolíme Java/Java Application. Projekt pojmenujeme jako HelloWorld, dále nic neměníme a stiskneme tlačítko Finish.

Nyní bychom měli před sebou mít připravenou základní kostru aplikace.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package helloworld;

/**
 *
 * @author Vase Jmeno
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }
}

V tento okamžik si nebudeme vysvětlovat všechna kouzelná slova, která před sebou máme a spokojíme se s ujištěním, že to takto má být (vše bude vysvětleno podrobně v dalších dílech). V tomto díle si alespoň ukážeme, co to jsou komentáře.

Komentáře

Komentáře jsou texty, které nejsou javovským kompilátorem zpracovávány, slouží pouze k orientaci programátora, vysvětlujícím pasážím a v neposlední řadě ke generování dokumentace.

Java má dva typy komentářů řádkové a blokové, ty řádkové začínají znaky // a končí koncem řádku. V programu takový komentář můžete vidět na řádce 18. Druhým typem jsou blokové komentáře, které začínají znaky /* a končí znaky */. Vše uvnitř těchto dvojic znaků není kompilátorem zpracováváno. Speciálním případem blokového komentáře je komentář začínající trojicí znaků /**, to je dokumentační komentář, ze kterého se pomocí nástroje JavaDoc vytvoří dokumentace k programu (všimněte si direktiv pro tento nástroj např. @author). Blokové komentáře můžeme umístit kamkoliv místo bílého znaku (tj. nesmíme je umístit doprostřed slova).

Zkusme si nyní obohatit zdrojový kód několika vlastními komentáři.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package helloworld;

/**
 * Toto je moje prvni aplikace, bude vypisovat vetu Hello world.
 * @author Pavel Micka
 */
public class Main {

    /**
     * Toto je vstupni bod teto aplikace
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        /*
         * Sem budu psat kod, ktery onu kouzelnou vetu vypise 
         */
        //toto je radkovy komentar
        //muze jich byt i vice pod sebou
    }

}

Výpis textu

Pro samotný výpis řetězce Hello world použijeme volání System.out.println(), které umístíme do vstupního bodu aplikace - metody main. Jako parametr tomuto volání předáme (vložíme do závorek) výše zmíněný řetězec (v Javě jsou řetězce vždy umístěny do horních uvozovek).

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package helloworld;

/**
 * Toto je moje prvni aplikace, bude vypisovat vetu Hello world.
 * @author Pavel Micka
 */
public class Main {

    /**
     * Toto je vstupni bod teto aplikace
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println("Hello world");
    }

}

Pro spuštění aplikace a zobrazení výsledku zvolíme v menu Run položku Run Main Project. Nyní by se měl v záložce Output zobrazit výstup programu.

Celý projekt si můžete stáhnout zde.

Jak javovské programy fungují?

Obvykle se programovací jazyky dělí dle způsobu vykonávání jejich kódu na kompilované jazyky a interpretované jazyky. Kompilované jazyky jsou kompilátorem transformovány do strojového kódu, který je přímo vykonáván procesorem. Takto fungují například programovací jazyky C a C++. Výhodou tohoto přístupu je rychlost.

Zdrojové kódy interpretovaných jazyků jsou ponechány v původní podobě a tyto jsou při spuštění zpracovávány a vykonávány speciálním programem, tzv. interpretem. Výhodou tohoto přístupu je přenositelnost (kódy lze beze změny spustit na libovolném počítači, který disponuje interpretem daného jazyka). Příkladem interpretovaného jazyka je PHP.

Java do tohoto schématu nezapadá, je využívá totiž Just in Time kompilaci, která stojí mezi zmíněnými přístupy. Javovské programy jsou nejprve kompilovány do tzv. bytecodu, který je vstupem pro virtuální stroj (Java Virtual Machine), který tento kód interpretuje. Tento stroj si ale z výkonových důvodů často využívané pasáže kódu nechává zkompilované a uložené (ve strojovém kódu). Při jejich opětovné potřebě používá již zkompilované části (neinterpretuje kód znovu). Tento přístup umožňuje jak přenositelnost, tak náročné optimalizace programu v závislosti na konkrétním běhovém prostředí (architektuře, operačním systému atp.).

Hodnocení (24): 4,92

Přečtěte si také

Diskuse





Igor23.5.2013
uz to funguje dakujem za radu
Igor22.5.2013
dakujem pozriem sa na to ... :)
Pavel Mička19.5.2013
> Igor

Patrně dochází jenom k sestavení projektu (build) a nikoliv k jeho spuštění. Napadá mne snad jenom že byste omylem klikl na jiné tlačítko v Netbeans, případně že by chyběla metoda

public static void main(String[] args){}

případně byla jinak pojemenovaná, měla jiné argumenty atp. a Java tak nebyla schopna nalézt vstupní bránu do aplikace
Igor17.5.2013
rad by som sa spytal kde moze byt problem ked v Outputu mi vypisuje len "BUILD SUCCESSFUL (total time: 0 seconds)" ... dakujem :)
Pavel Mička8.5.2013
> Shane

To není záležitost Netbeans, to je záležitost Javy a přenositelnosti mezi operačními systémy (což je jeden z velkých benefitů Javy). Exe je Microsoftí formát spustitelných souborů, nešlo by proto takto překompilovaný program spustit třeba na Linuxu nebo iOSu...

Ale ať jenom nejsem negativní. Tak ač to silně nedoporučuji, tak třebas tímto wrapperem by měl jít vyrobit exáč pro jar soubor.

http://launch4j.sourceforge.net/
Shane8.5.2013
Dobře díky mockrát za odpověď. Já, abych se přiznal, tak to všecko jedu přes NetBeans který mi vlastně tu část kterou potřebuji do formátu .exe není schopen dát protože je to program který funguje na základě společnosti oracle která si samozřejmě všecko dává do "jaru" což ani až tak nevadí jen sem nevěděl přes co přesně se to má spouštět ale to je vlastně jedno díky mockrát za radu.
Pavel Mička8.5.2013
> Shane

Je to sice možné (jsou na to nástroje třetích stran), ale rozhodně ne doporučeníhodné. Java generuje spustitelné archivy - *.jar, které lze pustit kdekoliv (např. běžným dvojklikem z okenního prostředí), kde je nainstalované JRE (Java Runtime Environment).

Transformací do exe by došlo jenom ke svázání s windowsí platformou, ale JRE by bylo stále zapotřebí - čili to není úplně nejvhodnější strategie. Osobně bych ji volil pouze tehdy, pokud bych tak či tak linkoval nějaké binárky operačního systému...
Shane8.5.2013
Zdraví chtěl bych se jenom zeptat jestli byste mi mohli poradit s čistým ukládáním s příponou .exe , prostě a jednoduše dá se z čistého programování uložit projekt přímo do .exe (aplikace) a pokud ano mohli byste mi prosím poradit jak?

Díky mockrát za odpověď.
Adam 15.11.2012
Díky moc za odpověď !!
Pavel Mička14.11.2012
> Adam

Já jsem sice programovat začal fakticky až na vysoký, ale neviděl bych v tom větší problém. Ten může být snad jenom v tom (ale zde mluvím pouze z vlastní zkušenosti), že jsem třeba v tomhle věku neměl motivaci/sílu věci táhnout, když mi nešly - a to je u programování občas docela nutnost...

Ale jinak v bych v tom žádné větší překážky neviděl, programování se dá dělat skoro v jakémkoliv věku. Je to spíš o zkušenostech, než o tom, kdy člověk začal.
Adam13.11.2012
Ahoj, chci se zeptat. Myslíte si že je vhodné začínat s programováním ve 14 letech ??Předem díky za odpověď..!
Pavel Mička8.11.2012
> Lucka

Ahoj, je jedno, jakým způsobem tu třídu pojmenuješ. Pro začátek (než si přečteš více v dalších dílech) se na třídu můžeš dívat jako na šablonu funkcionality z níž budeme dělat později více otisků. A je jedno, jak se šablona jmenuje (to je pro programátora), důležité je, jaký má tvar (tj. co dělá). Pavel
Lucka5.11.2012
Ahojky, díky za tutoriál - v outputu mi to opravdu píše Hello World! :D ..jen jak na to koukám, mám tam rozdíl u té public class: nemám tam public class main, ale public class helloworld... ale funguje to, tak to asi nevadí.. jen ze zvědavosti, netušíš proč? díky, Lucka :)
Pavel Mička5.12.2011
> janik

To je docela obtížný dotaz :-). Já jsem začal programovat až na vysoký, pominu-li pár experimentů s PHP. První semestr byl pro mě dost pekelný a musím přiznat, že jsem tak úplně netušil, která bije, ale pak se to někdy v průběhu druhého až třetího semestru zlomilo.

Problémem ani není jazyk jako takový, ač ten může hrát taky roli (třeba c/c++ nepovažuju pro začátečníka za vhodné), ale v první řadě způsob myšlení. Člověk prostě musí přivyknout tomu, že je cílem funkce/metody/procedury hodně dekomponovat, a pak z nich skládat celkovou funkcionalitu. Obecně je asi lepší, když se to člověk neučí sám, ale v rámci nějakého kurzu, kde vidí, jak myslí učitel. Tím ale nezatracuji tutoriály jako je tento - kdyby to nemělo smysl vůbec, tak bych to nepsal :-). Je to prostě jenom obtížnější.

Nakonec jedna poznámka, se kterou jsem zápolil sám - je velmi důležité ty kódy nejen pochopit, ale skutečně i ručně přepsat, spustit si je a udělat v nich pár změn a zkusit, že to člověk umí napsat sám. Pokud to neuděláš, tak to bude dobrý, dobrý, dobrý... a najednou nebudeš tušit, která bije :-).

Čili asi tak :-).
janik4.12.2011
Ahoj,
chci se zeptat jak hodně je náročné naučit se Javu, pro člověka , který nikdy neprogramoval. Zda je to moc náročné na logické myšlení atak.
Dík
Pavel Mička1.9.2011
> Maniak

Ano, jedná se o typický motivační příklad "Hello world" (a má vypisovat pouze tento řetězec), který je součástí asi každého tutoriálu každého programovacího jazyka (o moc víc nelze ukázat, dokud čtenář neví, co je proměnná, podmínka, cyklus atp...). Složitější a zajímavější programy jsou rozebírány v dalších dílech.
Maniak1.9.2011
To ma jako dole v output vypsat Hello world? to je vsechno?
maniak1.9.2011
Zdravim,napisu ten program,pak dam run,vypise to toto: BUILD SUCCESSFUL (total time: 1 second) a jinak to nic neudela,co delam blbe?
Katka13.7.2011
Pekne napsane, diky :)
Dominio30.5.2011
Děkuji, už mi to funguje. Nějak jsem to dokázal podle rady 2.
PS: Tak rychlou odpověd jsem nečekal ;)
Pavel Mička29.5.2011
Dominio >
Třetí možností, která mne napadla, a která problém spíše obchází, ale to leckdy může postačit.

3) V netbeans jsou označeny soubory, které obsahují vstupní bod - třídu obsahující metodu main s parametrem pole řetězců args (public static void main(String[] args)), zelenou šipkou ve stylu "play". Pak stačí na tomtou souboru dát pravé tlačítko a "run" a tato metoda se zavolá, čímž dojde ke spuštění obsaženého kódu.
Pavel Mička29.5.2011
Zkusil jsem si projekt stáhnout a pustit a všechno mi jde v pořádku. Dle chybové hlášky to vypadá, že je z nějakého důvodu chybně nastavena hlavní třída (co to je třída je vysvětleno v pátém dílu seriálu).

Jenom ve zkratce vysvětlím, jaké jsou příznaky a jak to řešit, protože se mi samotnému podařilo tuto chybu už v jednom projektu ke stažení způsobit, tak aby každý věděl, jak to napravit.

Takže: pokud se podíváme na hlášku, tak vidíme, že chybí hlavní třída (vstupní bod aplikace). Java jí hledá pod jménem HelloWorld v balíčku (adresáři) helloworld. Zde se hlavní třída jmenuje Main a je správně v adresáři helloworld. Je třeba udělat některou z následujících úprav:

1) Přejmenovat soubor Main na HelloWorld a s ním i obsaženou třídu Main (tj. změnit public class Main na public class HelloWorld). Pak to bude fungovat - ale to je poněkud léčba bolesti ruky jejím useknutím.

2) Léčba skutečného problému: V Netbeans pravým tlačitkem na projekt, klik na properties v kontextovém menu, ze stromu vybrat run, set main class/browse a vybrat tu jedinou, která tam je.

Ale znovu opakuji, že v projektu by to mělo mít nastaveno dobře. Kdyby to ještě někomu blblo přímo po stažení, tak dejte vědět, prozkoumám to více do hloubky (nebo byly případně ještě nějaké problémy).
Dominio29.5.2011
Dobrý den,
mám problém, při spuštění se mi nic nespustí, a v záložce Output to vypíše:
Could not find the main class: helloworld.HelloWorld. Program will exit.
Exception in thread "main" Java Result: 1

Nebo to se má snad vypsat?
v10.1.2011
1. Vysvětlete pojem a uveďte prostředky pro jeho popis
A. Syntaxe programovacího jazyku
B. Sémantika programovacího jazyku

Poraďte prosím