Tänk Java 2: a upplagan.
målet med denna bok är att lära dig att tänka som en datavetare.Detta sätt att tänka kombinerar några av de bästa funktionerna i matematik, teknik och naturvetenskap.Liksom matematiker använder datavetare formella språk för att beteckna ideer—specifikt beräkningar.Liksom ingenjörer designar de saker, monterar komponenter i system och utvärderar avvägningar bland alternativ.Och som forskare observerar de beteendet hos komplexa system, bildar hypoteser och testar förutsägelser.
en viktig färdighet för en datavetare är problem solving.It innebär förmågan att formulera problem, tänka kreativt om lösningar och uttrycka lösningar tydligt och accurately.As det visar sig att processen att lära sig att programmera datorer är ett utmärkt tillfälle att utveckla problemlösningsförmåga.På en nivå kommer du att lära dig att skriva Java-program, en användbar färdighet i sig.Men på en annan nivå kommer du att använda programmering som ett sätt att end.As vi går med, det slutet kommer att bli tydligare.
1.1 Vad är en dator?
när människor hör ordet dator tänker de ofta på en stationär eller en bärbar dator.Inte överraskande, att söka efter” dator ” på Google Bilder (https://images.google.com/) visar rader och rader av dessa typer av maskiner.Men i en mer allmän mening kan en dator vara vilken typ av enhet som helst som lagrar och bearbetar data.
Dictionary.com definierar en dator som ” en programmerbar elektronisk enhet utformad för att acceptera data, utföra föreskrivna matematiska och logiska operationer med hög hastighet och visa resultaten av dessa operationer.Stordatorer, stationära och bärbara datorer, surfplattor och smartphones är några av de olika typerna av datorer.”
varje typ av dator har sin egen unika design, men internt delar de alla samma typ av hårdvara.De två viktigaste hårdvarukomponenterna är processorer (eller processorer) som utför enkla beräkningar och minne (eller RAM) som tillfälligt lagrar information.Figur 1.1 visar hur dessa komponenter ser ut.
figur 1.1: exempel processor och minne hårdvara.
användare ser i allmänhet och interagerar med pekskärmar, tangentbord och bildskärmar, men det är processorerna och minnet som utför den faktiska beräkningen.Numera är det ganska standard, även för en smartphone, att ha minst åtta processorer och fyra gigabyte (fyra miljarder celler) minne.
1.2 Vad Är Programmering?
ett program är en sekvens av instruktioner som anger hur man utför en beräkning på datormaskinvara.Beräkningen kan vara något matematiskt, som att lösa ett ekvationssystem eller hitta rötterna till ett polynom.Det kan också vara en symbolisk beräkning, som att söka och ersätta text i ett dokument eller (konstigt nog) sammanställa ett program.
detaljerna ser olika ut på olika språk, men några grundläggande instruktioner visas på nästan alla språk:
inmatning: hämta data från tangentbordet, en fil, en sensor eller någon annan enhet. utgång: visa data på skärmen, eller skicka data till en fil eller annan enhet. matematik: utför grundläggande matematiska operationer som addition och division. beslut: kontrollera vissa villkor och kör lämplig kod. upprepning: Utför en åtgärd upprepade gånger, vanligtvis med viss variation.
tro det eller ej, Det är ganska mycket allt som finns till det.Varje program du någonsin har använt, oavsett hur komplicerat, består av små instruktioner som ser ut som these.So du kan tänka på programmering som processen att bryta ner en stor, komplex uppgift i mindre och mindre underaktiviteter.Processen fortsätter tills deluppgifterna är enkla att utföra med de elektroniska kretsarna som tillhandahålls av hårdvaran.
1.3 Hello World-programmet
traditionellt kallas det första programmet du skriver när du lär dig ett nytt programmeringsspråk “Hello World” – programmet.Allt det gör är att mata ut orden Hej, värld! till screen.In Java, det ser ut så här:
när det här programmet körs visas följande:
Hej, världen!
Lägg märke till att utmatningen inte innehåller citattecken.
Java-program består av klass-och metoddefinitioner, och metoder består av uttalanden.Ett uttalande är en kodrad som utför en grundläggande åtgärd.I Hello World-programmet är den här raden ett utskriftsuttalande som visar ett meddelande till användaren:
systemet.ut.println (“Hej, världen!”);
System.out.println
visar resultat på skärmen; namnet println
står för”print line”.Förvirrande kan utskrift betyda både” Visa på skärmen “och”skicka till skrivaren”. i den här boken försöker vi säga” display ” när vi menar utmatning till skärmen.Liksom de flesta uttalanden slutar utskriftssatsen med ett semikolon (;
).
Java är “skiftlägeskänsligt”, vilket betyder att stora och små bokstäver inte är desamma.I Hello World-programmet måste System
börja med en stor bokstav; system
och SYSTEM
fungerar inte.
en metod är en namngiven sekvens av uttalanden.Detta program definierar en metod som heter main
:
allmänna statisk void main (String args)
namnet och formatet på main
är speciellt: när programmet körs börjar det vid det första uttalandet i main
och slutar när det avslutar det sista uttalandet.Senare ser du program som definierar mer än en metod.
detta program definierar en klass som heter Hello
.För närvarande är en klass en samling metoder; vi har mer att säga om detta senare.Du kan ge en klass vilket namn du vill, men det är konventionellt att börja med en bokstav.Klassens namn måste matcha namnet på filen den är i, så den här klassen måste vara i en fil med namnet Hello.Java.
Java använder lockiga hängslen ({
och }
) för att gruppera saker together.In Hej.java, de yttersta hängslen innehåller klassdefinitionen, och de inre hängslen innehåller metoddefinitionen.
raden som börjar med två snedstreck (//
) är en kommentar, som är lite engelsk text som förklarar koden.När Java ser //
ignorerar det allt därifrån till slutet av raden.Kommentarer har ingen effekt på genomförandet av programmet, men de gör det lättare för andra programmerare (och ditt framtida jag) att förstå vad du menade att göra.
1.4 kompilera Java-program
programmeringsspråket du kommer att lära dig i den här boken är Java, vilket är ett högnivåspråk.Andra språk på hög nivå som du kanske har hört talas om inkluderar Python, C och C++, PHP, Ruby och JavaScript.
innan de kan köras måste program på högnivåspråk översättas till ett lågnivåspråk, även kallat “maskinspråk”.Denna översättning tar lite tid, vilket är en liten nackdel med språk på hög nivå.Men språk på hög nivå har två stora fördelar:
- det är mycket lättare att programmera på ett språk på hög nivå.Program tar mindre tid att skriva, de är kortare och lättare att läsa, och de är mer benägna att vara korrekta.
- högnivåspråk är bärbara, vilket innebär att de kan köras på olika typer av datorer med få eller inga ändringar.Lågnivåprogram kan köras på endast en typ av dator.
två typer av program översätter högnivåspråk till lågnivåspråk: tolkar och compilers.An tolk läser ett program på hög nivå och kör det, vilket innebär att det gör vad programmet says.It bearbetar programmet lite åt gången, växelvis läser linjer och utför beräkningar.Figur 1.2 visar strukturen hos en tolk.
figur 1.2: hur tolkade språk exekveras.
däremot läser en kompilator hela programmet och översätter det helt innan programmet börjar köras.Programmet på hög nivå kallas källkoden.Det översatta programmet kallas objektkoden eller den körbara.När ETT program har sammanställts kan du utföra det upprepade gånger utan ytterligare översättning av källan code.As ett resultat, kompilerade program körs ofta snabbare än tolkade program.
Observera att objektkod, som lågnivåspråk, inte är bärbar.Du kan inte köra en körbar kompilerad för en Windows-bärbar dator på en Android-telefon, för example.To kör ett program på olika typer av maskiner, det måste Sammanställas flera times.It kan vara svårt att skriva källkod som kompilerar och körs korrekt på olika typer av maskiner.
för att lösa detta problem sammanställs och tolkas Java.Istället för att översätta källkod direkt till en körbar, genererar Java-kompilatorn kod för en virtuell maskin.Denna “imaginära” maskin har den funktionalitet som är gemensam för Stationära datorer, bärbara datorer, surfplattor, telefoner etc.Dess språk, som kallas Java byte code, ser ut som objektkod och är enkelt och snabbt att tolka.
som ett resultat är det möjligt att kompilera ett Java-program på en maskin, överföra bytekoden till en annan maskin och köra bytekoden på den andra maskinen.Figur 1.3 visar stegen i utvecklingsprocessen.Java-kompilatorn är ett program som heter javac.It översätter .java-filer till .klassfiler som lagrar den resulterande bytekoden.Java-tolken är ett annat program som heter java, vilket är en förkortning för “Java Virtual Machine” (JVM).
figur 1.3: Processen att sammanställa och köra ett Java-program.
programmeraren skriver källkod i filen Hello.java och använder javac för att kompilera den.Om det inte finns några fel sparar kompilatorn byte-koden i filen Hello.class.To kör programmet, programmeraren använder java för att tolka byte-koden.Resultatet av programmet visas sedan på skärmen.
även om det kan verka komplicerat, är dessa steg automatiserade för dig i de flesta utvecklingsmiljöer.Vanligtvis behöver du bara trycka på en knapp eller skriva ett enda kommando för att kompilera och tolka ditt program.Å andra sidan är det viktigt att veta vilka steg som händer i bakgrunden, så om något går fel kan du ta reda på vad det är.
1.5 visa två meddelanden
du kan lägga så många uttalanden som du vill i metoden main
.Om du till exempel vill visa mer än en utmatningsrad:
som det här exemplet också visar kan du lägga kommentarer i slutet av en rad och på rader helt och hållet.
fraser som visas i citattecken kallas strängar, eftersom de innehåller en sekvens av tecken som är spända i minnet.Tecken kan vara bokstäver, siffror, skiljetecken, symboler, mellanslag, flikar etc.
System.out.println
lägger till ett specialtecken, som kallas en ny rad, som flyttas till början av nästa rad.Om du inte vill ha en ny rad i slutet kan du använda print
istället för println
:
i det här exemplet lägger inte det första uttalandet till en ny rad, så utmatningen visas på en enda rad:
adjö, grym värld
Lägg märke till att det finns ett mellanslag i slutet av den första strängen, som visas i utgången strax före ordet grym.
1.6 formatering av källkod
i Java-källkod krävs vissa mellanslag.Till exempel behöver du minst ett mellanslag mellan ord, så det här programmet är inte lagligt:
publicclassGoodbye{ publicstaticvoidmain (sträng args) { systemet.ut.Skriv ut (“adjö,”); systemet.ut.println (“grym värld”); }}
men de flesta andra utrymmen är valfria.Till exempel är detta program lagligt:
de nya linjerna är valfria, too.So vi kunde bara skriva detta:
det fungerar fortfarande, men programmet blir svårare och svårare att läsa.Newlines och mellanslag är viktiga för att visuellt organisera ditt program, vilket gör det lättare att förstå programmet och hitta fel när de uppstår.
många redaktörer formaterar automatiskt källkod med konsekvent indrag och radbrytningar.Till exempel i DrJava (Se bilaga A. 1) kan du dra in din kod genom att välja all text (Ctrl+A) och trycka på Tab-tangenten.
organisationer som gör mycket mjukvaruutveckling har vanligtvis strikta riktlinjer för hur man formaterar källkod.Till exempel publicerar Google sina Java-kodningsstandarder för användning i open source-projekt: https://google.github.io/styleguide/javaguide.html.
du förstår förmodligen inte dessa riktlinjer nu, eftersom de hänvisar till språkfunktioner som du ännu inte har sett.Men du kanske vill hänvisa till dem regelbundet när du läser den här boken.
1.7 använda Escape sekvenser
det är möjligt att visa flera rader av utdata med endast en rad kod.Du måste bara berätta för Java var du ska sätta radbrytningarna:
utgången är två rader, var och en slutar med ett nytt radtecken:
Hallå!Hur mår du?
varje \n
är en escape-sekvens, eller två tecken i källkoden som representerar ett enda tecken.(Backslash kan du fly strängen för att skriva specialtecken.) Observera att det inte finns något mellanslag mellan \n
och How
.Om du lägger till ett mellanslag där kommer det att finnas ett mellanslag i början av den andra raden.
\n
newline \t
tab \"
dubbel offert \
backslash tabell 1.1: vanliga flyktsekvenser
Java har totalt åtta flyktsekvenser, och de fyra vanligaste är listade i tabell 1.1.Till exempel, för att skriva citattecken inuti strängar, måste du fly dem med ett backslash:
systemet.ut.println (“hon sa \” Hej!”till mig.”);
resultatet är följande:
hon sa ” Hej!”till mig.
1.8 Vad Är Datavetenskap?
denna bok utelämnar avsiktligt några detaljer om Java-språket (som de andra flyktsekvenserna), eftersom vårt huvudmål är att lära dig hur man tänker som en datavetare.Att kunna förstå beräkning är mycket mer värdefullt än att bara lära sig att skriva kod.
om du är intresserad av att lära dig mer om Java själv, har Oracle en officiell uppsättning handledning på sin webbplats (https://thinkjava.org/tutorial).Handledningen” Språkgrunder”, som finns under “lära sig Java-språket”, är ett bra ställe att börja.
en av de mest intressanta aspekterna av att skriva program är att bestämma hur man löser ett visst problem, särskilt när det finns flera lösningar.Till exempel finns det många sätt att sortera en lista med siffror, och varje sätt har sin advantages.In för att avgöra vilken väg som är bäst för en given situation, vi behöver tekniker för att beskriva och analysera lösningar formellt.
en algoritm är en sekvens av steg som anger hur man löser ett problem.Vissa algoritmer är snabbare än andra, och vissa använder mindre utrymme i datorminnet.Datavetenskap är vetenskapen om algoritmer, inklusive deras upptäckt och analysis.As du lär dig att utveckla algoritmer för problem som du inte har löst tidigare, du lär dig att tänka som en datavetare.
att designa algoritmer och skriva kod är svårt och felaktigt.Av historiska skäl kallas programmeringsfel buggar, och processen att spåra dem och korrigera dem kallas debugging.As du lär dig att felsöka dina program, du kommer att utveckla nya problemlösningsförmåga.Du måste tänka kreativt när oväntade fel inträffar.
även om det kan vara frustrerande är felsökning en intellektuellt rik, utmanande och intressant del av datorn science.In på vissa sätt är felsökning som detektivarbete.Du konfronteras med ledtrådar, och du måste dra slutsatsen om de processer och händelser som ledde till de resultat du ser.Att tänka på hur man korrigerar program och förbättrar deras prestanda leder ibland till upptäckten av nya algoritmer.
1.9 felsökningsprogram
det är bra att läsa den här boken framför en dator så att du kan prova exemplen när du går.Du kan köra många av exemplen direkt i Drjavas Interaktionspanel (se bilaga A. 2).Men om du lägger koden i en källfil blir det lättare att prova variationer.
när du experimenterar med en ny funktion bör du också försöka göra misstag.Till exempel, i Hello World-programmet, vad händer om du lämnar ett av citattecken?Vad händer om du lämnar ut båda?Vad händer om du stavar println
fel?Dessa typer av experiment hjälper dig att komma ihåg vad du läser.De hjälper också till med felsökning, eftersom du lär dig vad felmeddelandena mean.It är bättre att göra misstag nu och med flit än senare och av misstag.
felsökning är som en experimentell vetenskap: när du har en uppfattning om vad som går fel ändrar du ditt program och försöker igen.Om din hypotes var korrekt kan du förutsäga resultatet av modifieringen och du tar ett steg närmare ett arbetsprogram.Om din hypotes var fel måste du komma med en ny.
programmering och felsökning bör gå hand i hand.Skriv inte bara en massa kod och utför sedan trial-and-error debugging tills allt fungerar.Börja istället med ett program som gör något och gör små ändringar, felsöka dem när du går tills programmet gör vad du vill.På så sätt kommer du alltid att ha ett arbetsprogram, och det blir lättare att isolera fel.
ett bra exempel på denna princip är Linux-operativsystemet, som innehåller miljontals rader av code.It började som ett enkelt program Linus Torvalds används för att utforska Intel 80386 chip.Enligt Larry Greenfield i Linux Users ‘Guide,” Ett av Linus tidigare projekt var ett program som skulle växla mellan utskrift AAAA och BBBB.Detta utvecklades senare till Linux.”
slutligen ger programmering ibland starka känslor.Om du kämpar med en svår bugg kan du känna dig arg, förtvivlad eller generad.Kom ihåg att du inte är ensam, och nästan alla programmerare har haft liknande erfarenheter.Tveka inte att kontakta en vän och ställa frågor!
1.10 ordförråd
genom hela boken försöker vi definiera varje term första gången vi använder it.At i slutet av varje kapitel inkluderar vi de nya termerna och deras definitioner i utseende.Om du spenderar lite tid på att lära dig detta ordförråd kommer du att ha lättare att läsa följande kapitel.
problemlösning: processen att formulera ett problem, hitta en lösning och uttrycka lösningen. hårdvara: de elektroniska och mekaniska komponenterna i en dator, såsom processorer, RAM och hårddiskar. processor: Ett datorchip som utför enkla instruktioner som grundläggande aritmetik och logik. minne: kretsar som lagrar data så länge datorn är påslagen.Inte att förväxla med permanenta lagringsenheter som hårddiskar och flash. program: en sekvens av instruktioner som anger hur man utför uppgifter på en dator.Även känd som”programvara”. programmering: tillämpningen av problemlösning för att skapa körbara datorprogram. uttalande: del av ett program som anger ett steg i en algoritm. Skriv ut uttalande: ett uttalande som gör att utdata visas på skärmen. sätt: En namngiven sekvens av uttalanden. klass: för närvarande en samling relaterade metoder.(Du kommer att se senare att det finns mycket mer till det.) kommentar: en del av ett program som innehåller information om programmet men som inte har någon effekt när programmet körs. högnivåspråk: ett programmeringsspråk som är utformat för att vara lätt för människor att läsa och skriva. lågnivåspråk: ett programmeringsspråk som är utformat för att vara enkelt för en dator att köra.Kallas också “maskinspråk”. bärbar: ett program kan köras på mer än en typ av dator. tolka: Att köra ett program på ett språk på hög nivå genom att översätta det en rad i taget och omedelbart utföra motsvarande instruktioner. kompilera: att översätta ett program på ett högnivåspråk till ett lågnivåspråk, allt på en gång, som förberedelse för senare körning. källkod: ETT program på ett högnivåspråk innan det sammanställs. objektkod: utmatningen från kompilatorn, efter att ha översatt programmet. körbar: ett annat namn för objektkod som är redo att köras på specifik hårdvara. virtuell maskin: en emulering av en riktig maskin. JVM gör det möjligt för en dator att köra Java-program. byte-kod: en speciell typ av objektkod som används för Java-program.Byte-kod liknar objektkod, men den är Bärbar som ett språk på hög nivå. sträng: en sekvens av tecken; den primära datatypen för text. ny rad: ett specialtecken som anger slutet på en textrad.Även känd som” line ending”,” end of line “(EOL) eller”line break”. escape sequence: en sekvens av kod som representerar ett specialtecken när den används i en sträng. algoritm: en procedur eller formel för att lösa ett problem, med eller utan en dator. datavetenskaplig: Det vetenskapliga och praktiska tillvägagångssättet för beräkning och dess tillämpningar. bug: ett fel i ett program. felsökning: processen att hitta och ta bort fel.
1.11 övningar
i slutet av varje kapitel inkluderar vi övningar du kan göra med de saker du har lärt dig.Vi uppmuntrar dig att åtminstone försöka alla problem.Du kan inte lära dig att programmera bara genom att läsa om det; du måste öva.
innan du kan kompilera och köra Java-program kan du behöva ladda ner och installera några verktyg.Det finns många bra alternativ, men vi rekommenderar DrJava, som är en “integrerad utvecklingsmiljö” (IDE) väl lämpad för nybörjare.Instruktioner för att komma igång finns i bilaga A.
koden för detta kapitel finns i ch01-katalogen i ThinkJavaCode2.Se sidan ?? för instruktioner om hur du laddar ner förvaret.Innan du börjar övningarna rekommenderar vi att du sammanställer och kör exemplen.
datavetare har den irriterande vanan att använda vanliga engelska ord för att betyda något annat än deras vanliga engelska betydelser.Till exempel på engelska är uttalanden och kommentarer samma sak, men i program är de olika.
- i dator jargong, vad är skillnaden mellan ett uttalande och en kommentar?
- vad betyder det att säga att ett program är bärbart?
- på vanlig engelska, Vad betyder ordet kompilering?
- Vad är en körbar? Varför används ordet som substantiv?
ordförrådsavsnittet i slutet av varje kapitel är avsett att lyfta fram ord och fraser som har speciella betydelser inom datavetenskap.När du ser bekanta ord, antar inte att du vet vad de menar!
innan du gör något annat, ta reda på hur du kompilerar och kör ett Java-program.Vissa miljöer tillhandahåller exempelprogram som liknar exemplet i Avsnitt 1.3.
- skriv in Hello World-programmet; kompilera och kör sedan det.
- Lägg till ett utskriftsuttalande som visar ett andra meddelande efter Hello, World!.Säg något kvickt som, hur mår du?.Kompilera och kör programmet igen.
- Lägg till en kommentar till programmet (var som helst), kompilera om och kör det igen.Den nya kommentaren bör inte påverka resultatet.
denna övning kan verka trivial, men det är utgångspunkten för många av de program Vi kommer att arbeta med with.To felsöka med förtroende måste du ha förtroende för din programmeringsmiljö.
i vissa miljöer är det lätt att tappa reda på vilket program som körs.Du kan hitta dig själv försöker felsöka ett program medan du av misstag kör en annan.Att lägga till (och ändra) utskriftssatser är ett enkelt sätt att vara säker på att programmet du tittar på är det program du kör.
det är bra att begå så många fel som du kan tänka dig, så att du ser vilka felmeddelanden kompilatorn producerar.Ibland berättar kompilatorn exakt vad som är fel, och allt du behöver göra är att fixa det.Men ibland är felmeddelandena vilseledande.Med tiden kommer du att utveckla en känsla för när du kan lita på kompilatorn och när du måste räkna ut saker själv.
börja med Hello World-programmet, prova vart och ett av följande fel.När du har gjort varje ändring, kompilera programmet, Läs felmeddelandet (om det finns en) och åtgärda sedan felet.
- ta bort en av de öppna lockiga hängslen.
- ta bort en av de avslutande lockiga hängslen.
- istället för
main
, skrivmian
. - ta bort ordet
static
. - ta bort ordet
public
. - ta bort ordet
System
. - ersätt
println
medPrintln
. - ersätt
println
medprint
. - ta bort en parentes.
- Lägg till en extra parentes.