Java. Úvodná kapitola
Motto: I firmly believe that the best way to learn
a new language is to program in it.
John Withers, vo svojej knihe „Developing Java Entertainment Applets“.
Cieľ Prednášky 1:
Ukážka kódu v Jave, stručný opis Javy – objektovo orientovaného
jazyka, literatúra a zdroje na sieti, existencia knižníc-balíkov,
jednoduché dátové typy, String.
Predstavte si, že ste počítačový lingvista v 23. storočí. Poznáte z vykopávok viacero programovacích jazykov. Jedného dňa dostanete do ruky kód ďalšieho, pre vás zatiaľ neznámeho jazyka. Viete len, že sa volal Java a bol „objektovo orientovaný“.
Úloha1 : Využite vaše doterajšie
znalosti kódov iných jazykov. Preskúmajte nasledujúci kód a skúste hádať,
na čo sú jeho jednotlivé časti určené. Rozlišujte medzi faktami, ktorými ste si
istí, veľmi pravdepodobnými domniekami a čírymi špekuláciami. Nesnažte sa
porozumieť všetkému. Naopak, predpokladajte, že väčšine kódu nebudete rozumieť
a nepotrebujete rozumieť. Kód je z knihy Bruce Eckela „Thinking in
Java“ a tak ho uvádzame aj s copyrigtovým povolením – ak by ste ho
chceli šíriť ďalej.
Kód P1.1:
//:! :CopyRight.txt
Copyright ©2000 Bruce Eckel
Source code file from the
2nd edition of the book
"Thinking in
Java." All rights reserved EXCEPT as
allowed by the following
statements:
You can freely use this file
for your own work (personal
or commercial),
including modifications and
distribution in
executable form only.
Permission is granted to use
this file in classroom situations,
including its
use in presentation
materials, as long as the book
"Thinking in Java"
is cited as the source.
Except in classroom
situations, you cannot copy
and distribute this code;
instead, the sole
distribution point is
http://www.BruceEckel.com
(and official mirror sites)
where it is
freely available. You cannot
remove this
copyright and notice. You
cannot distribute
modified versions of the
source code in this
package. You cannot use this
file in printed
media without the express
permission of the
author. Bruce Eckel makes no
representation about
the suitability of this
software for any purpose.
It is provided "as
is" without express or implied
warranty of any kind,
including any implied
warranty of merchantability,
fitness for a
particular purpose or
non-infringement. The entire
risk as to the quality and
performance of the
software is with you. Bruce
Eckel and the
publisher shall not be
liable for any damages
suffered by you or any third
party as a result of
using or distributing
software. In no event will
Bruce Eckel or the publisher
be liable for any
lost revenue, profit, or
data, or for direct,
indirect, special,
consequential, incidental, or
punitive damages, however
caused and regardless of
the theory of liability,
arising out of the use of
or inability to use
software, even if Bruce Eckel
and the publisher have been
advised of the
possibility of such damages.
Should the software
prove defective, you assume
the cost of all
necessary servicing, repair,
or correction. If you
think you've found an error,
please submit the
correction using the form
you will find at
www.BruceEckel.com. (Please
use the same
form for non-code errors
found in the book.)
///:~
//: c11:WordCount.java
// Counts words from a file,
outputs
// results in sorted form.
import java.io.*;
import java.util.*;
class Counter {
private int i = 1;
int read() { return i; }
void increment() { i++; }
}
public class WordCount {
private FileReader file;
private StreamTokenizer st;
// A TreeMap keeps keys in sorted order:
private TreeMap counts = new TreeMap();
WordCount(String filename)
throws FileNotFoundException {
try {
file = new FileReader(filename);
st = new StreamTokenizer(
new BufferedReader(file));
st.ordinaryChar('.');
st.ordinaryChar('-');
} catch(FileNotFoundException e) {
System.err.println(
"Could not open " + filename);
throw e;
}
}
void cleanup() {
try {
file.close();
} catch(IOException e) {
System.err.println(
"file.close() unsuccessful");
}
}
void countWords() {
try {
while(st.nextToken() !=
StreamTokenizer.TT_EOF) {
String s;
switch(st.ttype) {
case StreamTokenizer.TT_EOL:
s = new String("EOL");
break;
case StreamTokenizer.TT_NUMBER:
s = Double.toString(st.nval);
break;
case StreamTokenizer.TT_WORD:
s = st.sval; // Already a String
break;
default: // single character in ttype
s = String.valueOf((char)st.ttype);
}
if(counts.containsKey(s))
((Counter)counts.get(s)).increment();
else
counts.put(s, new Counter());
}
} catch(IOException e) {
System.err.println(
"st.nextToken() unsuccessful");
}
}
Collection values() {
return counts.values();
}
Set keySet() { return counts.keySet(); }
Counter getCounter(String s) {
return (Counter)counts.get(s);
}
public static void main(String[] args)
throws FileNotFoundException {
WordCount wc =
new WordCount("eden.txt");
wc.countWords();
Iterator keys = wc.keySet().iterator();
while(keys.hasNext()) {
String key = (String)keys.next();
System.out.println(key
+ ": "
+ wc.getCounter(key).read());
}
wc.cleanup();
}
} ///:~
Úloha 2. Možno ste si v Úlohe 1 nepoložili niektoré
z nasledujúcich otázok. V takom prípade si ich skúste položiť teraz:
a)
Na
čo asi slúžia v kóde lomítka?
b)
Čo
asi označuje slovo „String?“
c)
Čo
by mohlo signalizovať slovo „import“?
d)
Skúste
uhádnuť, na ktorých miestach je v kóde daný príkaz na vytvorenie nového
objektu.
e)
Vymenujte
niekoľko objektov (tried objektov) , s ktorými kód pracuje.
f)
Je
niekde v kóde príkaz na tlačenie?
g)
Pracuje
sa niekde v kóde s logickými podmienkami?
Úloha 3. Prezrite si
nasledujúci javovský program typu „Hello world“. Uhádnite, aký bude výstup
z programu, keď sa preloží a spustí.
Neskôr ho skúste preložiť javovským prekladačom a spustiť.
public class Pozdrav {
public static void main(String[] args) {
System.out.println("Ahojte vsetci!");
}
}
Knihy, ktoré umožnia aj začiatočníkovi spoznať jazyk Java:
Herout
Pavel, Učebnice jazyka Java,
nakladatelství Kopp, České Budějovice,2000.
Schildt
Herbert, Java 2 Příručka programátora,Softpress , Brno, 2001.
Eckel
Bruce, Myslíme v jazyku Java , knihovna programátora, Grada publishing
Praha, 2001.
Literatúra
pre pokročilejších:
Herout Pavel, Java grafické uživatelské prostředí
a čeština, nakladatelství Kopp,
České Budějovice,2001.
Eckel Bruce, Myslíme v jazyku Java , knihovna
zkušeného programátora, Grada publishing Praha, 2001.
Eckstein Robert, Loy Marc, Wood Dave, Java Swing. O’Reilly
1998.
užitočné internetové adresy:
Stránky Heroutovej učebnice: www-kiv.zcu.cz~herout/java/ujjl
www.softpress.cz
Stránky spoločnosti Sun Microsystems, ktorá Javu vyvinula
(a vyvíja):
www.java.sun.com - kde sa dá stiahnuť JDK, Java Development
Kit, obsahujúci aj prekladač jazyka Java javac.exe a štandardný
interpreter jazyka Java java.exe.
P.S. Spoločnosť Sun má na svojich stránkach aj rozsiahlu, prehľadne spracovanú dokumentáciu k jazyku Java, k jeho jednotlivým triedam. Do pozornosti odporúčam hlavne stránku „AllClasses“ . Dokumentácia je vo formáte html.
Java je objektovo orientovaný jazyk, vyvíjaný spoločnosťou Sun od roku 1991. Jej význam veľmi vzrástol s rozšírením
internetu. Umožňuje prenositeľnosť kódu do rôznych operačných systémov (portability) . Java totiž negeneruje
spustiteľný kód ako prekladače iných jazykov. Miesto toho generuje tzv. bajtový
kód (byte code).Ide tu o vysoko optimalizovanú množinu inštrukcií,
spustiteľných prostredníctvom run-time systému, ktorý sa nazýva virtuálny stroj
Javy (Java Virtual Machine, JVM). Virtuálny stroj sa pomerne ľahko impementuje
pre rôzne platformy. Virtuálne stroje, pracujúce v ľubovoľnom operačnom
systéme sú už schopné interpretovať ten istý bajtový kód. Veľkou prednosťou Javy je aj dostupnosť zdrojov. Na siete sú celé hotové knižnice, ktoré možno používať zadarmo. Java takisto používa premyslený spôsob ladenia kódu, ktorý programátorovi uľahčuje prácu. Ďalšou veľkou pomôckou je prístupnosť dokumentácie k jednotlivým triedam a možnosť vytvárať veľmi pohodlným spôsobom dokumentáciu ku vlastným triedam. Java tiež umožňuje oddeliť verejné a súkromné časti kódu. To užívateľovi umožní pracovať stále s tou istou triedou a jej vlastnosťami, programátorovi triedy to zasa umožní skrytý kód kedykoľvek optimalizovať.
Poznámka pre programátorov v jazyku C: zabudnite na smerníky, v Jave neexistujú. Toto opatrenie zvyšuje bezpečnosť javovských aplikácií, napr. apletov. (Nedovolí sa v nich sprístupňovanie zdrojov mimo samotný program.)
Nájdite odpovede na kladené
otázky.
public class CislaAStringy {
public static void main(String[] args) {
String s = new String("Teraz vytlacim cislo.");
System.out.println(s);
int i = 5;
System.out.println(i);
s = "Teraz zmenim hodnotu cisla";
System.out.println(s);
i = 10;
System.out.println(i);
}
}
Všimnite si: ako je deklarovaná premenná základného dátového typu
integer? Ako je deklarovaný objekt typu String? Ako to, že hoci sme triedu
s názvom String nevytvorili, napriek tomu môžeme vytvoriť objekt tejto
triedy? (Odpoveď: pri každom spustení Javy sa automaticky importuje balík
java.lang. Jeho triedy sú programu
k dispozícii. Jednou z nich je trieda String, ďalšou trieda System .)
Základný dátový typ boolean
. Príkazy if a if
... else.
public class IfElse {
public static void main(String[] args) {
boolean pravdivostnaHodnota = true;
if(pravdivostnaHodnota) System.out.println("Je to
pravda.");
pravdivostnaHodnota = false;
if(pravdivostnaHodnota)
System.out.println("Je to este stale pravda.");
if(pravdivostnaHodnota){
System.out.println("Je to este stale, stale
pravda.");
}
else {
System.out.println("Uz to vobec nie je pravda.");
}
}
}
Otázky: Akým symbolom končí
každý príkaz v Jave?
Ako sa vytvorí premenná typu boolean a ako jej môžeme priradiť
počiatočnú pravdivostnú hodnotu?
Aký text sa vytlačí, keď sa
vykoná program?
Java. Cvičenie 1
Poznatky otom, ako zvoliť meno súboru, v ktorom je uložený kód. O tom, ako kód´preložiť a spustiť v operačnom systéme DOS a o tom, čo všetko musí byť na počítači nainštalované, aby spustenie prebehlo. Príklady precvičia narábanie so základnými dátovými premennými, použije sa príkaz tlačenia textu na konzolu.
Cv1.1
-
Spustenie
programu v DOS-e. Vojdite do adresára, v ktorom sa nachádzajú
programy „javac.exe“ a „java.exe“
(Príklad: adresár typu C:\jdk1.3\bin) . Nazvime ho
“materský adresár”. Kód P1.2 uložte do súboru s názvom „Pozdrav.java“
. Je dôležité, aby „P“ v slove
Pozdrav bolo veľké. Súbor
„Pozdrav.java“ uložte do materského adresára. Ak pracujete s operačným
systémon Windows, vyvolajte príkazový riadok DOS-u pomocou Start/Programs/
Command Prompt. Spustite prekladač
„javac.exe“ pomocou príkazu:
javac Pozdrav.java
Výsledkom úspešného procesu je preklad kódu
a jeho uloženie do súboru „Pozdrav.class“. Ak sa tak stalo, spustite súbor
Pozdrav.class pomocou interpretera „java.exe“. Príkaz je:
java Pozdrav
Výpis z takéhoto spustenia cez Command Prompt sa
nachádza tu:
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.
C:\Documents and Settings\Administrator>cd
C:\jdk1.3
C:\jdk1.3>cd bin
C:\jdk1.3\bin>javac Pozdrav.java
C:\jdk1.3\bin>java Pozdrav
Ahojte vsetci!
C:\jdk1.3\bin>
Cv1. 2
Vyskúšajte aj spustenie cez „bat“ súbor. Do súboru „zdravim.bat“ uložte tento kód:
javac Pozdrav.java
java Pozdrav
pause
Súbory
„zdravim.bat“ a „Pozdrav.java“
uložte do materského adresára. Spustite
„zdravim.bat“.
Teraz kód v súbore „zdravim.bat“ upravte
zmazaním prvého riadku na:
java Pozdrav
pause
Spustite znovu „zdravim.bat“.
Nakoniec v materskom adresári vymažte súbor
„Pozdrav.class“. (Ak ste pri predošlých operáciách nedostali chybové hlásenie,
tak tam ten súbor bude!). Spustite „zdravim.bat“ znovu. Čo sa teraz zmenilo?
Vysvetlite, prečo program nezbehol.
Mierne pozmeňte každý z programov. Pozmenené
programy a triedy premenujte a spustite. Správali sa podľa vášho
očakávania?
Návrh na zmenu: miesto výrazu System.out.println()
použite výraz System.out.print(). Čo sa zmenilo?
public class TypyCisel {
public
static void main(String[] args) {
int
cislo = 2004;
for(int j=1;j<21; j++) {
cislo = cislo*10;
System.out.println(cislo);
}
}
}
Spustite tento program. Ako sa líšili vytlačené
údaje od tých, ktoré ste očakávali? Čím to vysvetľujete?
Vymeňte teraz v programe riadok
int
cislo = 2004;
za riadok
long
cislo = 2004;
a sledujte výstup z programu.
Nakoniec spustite program s riadkom
double
cislo = 2004;
© Ivan Kupka
Vaše komentáre:
kupka@fmph.uniba.sk