tænk Java 2.udgave.
målet med denne bog er at lære dig at tænke som en computerforsker.Denne måde at tænke på kombinerer nogle af de bedste funktioner i matematik, teknik og naturvidenskab.Ligesom matematikere bruger computerforskere formelle sprog til at betegne ideer—specifikt beregninger.Ligesom ingeniører designer de ting, samler komponenter i systemer og evaluerer afvejninger mellem alternativer.Og ligesom forskere observerer de opførelsen af komplekse systemer, danner hypoteser og tester forudsigelser.
en vigtig færdighed for en computerforsker er problem solving.It indebærer evnen til at formulere problemer, tænke kreativt om løsninger og udtrykke løsninger klart og accurately.As det viser sig, at processen med at lære at programmere computere er en glimrende mulighed for at udvikle problemløsningskompetencer.På et niveau lærer du at skrive Java-programmer, en nyttig færdighed i sig selv.Men på et andet niveau vil du bruge programmering som et middel til en end.As vi går sammen, den ende bliver klarere.
1.1 Hvad er en Computer?
når folk hører ordet computer, tænker de ofte på et skrivebord eller en bærbar computer.Ikke overraskende viser søgning efter “computer” på Google Billeder (https://images.google.com/) rækker og rækker af disse typer maskiner.I en mere generel forstand kan en computer imidlertid være enhver type enhed, der gemmer og behandler data.
Dictionary.com definerer en computer som ” en programmerbar elektronisk enhed designet til at acceptere data, udføre foreskrevne matematiske og logiske operationer med høj hastighed og vise resultaterne af disse operationer.Mainframes, stationære og bærbare computere, tablets og smartphones er nogle af de forskellige typer computere.”
hver type computer har sit eget unikke design, men internt deler de alle den samme type udstyr.De to vigtigste komponenter er processorer (eller CPU ‘ er), der udfører enkle beregninger og hukommelse (eller RAM), der midlertidigt gemmer information.Figur 1.1 viser, hvordan disse komponenter ser ud.
figur 1.1: eksempel processor og hukommelsesudstyr.
brugere ser og interagerer generelt med berøringsskærme, tastaturer og skærme, men det er processorer og hukommelse, der udfører den faktiske beregning.I dag er det ret standard, selv for en smartphone, at have mindst otte processorer og fire gigabyte (fire milliarder celler) hukommelse.
1.2 Hvad Er Programmering?
et program er en sekvens af instruktioner, der angiver, hvordan man udfører en beregning på computerudstyr.Beregningen kan være noget matematisk, som at løse et system af ligninger eller finde rødderne af et polynom.Det kan også være en symbolsk beregning, som at søge og erstatte tekst i et dokument eller (underligt nok) kompilere et program.
detaljerne ser forskellige ud på forskellige sprog, men et par grundlæggende instruktioner vises på næsten alle sprog:
input: Hent data fra tastaturet, en fil, en sensor eller en anden enhed. output: Vis data på skærmen, eller send data til en fil eller en anden enhed. matematik: Udfør grundlæggende matematiske operationer som tilføjelse og division. afgørelse: kontroller for visse betingelser og udfør den relevante kode. gentagelse: Udfør en handling gentagne gange, normalt med en vis variation.
tro det eller ej, det er stort set alt der er til det.Hvert program, du nogensinde har brugt, uanset hvor kompliceret, består af små instruktioner, der ligner meget these.So du kan tænke på programmering som processen med at nedbryde en stor, kompleks opgave i mindre og mindre underopgaver.Processen fortsætter, indtil underopgaverne er enkle nok til at blive udført med de elektroniske kredsløb, der leveres af udstyret.
1.3 Hej Verdensprogrammet
traditionelt kaldes det første program, du skriver, når du lærer et nyt programmeringssprog, “Hej Verden” – programmet.Alt det gør er output ordene Hej, Verden! til screen.In Java, Det ser sådan ud:
når dette program kører, viser det følgende:
Hej, Verden!
Bemærk, at output ikke inkluderer anførselstegn.
Java-programmer består af klasse-og metodedefinitioner, og metoder består af udsagn.En erklæring er en kodelinje, der udfører en grundlæggende handling.I programmet Hej Verden er denne linje en udskriftserklæring, der viser en besked til brugeren:
System.uden.println (“Hej, Verden!”);
System.out.println
viser resultater på skærmen; navnet println
står for”print line”.Forvirrende kan print betyde både” display på skærmen “og”send til printeren”. i denne bog forsøger vi at sige” display”, når vi mener output til skærmen.Som de fleste udsagn slutter udskriftserklæringen med et semikolon (;
).
Java er “store og små bogstaver”, hvilket betyder, at store og små bogstaver ikke er de samme.I Hello verden program, System
har til at begynde med et stort bogstav; system
og SYSTEM
vil ikke arbejde.
en metode er en navngivet sekvens af udsagn.Dette program definerer en metode navngivet main
:
offentlig statisk void main (String args)
navnet og formatet på main
er specielt: når programmet kører, starter det ved den første sætning i main
og slutter, når det afslutter den sidste sætning.Senere vil du se programmer, der definerer mere end en metode.
dette program definerer en klasse med navnet Hello
.For nu er en klasse en samling af metoder; vi har mere at sige om dette senere.Du kan give en klasse ethvert navn, du kan lide, men det er konventionelt at starte med et stort bogstav.Navnet på klassen skal matche navnet på den fil, den er i, så denne klasse skal være i en fil med navnet Hello.Java.
Java bruger krøllede seler ({
og }
) til at gruppere ting together.In Hallo.java, de yderste seler indeholder klassedefinitionen, og de indre seler indeholder metodedefinitionen.
linjen, der begynder med to skråstreger (//
), er en kommentar, som er en smule engelsk tekst, der forklarer koden.Når Java ser //
, ignorerer det alt derfra indtil slutningen af linjen.Kommentarer har ingen indflydelse på udførelsen af programmet, men de gør det lettere for andre programmører (og dit fremtidige selv) at forstå, hvad du mente at gøre.
1.4 kompilering af Java-programmer
det programmeringssprog, du vil lære i denne bog, er Java, som er et sprog på højt niveau.Andre sprog på højt niveau, du måske har hørt om, inkluderer Python, C og C++, PHP, Ruby og JavaScript.
før de kan køre, skal programmer på sprog på højt niveau oversættes til et sprog på lavt niveau, også kaldet “maskinsprog”.Denne oversættelse tager noget tid, hvilket er en lille ulempe ved sprog på højt niveau.Men sprog på højt niveau har to store fordele:
- det er meget lettere at programmere på et sprog på højt niveau.Programmer tager mindre tid at skrive, de er kortere og lettere at læse, og de er mere tilbøjelige til at være korrekte.
- sprog på højt niveau er bærbare, hvilket betyder, at de kan køre på forskellige slags computere med få eller ingen ændringer.Programmer på lavt niveau kan kun køre på en slags computer.
to slags programmer oversætter sprog på højt niveau til sprog på lavt niveau: tolke og compilers.An tolk læser et højt niveau program og udfører det, hvilket betyder, at det gør, hvad programmet says.It behandler programmet lidt ad gangen, skiftevis læser linjer og udfører beregninger.Figur 1.2 viser strukturen af en tolk.
figur 1.2: hvordan fortolkede sprog udføres.
i modsætning hertil læser en kompilator hele programmet og oversætter det helt, før programmet begynder at køre.Programmet på højt niveau kaldes kildekoden.Det oversatte program kaldes objektkoden eller den eksekverbare.Når ET program er kompileret, kan du udføre det gentagne gange uden yderligere oversættelse af kilden code.As et resultat, kompilerede programmer kører ofte hurtigere end fortolkede programmer.
Bemærk, at objektkode som sprog på lavt niveau ikke er bærbar.Du kan ikke køre en eksekverbar kompileret til en bærbar computer på en Android-telefon, for example.To kør et program på forskellige typer maskiner, det skal kompileres flere times.It kan være svært at skrive kildekode, der kompilerer og kører korrekt på forskellige typer af maskiner.
for at løse dette problem er Java både kompileret og fortolket.I stedet for at oversætte kildekoden direkte til en eksekverbar, genererer Java-kompilatoren kode til en virtuel maskine.Denne” imaginære ” maskine har den funktionalitet, der er fælles for desktops, laptops, tablets, telefoner osv.Dets sprog, kaldet Java byte code, ligner objektkode og er let og hurtigt at fortolke.
som et resultat er det muligt at kompilere et Java-program på en maskine, overføre byte-koden til en anden maskine og køre byte-koden på den anden maskine.Figur 1.3 viser trinnene i udviklingsprocessen.Java compiler er et program med navnet javac.It oversætter .java-filer til .klassefiler, der gemmer den resulterende byte-kode.Java-tolken er et andet program, der hedder java, som er en forkortelse for “Java Virtual Machine” (JVM).
figur 1.3: Processen med at kompilere og køre et Java-program.
programmøren skriver kildekoden i filen Hello.java og bruger javac til at kompilere det.Hvis der ikke er nogen fejl, gemmer kompilatoren byte-koden i filen Hello.class.To kør programmet, programmereren bruger java til at fortolke byte-koden.Resultatet af programmet vises derefter på skærmen.
selvom det kan virke kompliceret, automatiseres disse trin for dig i de fleste udviklingsmiljøer.Normalt behøver du kun at trykke på en knap eller skrive en enkelt kommando for at kompilere og fortolke dit program.På den anden side er det vigtigt at vide, hvilke trin der sker i baggrunden, så hvis noget går galt, kan du finde ud af, hvad det er.
1.5 viser to meddelelser
du kan sætte så mange udsagn som du vil i main
– metoden.For eksempel for at vise mere end en outputlinje:
som dette eksempel også viser, kan du sætte kommentarer i slutningen af en linje såvel som på linjer helt alene.
sætninger, der vises i anførselstegn, kaldes strenge, fordi de indeholder en sekvens af tegn, der er spændt sammen i hukommelsen.Tegn kan være bogstaver, tal, tegnsætningstegn, symboler, mellemrum, faner osv.
System.out.println
tilføjer et specialtegn, kaldet en ny linje, der bevæger sig til begyndelsen af den næste linje.Hvis du ikke vil have en ny linje i slutningen, kan du bruge print
i stedet forprintln
:
i dette eksempel tilføjer den første sætning ikke en nylinje, så output vises på en enkelt linje:
farvel, grusom verden
Bemærk, at der er et mellemrum i slutningen af den første streng, som vises i output lige før ordet grusom.
1.6 formatering af kildekode
i Java-kildekode kræves nogle mellemrum.For eksempel har du brug for mindst et mellemrum mellem ord, så dette program er ikke lovligt:
publicclassGoodbye{ publicstaticvoidmain (String args) { System.uden.Udskriv (“farvel,”); System.uden.println (“grusom verden”); }}
men de fleste andre rum er valgfri.For eksempel er dette program lovligt:
de nye linjer er valgfri, too.So vi kunne bare skrive dette:
det virker stadig, men programmet bliver sværere og sværere at læse.Nye linjer og mellemrum er vigtige for visuelt at organisere dit program, hvilket gør det lettere at forstå programmet og finde fejl, når de opstår.
mange redaktører vil automatisk formatere kildekoden med konsekvent indrykning og linjeskift.For eksempel i DrJava (Se bilag A. 1) kan du indrykke din kode ved at vælge al tekst (Ctrl+A) og trykke på Tab-tasten.
organisationer, der gør en masse programudvikling, har normalt strenge retningslinjer for, hvordan man formaterer kildekode.For eksempel offentliggør Google sine Java-kodningsstandarder til brug i open source-projekter: https://google.github.io/styleguide/javaguide.html.
du forstår sandsynligvis ikke disse retningslinjer nu, fordi de henviser til sprogfunktioner, du endnu ikke har set.Men du vil måske henvise til dem med jævne mellemrum, når du læser denne bog.
1.7 brug af Escape-sekvenser
det er muligt at vise flere outputlinjer med kun en linje kode.Du skal bare fortælle Java, hvor du skal sætte linjeskiftene:
udgangen er to linjer, der hver slutter med et nyt linjetegn:
Hallo!Hvordan går det?
hver \n
er en flugtsekvens eller to tegn i kildekoden, der repræsenterer et enkelt tegn.(Backslash giver dig mulighed for at undslippe strengen for at skrive specialtegn.) Bemærk, at der ikke er mellemrum mellem \n
og How
.Hvis du tilføjer et mellemrum der, vil der være et mellemrum i begyndelsen af den anden linje.
\n
ny linje \t
tab \"
dobbelt citat \
backslash tabel 1.1: almindelige flugtsekvenser
Java har i alt otte escape-sekvenser, og de fire mest almindeligt anvendte er anført i tabel 1.1.For eksempel at skrive anførselstegn inde i strenge, skal du undslippe dem med et tilbageslag:
System.uden.println (“hun sagde \” Hej!”til mig.”);
resultatet er som følger:
hun sagde ” Hej!”til mig.
1.8 Hvad Er Computer Science?
denne bog udelader med vilje nogle detaljer om Java-sproget (såsom de andre flugtsekvenser), fordi vores hovedmål er at lære dig at tænke som en computerforsker.At kunne forstå beregning er meget mere værdifuldt end bare at lære at skrive kode.
hvis du er interesseret i at lære mere om Java selv, opretholder Oracle et officielt sæt tutorials på sin hjemmeside (https://thinkjava.org/tutorial).Den” sprog Basics “tutorial, findes under” lære Java-sproget”, er et godt sted at starte.
et af de mest interessante aspekter ved skriveprogrammer er at beslutte, hvordan man løser et bestemt problem, især når der er flere løsninger.For eksempel er der mange måder at sortere en liste over tal på, og hver vej har sin advantages.In for at afgøre, hvilken vej der er bedst for en given situation, har vi brug for teknikker til at beskrive og analysere løsninger formelt.
en algoritme er en sekvens af trin, der angiver, hvordan man løser et problem.Nogle algoritmer er hurtigere end andre, og nogle bruger mindre plads i computerens hukommelse.Datalogi er videnskaben om algoritmer, herunder deres opdagelse og analysis.As du lærer at udvikle algoritmer til problemer, du ikke har løst før, du lærer at tænke som en computerforsker.
det er vanskeligt og fejlbehæftet at designe algoritmer og skrive kode.Af historiske årsager kaldes programmeringsfejl fejl, og processen med at spore dem ned og rette dem kaldes debugging.As du lærer at debugge dine programmer, du vil udvikle nye problemløsningskompetencer.Du bliver nødt til at tænke kreativt, når uventede fejl sker.
selvom det kan være frustrerende, er debugging en intellektuelt rig, udfordrende og interessant del af computeren science.In nogle måder, debugging er som detektivarbejde.Du konfronteres med spor, og du er nødt til at udlede de processer og begivenheder, der førte til de resultater, du ser.At tænke på, hvordan man retter programmer og forbedrer deres ydeevne, fører nogle gange endda til opdagelsen af nye algoritmer.
1.9 Debugging programmer
det er en god ide at læse denne bog foran en computer, så du kan prøve eksemplerne, mens du går.Du kan køre mange af eksemplerne direkte i Drjavas Interaktionsrude (Se bilag A. 2).Men hvis du lægger koden i en kildefil, bliver det lettere at prøve variationer.
når du eksperimenterer med en ny funktion, skal du også prøve at lave fejl.Hvad sker der for eksempel i Hello-Verdensprogrammet, hvis du udelader et af anførselstegnene?Hvad hvis du udelader begge dele?Hvad hvis du staver println
forkert?Disse slags eksperimenter hjælper dig med at huske, hvad du læser.De hjælper også med fejlfinding, fordi du lærer, hvad fejlmeddelelserne mean.It er bedre at lave fejl nu og med vilje end senere og ved et uheld.
Debugging er som en eksperimentel videnskab: når du har en ide om, hvad der går galt, ændrer du dit program og prøver igen.Hvis din hypotese var korrekt, kan du forudsige resultatet af ændringen, og du tager et skridt tættere på et arbejdsprogram.Hvis din hypotese var forkert, skal du komme med en ny.
programmering og fejlfinding skal gå hånd i hånd.Skriv ikke bare en masse kode, og udfør derefter prøve-og-fejl-fejlfinding, indtil det hele fungerer.Start i stedet med et program, der gør noget, og foretag små ændringer, debugging dem, mens du går, indtil programmet gør, hvad du vil.På den måde vil du altid have et arbejdsprogram, og det vil være lettere at isolere fejl.
et godt eksempel på dette princip er operativsystemet, som indeholder millioner af linjer af code.It startede som et simpelt program Linus Torvalds bruges til at udforske Intel 80386 chip.”Et af Linus’ tidligere projekter var et program, der ville skifte mellem udskrivning af AAAA og BBBB.Senere udviklede det sig til Lina.”
endelig bringer programmering nogle gange stærke følelser frem.Hvis du kæmper med en vanskelig fejl, kan du føle dig vred, fortvivlet eller flov.Husk at du ikke er alene, og stort set alle programmører har haft lignende oplevelser.Tøv ikke med at nå ud til en ven og stille spørgsmål!
1.10 ordforråd
i hele bogen forsøger vi at definere hvert udtryk første gang vi bruger it.At i slutningen af hvert kapitel inkluderer vi de nye udtryk og deres definitioner i rækkefølge efter udseende.Hvis du bruger lidt tid på at lære dette ordforråd, har du lettere ved at læse de følgende kapitler.
problemløsning: processen med at formulere et problem, finde en løsning og udtrykke løsningen. udstyr: de elektroniske og mekaniske komponenter på en computer, såsom CPU ‘ er, RAM og harddiske. processor: En computerchip, der udfører enkle instruktioner som grundlæggende aritmetik og logik. hukommelse: kredsløb, der gemmer data, så længe computeren er tændt.Ikke at forveksle med permanente lagerenheder som harddiske og flash. program: en sekvens af instruktioner, der angiver, hvordan du udfører opgaver på en computer.Også kendt som”programmer”. programmering: anvendelse af problemløsning til oprettelse af eksekverbare computerprogrammer. erklæring: del af et program, der angiver et trin i en algoritme. udskriftserklæring: en erklæring, der får output til at blive vist på skærmen. metode: En navngivet sekvens af udsagn. klasse: For nu, en samling af relaterede metoder.(Du vil senere se, at der er meget mere til det .) kommentar: en del af et program, der indeholder oplysninger om programmet, men har ingen effekt, når programmet kører. sprog på højt niveau: et programmeringssprog, der er designet til at være let for mennesker at læse og skrive. sprog på lavt niveau: et programmeringssprog, der er designet til at være let for en computer at køre.Også kaldet “maskinsprog”. bærbar: et programs evne til at køre på mere end en slags computer. fortolke: At køre et program på et sprog på højt niveau ved at oversætte det en linje ad gangen og straks udføre de tilsvarende instruktioner. kompilere: at oversætte et program på et højt niveau sprog til et lavt niveau sprog, alt sammen som forberedelse til senere udførelse. kildekode: et program på et sprog på højt niveau, inden det kompileres. objektkode: output fra kompilatoren efter oversættelse af programmet. eksekverbar: et andet navn til objektkode, der er klar til at køre på specifikt udstyr. virtuel maskine: en emulering af en rigtig maskine. JVM gør det muligt for en computer at køre Java-programmer. byte-kode: en særlig slags objektkode, der bruges til Java-programmer.Byte-kode ligner objektkode, men den er bærbar som et sprog på højt niveau. streng: en sekvens af tegn; den primære datatype for tekst. ny linje: et specialtegn, der angiver slutningen af en tekstlinje.Også kendt som “line ending”, “end of line” (EOL) eller “line break”. escape-sekvens: en sekvens af kode, der repræsenterer et specialtegn, når det bruges i en streng. algoritme: en procedure eller formel til løsning af et problem, med eller uden en computer. datalogi: Den videnskabelige og praktiske tilgang til beregning og dens anvendelser. fejl: en fejl i et program. fejlfinding: processen med at finde og fjerne fejl.
1.11 øvelser
i slutningen af hvert kapitel inkluderer vi øvelser, du kan gøre med de ting, du har lært.Vi opfordrer dig til i det mindste at forsøge ethvert problem.Du kan ikke lære at programmere kun ved at læse om det; du skal øve.
før du kan kompilere og køre Java-programmer, skal du muligvis hente og installere et par værktøjer.Der er mange gode muligheder, men vi anbefaler DrJava, som er et “integreret udviklingsmiljø” (IDE) velegnet til begyndere.Instruktioner til at komme i gang findes i Appendiks A.
koden til dette kapitel findes i ch01-biblioteket i ThinkJavaCode2.Se side ?? for instruktioner om, hvordan du henter lageret.Før du starter øvelserne, anbefaler vi at du kompilerer og kører eksemplerne.
computerforskere har den irriterende vane at bruge almindelige engelske ord til at betyde noget andet end deres almindelige engelske betydninger.For eksempel er udsagn og kommentarer på engelsk det samme, men i programmer er de forskellige.
- hvad er forskellen mellem en erklæring og en kommentar i computerjargon?
- Hvad betyder det at sige, at et program er bærbart?
- på almindelig engelsk, Hvad betyder ordet kompilering?
- Hvad er en eksekverbar? Hvorfor bruges dette ord som et substantiv?
ordforrådsafsnittet i slutningen af hvert kapitel er beregnet til at fremhæve ord og sætninger, der har særlige betydninger inden for datalogi.Når du ser velkendte ord, skal du ikke antage, at du ved, hvad de betyder!
før du gør noget andet, skal du finde ud af, hvordan du kompilerer og kører et Java-program.Nogle miljøer giver eksempler på programmer svarende til eksemplet i Afsnit 1.3.
- skriv i Hello verden program; derefter kompilere og køre det.
- Tilføj en udskriftserklæring, der viser en anden besked efter Hej, Verden!.Sig noget vittigt som, Hvordan har du det?.Kompilere og køre programmet igen.
- Tilføj en kommentar til programmet (hvor som helst), kompilere, og køre det igen.Den nye kommentar bør ikke påvirke resultatet.
denne øvelse kan virke triviel, men det er startstedet for mange af de programmer, vi vil arbejde with.To debug med tillid skal du have tillid til dit programmeringsmiljø.
i nogle miljøer er det let at miste overblikket over, hvilket program der udføres.Du kan finde dig selv forsøger at debug et program, mens du ved et uheld kører en anden.Tilføjelse (og ændring) print udsagn er en enkel måde at være sikker på, at det program, du kigger på, er det program, du kører.
det er en god ide at begå så mange fejl, som du kan tænke på, så du kan se, hvilke fejlmeddelelser kompilatoren producerer.Nogle gange fortæller kompilatoren dig præcis, hvad der er galt, og alt hvad du skal gøre er at rette det.Men nogle gange er fejlmeddelelserne vildledende.Over tid vil du udvikle en fornemmelse for, hvornår du kan stole på kompilatoren, og når du selv skal finde ud af tingene.
start med programmet Hej Verden, prøv hver af følgende fejl.Når du har foretaget hver ændring, skal du kompilere programmet, læse fejlmeddelelsen (hvis der er en) og derefter rette fejlen.
- Fjern en af de åbne krøllede seler.
- Fjern en af de afsluttende krøllede seler.
- i stedet for
main
, skrivmian
. - Fjern ordet
static
. - Fjern ordet
public
. - Fjern ordet
System
. - Erstat
println
medPrintln
. - Erstat
println
medprint
. - Slet en parentes.
- Tilføj en ekstra parentes.