Think Java 2nd ed.
cílem této knihy je naučit vás myslet jako počítačový vědec.Tento způsob myšlení kombinuje některé z nejlepších vlastností matematiky, inženýrství a přírodních věd.Stejně jako matematici, počítačoví vědci používají formální jazyky k označení myšlenek-konkrétně, výpočty.Stejně jako inženýři navrhují věci, sestavují komponenty do systémů a vyhodnocují kompromisy mezi alternativami.A stejně jako vědci pozorují chování složitých systémů, vytvářejí hypotézy a testují předpovědi.
důležitá dovednost pro počítačový vědec je řešení problému.To zahrnuje schopnost formulovat problémy, myslet kreativně o řešení, a vyjádřete řešení, jasně a přesně.Jak se ukázalo, proces učení se programovat počítače je vynikající příležitost k rozvoji dovedností pro řešení problémů.Na jedné úrovni se budete učit psát Java programy, což je užitečná dovednost sama o sobě.Ale na jiné úrovni, budete používat programování jako prostředek k end.As půjdeme dál, ten konec bude jasnější.
1.1 Co je počítač?
když lidé slyší slovo počítač, často myslí na stolní počítač nebo notebook.Není divu, že hledání “počítače” na obrázcích Google (https://images.google.com/) zobrazuje řádky a řádky těchto typů strojů.V obecnějším smyslu však může být počítačem jakýkoli typ zařízení, které ukládá a zpracovává data.
Dictionary.com definuje počítač jako “programovatelné elektronické zařízení určené k příjmu dat, provést předepsané matematické a logické operace při vysoké rychlosti, a zobrazit výsledky těchto operací.Mainframy, stolní a přenosné počítače, tablety a smartphony jsou některé z různých typů počítačů.”
každý typ počítače má svůj vlastní jedinečný design, ale interně všechny sdílejí stejný typ hardwaru.Dvě nejdůležitější hardwarové komponenty jsou procesory (nebo procesory), které provádějí jednoduché výpočty, a paměť (nebo RAM), která dočasně ukládá informace.Obrázek 1.1 ukazuje, jak tyto komponenty vypadají.
Obrázek 1.1: Příklad procesor a paměť hardware.
uživatelé obecně vidí a komunikují s dotykovými obrazovkami, klávesnicemi a monitory, ale skutečný výpočet provádějí procesory a paměť.V dnešní době je docela standardní, dokonce i pro smartphone, mít alespoň osm procesorů a čtyři gigabajty (čtyři miliardy buněk) paměti.
1.2 Co Je Programování?
program je posloupnost instrukcí, která určuje, jak provést výpočet na hardwaru počítače.Výpočet může být něco matematického, jako řešení soustavy rovnic nebo nalezení kořenů polynomu.Může to být také symbolický výpočet, jako je vyhledávání a nahrazování textu v dokumentu nebo (kupodivu) kompilace programu.
detaily vypadat jinak v různých jazycích, ale některé základní pokyny se objeví v každém jazyce:
vstup: Získat data z klávesnice, souboru, snímač, nebo nějaké jiné zařízení. výstup: zobrazení dat na obrazovce nebo odeslání dat do souboru nebo jiného zařízení. matematika: provádět základní matematické operace, jako je sčítání a dělení. rozhodnutí: zkontrolujte určité podmínky a proveďte příslušný kód. opakování: Proveďte akci opakovaně, obvykle s určitou variací.
Věřte tomu nebo ne, to je skoro všechno, co je k tomu.Každý program, který jste kdy použili, bez ohledu na to, jak složité, se skládá z malých instrukcí, které vypadají podobně these.So programování si můžete představit jako proces rozdělení velkého, složitého úkolu na menší a menší dílčí úkoly.Proces pokračuje, dokud nejsou dílčí úkoly dostatečně jednoduché, aby mohly být provedeny s elektronickými obvody poskytovanými hardwarem.
1.3 program Hello World
tradičně se první program, který píšete při učení nového programovacího jazyka, nazývá program” Hello World”.Vše, co dělá, je výstup slova ahoj, svět! do screen.In Java, vypadá to takto:
při spuštění tohoto programu se zobrazí následující:
Ahoj, světe!
Všimněte si, že výstup neobsahuje uvozovky.
Java programy jsou tvořeny definicemi tříd a metod a metody jsou tvořeny příkazy.Příkaz je řádek kódu, který provádí základní akci.V programu Hello World je tento řádek tiskovým příkazem, který uživateli zobrazí zprávu:
systém.mimo.println (“Ahoj, světe!”);
System.out.println
zobrazí výsledky na obrazovce; název println
znamená “print line”.Matoucí tisk může znamenat jak “zobrazit na obrazovce”, tak “odeslat do tiskárny”. v této knize se pokusíme říci” zobrazit”, když máme na mysli výstup na obrazovku.Jako většina příkazů, tiskový příkaz končí středníkem (;
).
Java je “malá a velká písmena”, což znamená, že velká a malá písmena nejsou stejná.V programu Hello World musí System
začínat velkým písmenem; system
a SYSTEM
nebude fungovat.
metoda je pojmenovaná posloupnost příkazů.Tento program definuje jednu metodu s názvem main
:
public static void main(String args)
název a formát main
je zvláštní: když se program spustí, začne se na první příkaz v main
a končí, když dokončení poslední prohlášení.Později uvidíte programy, které definují více než jednu metodu.
tento program definuje třídu s názvem Hello
.Pro teď, třída je sbírka metod; o tom budeme mít více později.Můžete dát třídě libovolné jméno, které se vám líbí, ale je obvyklé začít velkým písmenem.Název třídy musí odpovídat názvu souboru je v, takže tato třída musí být v souboru s názvem Ahoj.Jáva.
Java používá složené závorky ({
a }
) pro seskupování věcí together.In Ahoj.java, nejvzdálenější závorky obsahují definici třídy, a vnitřní závorky obsahují definici metody.
řádek, který začíná dvěma lomítky (//
), je komentář, což je trochu anglický text, který vysvětluje kód.Když Java vidí //
, ignoruje vše Odtud až do konce řádku.Komentáře nemají žádný vliv na provádění programu, ale usnadňují ostatním programátorům (a vašemu budoucímu já) pochopit, co jste chtěli udělat.
1.4 kompilace Java programů
programovací jazyk, který se naučíte v této knize, je Java, což je jazyk na vysoké úrovni.Další high-level jazyků, které jste možná slyšeli, patří Python, C a C++, PHP, Ruby a JavaScript.
před spuštěním musí být programy v jazycích vysoké úrovně přeloženy do jazyka nízké úrovně, nazývaného také “strojový jazyk”.Tento překlad trvá nějakou dobu, což je malá nevýhoda jazyků na vysoké úrovni.Jazyky na vysoké úrovni však mají dvě hlavní výhody:
- je mnohem snazší programovat v jazyce na vysoké úrovni.Programy zabírají méně času na psaní, jsou kratší a snáze čitelné a je pravděpodobnější, že budou správné.
- jazyky na vysoké úrovni jsou přenosné, což znamená, že mohou běžet na různých typech počítačů s několika nebo žádnými úpravami.Programy nízké úrovně mohou běžet pouze na jednom druhu počítače.
Dva druhy programů přeložit high-level jazyků do low-level jazyky: tlumočníci a kompilátory.Tlumočníka čte na vysoké úrovni, program a spustí jej, což znamená, že to dělá to, co program říká, že.Zpracovává program trochu na čas, střídavě čte řádky a provádí výpočty.Obrázek 1.2 ukazuje strukturu tlumočníka.
obrázek 1.2: jak jsou interpretovány jazyky.
naproti tomu kompilátor přečte celý program a překládá jej úplně před spuštěním programu.Program na vysoké úrovni se nazývá zdrojový kód.Přeložený program se nazývá objektový kód nebo spustitelný soubor.Jakmile je program zkompilován, můžete jej spustit opakovaně bez dalšího překladu zdroje code.As výsledkem je, že kompilované programy často běží rychleji než interpretované programy.
Všimněte si, že kód objektu jako jazyk nízké úrovně není přenosný.Nelze spustit spustitelný soubor sestaven na Windows notebooku na Android telefon, například.Spustit program na různé typy strojů, musí být sestaven vícekrát.To může být obtížné psát zdrojový kód, který zkompiluje a spustí správně na různých typech strojů.
pro řešení tohoto problému je Java kompilována i interpretována.Namísto překladu zdrojového kódu přímo do spustitelného souboru generuje kompilátor Java kód pro virtuální stroj.Tento “imaginární” stroj má funkce společné pro stolní počítače, notebooky,tablety, telefony atd.Jeho jazyk, nazvaný Java byte code, vypadá jako objektový kód a je snadno a rychle interpretován.
v důsledku toho je možné zkompilovat program Java na jednom počítači, přenést bajtový kód na jiný počítač a spustit bajtový kód na tomto jiném počítači.Obrázek 1.3 ukazuje kroky procesu vývoje.Překladač Java je program s názvem javac.It překládá .java soubory do .soubory třídy, které ukládají výsledný bajtový kód.Java interpreter je další program s názvem java, což je zkratka pro “Java Virtual Machine” (JVM).
obrázek 1.3: Proces kompilace a spuštění programu Java.
programátor zapíše zdrojový kód do souboru Hello.java a používá javac jej zkompilovat.Pokud nejsou žádné chyby, kompilátor uloží bajtový kód do souboru Hello.class.To spusťte program, programátor používá java k interpretaci bajtového kódu.Výsledek programu se pak zobrazí na obrazovce.
i když se to může zdát komplikované, tyto kroky jsou pro vás ve většině vývojových prostředí automatizované.Obvykle stačí stisknout tlačítko nebo zadat jeden příkaz pro kompilaci a interpretaci programu.Na druhou stranu je důležité vědět, jaké kroky se dějí na pozadí, takže pokud se něco pokazí, můžete zjistit, co to je.
1.5 zobrazení dvou zpráv
v metodě main
můžete zadat tolik příkazů, kolik chcete.Chcete-li například zobrazit více než jeden řádek výstupu:
Jak také ukazuje tento příklad, můžete vkládat komentáře na konec řádku i na řádky samy o sobě.
fráze, které se objevují v uvozovkách, se nazývají řetězce, protože obsahují posloupnost znaků navlečených do paměti.Znaky mohou být písmena, čísla, interpunkční znaménka, symboly, mezery, karty atd.
System.out.println
připojí speciální znak, nazvaný nový řádek, který se přesune na začátek dalšího řádku.Pokud na konci nechcete nový řádek, můžete použít print
místo println
:
v tomto příkladu první příkaz nepřidá nový řádek, takže výstup se zobrazí na jednom řádku:
sbohem, krutý svět
Všimněte si, že na konci prvního řetězce je mezera, která se objeví ve výstupu těsně před slovem krutý.
1.6 formátování zdrojového kódu
ve zdrojovém kódu Java jsou vyžadovány některé mezery.Například, budete potřebovat alespoň jednu mezeru mezi slovy, takže tento program není legální:
publicclassGoodbye{ publicstaticvoidmain(String args) { System.mimo.tisk (“sbohem,”); systém.mimo.println (“krutý svět”); }}
ale většina ostatních prostorů je volitelná.Tento program je například legální:
nové řádky jsou volitelné, too.So mohli bychom napsat toto:
stále to funguje, ale program je stále těžší a těžší číst.Nové řádky a mezery jsou důležité pro vizuální uspořádání programu, což usnadňuje pochopení programu a nalezení chyb, když k nim dojde.
Mnoho editorů automaticky formátovat zdrojový kód v souladu s odsazení a konců řádků.Například v Drjavě (viz Příloha A. 1) můžete odsadit kód výběrem veškerého textu (Ctrl+A) a stisknutím klávesy Tab.
organizace, které dělají hodně vývoje softwaru, mají obvykle přísné pokyny, jak formátovat zdrojový kód.Například Google publikuje své standardy kódování Java pro použití v projektech s otevřeným zdrojovým kódem: https://google.github.io/styleguide/javaguide.html.
pravděpodobně nebudete rozumět těmto pokynům, protože odkazují na jazykové funkce, které jste ještě neviděli.Ale možná budete chtít odkazovat na ně pravidelně, jak budete číst tuto knihu.
1.7 pomocí Escape sekvencí
je možné zobrazit více řádků výstupu pouze s jedním řádkem kódu.Musíte jen říct Javě, kam umístit konce řádků:
výstupem jsou dva řádky, z nichž každá končí znakem nového řádku:
Haló!Jak se máš?
každý \n
je úniková sekvence nebo dva znaky zdrojového kódu, které představují jeden znak.(Zpětné lomítko umožňuje uniknout řetězec psát speciální znaky.) Všimněte si, že mezi \n
a How
není mezera.Pokud tam přidáte mezeru, na začátku druhého řádku bude mezera.
\n
newline \t
tab \"
dvojité uvozovky \
zpětné lomítko Tabulka 1.1: Společné escape sekvence
Java má celkem osm escape sekvence, a čtyři nejčastěji používané ty, které jsou uvedeny v Tabulce 1.1.Chcete-li například psát uvozovky uvnitř řetězců, musíte jim uniknout zpětným lomítkem:
systém.mimo.println (“řekla \” Ahoj!\” pro mě.”);
výsledek je následující:
řekla: “Ahoj!”pro mě.
1.8 Co Je To Informatika?
tato kniha záměrně vynechává některé podrobnosti o jazyce Java (jako jsou další únikové sekvence), protože naším hlavním cílem je naučit vás, jak myslet jako počítačový vědec.Být schopen porozumět výpočtu je mnohem cennější než jen naučit se psát kód.
pokud máte zájem dozvědět se více o samotné Javě, Oracle udržuje oficiální sadu výukových programů na svých webových stránkách (https://thinkjava.org/tutorial).Výukový program “základy jazyka”, který se nachází v části “učení jazyka Java”, je dobrým místem pro začátek.
jedním z nejzajímavějších aspektů psaní programů je rozhodování o tom, jak vyřešit konkrétní problém, zejména pokud existuje více řešení.Například, tam jsou četné způsoby, jak seřadit seznam čísel a každý způsob má své výhody.Aby bylo možné určit, který způsob je nejlepší pro danou situaci, potřebujeme techniky pro popis a analýzu řešení formálně.
algoritmus je posloupnost kroků, která určuje, jak vyřešit problém.Některé algoritmy jsou rychlejší než jiné a některé používají méně místa v paměti počítače.Informatika je věda o algoritmy, včetně jejich detekce a analýza.Jak se naučit rozvíjet algoritmy pro problémy jste nevyřešili, než se naučíte myslet jako počítačový vědec.
navrhování algoritmů a psaní kódu je obtížné a náchylné k chybám.Z historických důvodů se programovací chyby nazývají chyby a proces jejich sledování a opravy se nazývá debugging.As naučíte se ladit své programy, budete rozvíjet nové dovednosti při řešení problémů.Budete muset myslet kreativně, když dojde k neočekávaným chybám.
ačkoli to může být frustrující, ladění je intelektuálně bohatá, náročná a zajímavá část počítače science.In v některých ohledech je ladění jako detektivní práce.Jste konfrontováni s vodítky a musíte odvodit procesy a události, které vedly k výsledkům, které vidíte.Přemýšlení o tom, jak opravit programy a zlepšit jejich výkon, někdy dokonce vede k objevení nových algoritmů.
1.9 ladicích programů
je dobré si přečíst tuto knihu před počítačem, abyste si mohli příklady vyzkoušet.Mnoho příkladů můžete spustit přímo v podokně interakce Drjavy (viz Příloha A. 2).Pokud však kód vložíte do zdrojového souboru, bude snazší vyzkoušet varianty.
kdykoli experimentujete s novou funkcí, měli byste se také pokusit udělat chyby.Například v programu Hello World, co se stane, když vynecháte jednu z uvozovek?Co když vynecháte obojí?Co když se píše println
špatně?Tyto druhy experimentů vám pomohou zapamatovat si, co čtete.Pomáhají také s laděním, protože se dozvíte, jaké chybové zprávy mean.It je lepší dělat chyby nyní a záměrně než později a náhodně.
ladění je jako experimentální věda: jakmile máte představu o tom, co se děje špatně, upravíte svůj program a zkuste to znovu.Pokud byla vaše hypotéza správná, můžete předpovědět výsledek modifikace a uděláte krok blíže k pracovnímu programu.Pokud byla vaše hypotéza špatná, musíte přijít s novou.
programování a ladění by mělo jít ruku v ruce.Nepoužívejte jen napsat spoustu kódu a pak provést pokus-omyl ladění, dokud to všechno funguje.Místo toho, začít s programem, který něco dělá a dělat malé úpravy, ladění je as you go, dokud program dělá to, co chcete.Tímto způsobem budete mít vždy pracovní program a izolace chyb bude snazší.
skvělý příklad tohoto principu je operační systém Linux, který obsahuje miliony řádků kódu.Začalo to jako jednoduchý program Linus Torvalds používá k prozkoumání Intel 80386 čip.Podle Larryho Greenfielda v Příručce pro uživatele Linuxu ” jedním z dřívějších projektů Linusu byl program, který by přepínal mezi tiskem AAAA a BBBB.To se později vyvinulo na Linux.”
konečně programování někdy přináší silné emoce.Pokud se potýkáte s obtížnou chybou, můžete se cítit naštvaní, zoufalí nebo v rozpacích.Nezapomeňte, že nejste sami a prakticky každý programátor měl podobné zkušenosti.Neváhejte oslovit přítele a klást otázky!
1.10 Slovní zásoba
v celé knize se snažíme definovat každý termín při prvním použití it.At na konci každé kapitoly uvádíme nové pojmy a jejich definice v pořadí vzhledu.Pokud strávíte nějaký čas učením této slovní zásoby, budete mít snazší čtení následujících kapitol.
řešení problémů: proces formulace problému, nalezení řešení a vyjádření řešení. hardware: elektronické a mechanické součásti počítače, jako jsou procesory, RAM a pevné disky. procesor: Počítačový čip, který provádí jednoduché pokyny, jako je základní aritmetika a logika. paměť: obvody, které ukládají data, pokud je počítač zapnutý.Nesmí být zaměňována s trvalými úložnými zařízeními, jako jsou pevné disky a flash. program: posloupnost pokynů, která určuje, jak provádět úkoly v počítači.Také známý jako “software”. programování: aplikace řešení problémů na vytváření spustitelných počítačových programů. prohlášení: část programu, který určuje jeden krok algoritmu. tiskový příkaz: příkaz, který způsobí zobrazení výstupu na obrazovce. způsoba: Pojmenovaná posloupnost výroků. třída: prozatím sbírka souvisejících metod.(Později uvidíte, že je toho mnohem víc.) komentář: část programu, která obsahuje informace o programu, ale nemá žádný vliv při spuštění programu. jazyk na vysoké úrovni: programovací jazyk, který je navržen tak, aby byl pro lidi snadno čitelný a psaný. jazyk nízké úrovně: programovací jazyk, který je navržen tak, aby byl pro počítač snadno spuštěn.Také se nazývá “strojový jazyk”. přenosný: schopnost programu běžet na více než jednom druhu počítače. interpretovat: Spuštění programu v jazyce na vysoké úrovni jeho překladem po jednom řádku a okamžitým provedením odpovídajících pokynů. kompilace: přeložit program v jazyce na vysoké úrovni do jazyka na nízké úrovni, vše najednou, v rámci přípravy na pozdější provedení. zdrojový kód: program v jazyce na vysoké úrovni, před kompilací. kód objektu: výstup kompilátoru po překladu programu. spustitelný soubor: jiný název kódu objektu, který je připraven ke spuštění na konkrétním hardwaru. virtuální stroj: emulace skutečného stroje. JVM umožňuje počítači spouštět programy Java. bajtový kód: speciální druh objektového kódu používaného pro Java programy.Bajtový kód je podobný objektovému kódu, ale je přenosný jako jazyk na vysoké úrovni. řetězec: posloupnost znaků; primární datový typ textu. newline: speciální znak označující konec řádku textu.Také známý jako “konec řádku”, “konec řádku” (EOL) nebo “konec řádku”. escape sequence: sekvence kódu, která představuje speciální znak při použití uvnitř řetězce. algoritmus: postup nebo vzorec pro řešení problému, s počítačem nebo bez něj. informatik: Vědecký a praktický přístup k výpočtu a jeho aplikace. chyba: Chyba v programu. ladění: proces hledání a odstraňování chyb.
1.11 cvičení
na konci každé kapitoly uvádíme cvičení, která můžete dělat s věcmi, které jste se naučili.Doporučujeme vám, abyste se alespoň pokusili o každý problém.Nemůžete se naučit programovat pouze čtením o tom; musíte cvičit.
než budete moci kompilovat a spouštět programy Java, možná budete muset stáhnout a nainstalovat několik nástrojů.Existuje mnoho dobrých možností, ale doporučujeme DrJava, což je “integrované vývojové prostředí” (IDE) vhodné pro začátečníky.Pokyny pro začátek jsou v příloze A.
kód pro tuto kapitolu je v adresáři Ch01 ThinkJavaCode2.Viz strana ?? pokyny, jak stáhnout úložiště.Než začnete cvičení, doporučujeme vám sestavit a spustit příklady.
Počítač vědci mají nepříjemný zvyk pomocí běžná anglická slova znamenají něco jiného, než jejich společné anglické významy.Například v angličtině jsou prohlášení a komentáře stejné, ale v programech se liší.
- v počítačovém žargonu, jaký je rozdíl mezi výrokem a komentářem?
- co to znamená říci, že program je přenosný?
- v běžné angličtině, co znamená slovo kompilace?
- co je spustitelný soubor? Proč se toto slovo používá jako podstatné jméno?
část slovní zásoby na konci každé kapitoly je určena k zvýraznění slov a frází, které mají v informatice zvláštní význam.Když vidíte známá slova, nepředpokládejte, že víte, co znamenají!
než uděláte cokoli jiného, zjistěte, jak zkompilovat a spustit program Java.Některá prostředí poskytují ukázkové programy podobné příkladu v části 1.3.
- zadejte program Hello World; poté jej zkompilujte a spusťte.
- přidejte tiskový příkaz, který zobrazí druhou zprávu po Hello, World!.Řekni něco vtipného jako, Jak se máš?.Zkompilujte a spusťte program znovu.
- přidejte komentář k programu (kdekoli), překompilujte a spusťte jej znovu.Nový komentář by neměl mít vliv na výsledek.
Toto cvičení se může zdát triviální, ale to je výchozím místem pro mnoho programů, budeme pracovat.Ladění s důvěrou, budete muset mít důvěru ve své programovací prostředí.
v některých prostředích je snadné ztratit přehled o tom, který program se provádí.Možná zjistíte, že se snažíte ladit JEDEN program, zatímco omylem spustíte jiný.Přidání (a změna) tiskových příkazů je jednoduchý způsob, jak se ujistit, že program, na který se díváte, je program, který používáte.
je dobré spáchat tolik chyb, kolik vás napadne, abyste viděli, jaké chybové zprávy kompilátor produkuje.Někdy vám kompilátor řekne přesně, co je špatně, a vše, co musíte udělat, je opravit.Někdy jsou však chybové zprávy zavádějící.Postupem času si vytvoříte smysl pro to, kdy můžete kompilátoru důvěřovat a kdy musíte přijít na věci sami.
počínaje programem Hello World vyzkoušejte každou z následujících chyb.Po provedení každé změny zkompilujte program, přečtěte si chybovou zprávu (pokud existuje) a poté chybu opravte.
- odstraňte jednu z otevíracích složených výztuh.
- odstraňte jednu z uzavíracích složených výztuh.
- místo
main
napištemian
. - odstraňte slovo
static
. - odstraňte slovo
public
. - odstraňte slovo
System
. - nahraďte
println
Println
. - nahraďte
println
print
. - smazat jednu závorku.
- přidejte další závorku.