Tenk Java 2.Utg.
målet med denne boken er å lære deg å tenke som en datavitenskapsmann.Denne tankegangen kombinerer noen av de beste funksjonene i matematikk, ingeniørfag og naturvitenskap.Som matematikere bruker datavitenskapere formelle språk for å betegne ideer-spesielt beregninger.Som ingeniører designer de ting, monterer komponenter i systemer og evaluerer avveininger mellom alternativer.Og som forskere observerer de oppførselen til komplekse systemer, danner hypoteser og testspådommer.
en viktig ferdighet for en datavitenskapsmann er problem solving.It innebærer evnen til å formulere problemer, tenke kreativt om løsninger, og uttrykke løsninger tydelig og accurately.As det viser seg at prosessen med å lære å programmere datamaskiner er en utmerket mulighet til å utvikle problemløsende ferdigheter.På ett nivå vil du lære å skrive Java-programmer, en nyttig ferdighet i seg selv.Men på et annet nivå vil du bruke programmering som et middel til en end.As vi går sammen, at slutten vil bli klarere.
1.1 Hva Er En Datamaskin?
når folk hører ordet datamaskin, tenker de ofte på en stasjonær eller en bærbar datamaskin.Ikke overraskende, søker etter “datamaskin” På Google Images (https://images.google.com/) viser rader og rader av disse typer maskiner.Men i en mer generell forstand kan en datamaskin være en hvilken som helst type enhet som lagrer og behandler data.
Dictionary.com definerer en datamaskin som ” en programmerbar elektronisk enhet designet for å godta data, utføre foreskrevne matematiske og logiske operasjoner med høy hastighet, og vise resultatene av disse operasjonene.Stormaskiner, stasjonære og bærbare datamaskiner, tabletter og smarttelefoner er noen av de forskjellige typer datamaskiner.”
hver type datamaskin har sin egen unike design, men internt deler de alle samme type maskinvare.De to viktigste maskinvarekomponentene er prosessorer (Eller Cpuer) som utfører enkle beregninger og minne (ELLER RAM) som midlertidig lagrer informasjon.Figur 1.1 viser hvordan disse komponentene ser ut.
Figur 1.1: Eksempel prosessor og minne maskinvare.
Brukere ser generelt og samhandler med berøringsskjermer, tastaturer og skjermer, men det er prosessorene og minnet som utfører selve beregningen.I dag er det ganske vanlig, selv for en smarttelefon, å ha minst åtte prosessorer og fire gigabyte (fire milliarder celler) minne.
1.2 Hva Er Programmering?
et program er en sekvens med instruksjoner som angir hvordan du utfører en beregning på maskinvare.Beregningen kan være noe matematisk, som å løse et system av ligninger eller finne røttene til et polynom.Det kan også være en symbolsk beregning, som å søke og erstatte tekst i et dokument eller (merkelig nok) kompilere et program.
detaljene ser forskjellige ut på forskjellige språk, men noen få grunnleggende instruksjoner vises på omtrent alle språk:
input: Hent data fra tastaturet, en fil, en sensor eller en annen enhet. utgang: Vis data på skjermen, eller send data til en fil eller annen enhet. matematikk: Utfør grunnleggende matematiske operasjoner som tillegg og divisjon. løsning: Sjekk for visse forhold og utfør riktig kode. repetisjon: Utfør en handling gjentatte ganger, vanligvis med litt variasjon.
Tro det eller ei, det er ganske mye alt som er til det.Hvert program du noen gang har brukt, uansett hvor komplisert, består av små instruksjoner som ser ut som these.So du kan tenke på programmering som prosessen med å bryte ned en stor, kompleks oppgave i mindre og mindre deloppgaver.Prosessen fortsetter til deloppgavene er enkle nok til å bli utført med de elektroniske kretsene som leveres av maskinvaren.
1.3 Hello World-Programmet
Tradisjonelt er det første programmet du skriver når du lærer et nytt programmeringsspråk, kalt “Hello World” – programmet.Alt den gjør er utgang ordene Hei, Verden! til screen.In Java, det ser slik ut:
når dette programmet kjører, viser det følgende:
Hei, Verden!
Legg Merke til at utdataene ikke inneholder anførselstegnene.
Java-programmer består av klasse-og metodedefinisjoner, og metoder består av uttalelser.En setning er en linje med kode som utfører en grunnleggende handling.I Hello World-programmet er denne linjen en utskriftserklæring som viser en melding til brukeren:
System.ut.println (“Hei, Verden!”);
System.out.println
viser resultater på skjermen; navnet println
står for “print line”.Forvirrende kan utskrift bety både “skjerm på skjermen” og “send til skriveren”. i denne boken prøver vi å si “skjerm” når vi mener utgang til skjermen.Som de fleste setninger slutter utskriftserklæringen med et semikolon (;
).
Java er “case-sensitive”, noe som betyr at store og små bokstaver er ikke det samme.I Hello World-programmet må System
begynne med en stor bokstav; system
og SYSTEM
vil ikke fungere.
en metode er en navngitt sekvens av setninger.Dette programmet definerer en metode som heter main
:
offentlig statisk tomrom main (Streng args)
navnet og formatet på main
er spesielt: når programmet kjører, starter det ved den første setningen i main
og slutter når det er ferdig med den siste setningen.Senere vil du se programmer som definerer mer enn en metode.
dette programmet definerer en klasse som heter Hello
.For nå er en klasse en samling av metoder; vi vil ha mer å si om dette senere.Du kan gi en klasse noe navn du liker, men det er vanlig å starte med et stort brev.Navnet på klassen må samsvare med navnet på filen den er i, så denne klassen må være I En fil som heter Hello.Java.
Java bruker klammeparenteser ({
og }
) for å gruppere ting together.In Hallo.java, de ytre klammeparentesene inneholder klassedefinisjonen, og de indre klammeparentesene inneholder metodedefinisjonen.
linjen som begynner med to skråstreker (//
) er en kommentar, som er litt engelsk tekst som forklarer koden.Når Java ser //
, ignorerer det alt derfra til slutten av linjen.Kommentarer har ingen effekt på utførelsen av programmet, men de gjør det lettere for andre programmerere (og ditt fremtidige selv) å forstå hva du mente å gjøre.
1.4 Kompilering Java-Programmer
programmeringsspråket du vil lære i denne boken Er Java, som er et høyt nivå språk.Andre høyt nivå språk du kanskje har hørt om inkluderer Python, C OG C++, PHP, Ruby og JavaScript.
før de kan kjøre, må programmer på høyt nivå språk oversettes til et lavnivå språk, også kalt “maskinspråk”.Denne oversettelsen tar litt tid, noe som er en liten ulempe ved språk på høyt nivå.Men språk på høyt nivå har to store fordeler:
- det er mye lettere å programmere på et språk på høyt nivå.Programmer tar mindre tid å skrive, de er kortere og lettere å lese, og de er mer sannsynlig å være riktige.
- språk På høyt nivå er bærbare, noe som betyr at de kan kjøre på forskjellige typer datamaskiner med få eller ingen modifikasjoner.Lavt nivå programmer kan kjøre på bare en type datamaskin.
to typer programmer oversetter språk på høyt nivå til språk på lavt nivå: tolker og compilers.An tolk leser et program på høyt nivå og utfører det, noe som betyr at det gjør hva programmet says.It behandler programmet litt om gangen, vekselvis lese linjer og utføre beregninger.Figur 1.2 viser strukturen til en tolk.
Figur 1.2: hvordan tolket språk utføres.
i motsetning leser en kompilator hele programmet og oversetter det helt før programmet begynner å kjøre.Programmet på høyt nivå kalles kildekoden.Det oversatte programmet kalles objektkoden,eller den kjørbare.Når et program er kompilert, kan du utføre det gjentatte ganger uten videre oversettelse av kilden code.As et resultat, kompilerte programmer kjører ofte raskere enn tolket programmer.
merk at objektkode, som et lavnivåspråk, ikke er bærbar.Du kan ikke kjøre en kjørbar kompilert For En windows-bærbar pc på En Android-telefon, for example.To kjør et program på ulike typer maskiner, det må kompileres flere times.It kan være vanskelig å skrive kildekode som kompilerer og kjører riktig på ulike typer maskiner.
For å løse Dette problemet, Er Java både kompilert og tolket.I stedet for å oversette kildekoden direkte til en kjørbar, Genererer Java-kompilatoren kode for en virtuell maskin.Denne” imaginære ” maskinen har funksjonaliteten som er vanlig for stasjonære datamaskiner, bærbare datamaskiner, tabletter, telefoner, etc.Språket, Kalt Java byte-kode, ser ut som objektkode og er enkelt og raskt å tolke.
som et resultat er Det mulig å kompilere Et Java-program på en maskin, overføre byte-koden til en annen maskin, og kjøre byte-koden på den andre maskinen.Figur 1.3 viser trinnene i utviklingsprosessen.Java compiler er et program som heter javac.It oversetter .java-filer inn .klassefiler som lagrer den resulterende byte-koden.Java interpreter er et annet program, kalt java, som er kort for “Java Virtual Machine” (JVM).
Figur 1.3: Prosessen med å kompilere Og kjøre Et Java-program.
programmereren skriver kildekoden I filen Hei.java og bruker javac til å kompilere den.Hvis det ikke er noen feil, lagrer kompilatoren byte-koden i filen Hello.class.To kjør programmet, programmereren bruker java til å tolke byte-koden.Resultatet av programmet vises deretter på skjermen.
selv om det kan virke komplisert, er disse trinnene automatisert for deg i de fleste utviklingsmiljøer.Vanligvis trenger du bare å trykke på en knapp eller skrive en enkelt kommando for å kompilere og tolke programmet.På den annen side er det viktig å vite hvilke trinn som skjer i bakgrunnen, så hvis noe går galt, kan du finne ut hva det er.
1.5 Viser To Meldinger
du kan sette så mange setninger som du vil i main
metoden .For eksempel, for å vise mer enn en linje med utdata:
Som dette eksemplet også viser, kan du sette kommentarer på slutten av en linje, så vel som på linjer helt av seg selv.
Setninger som vises i anførselstegn kalles strenger, fordi de inneholder en sekvens av tegn som er satt sammen i minnet.Tegn kan være bokstaver, tall,tegnsettingstegn, symboler, mellomrom, faner, etc.
System.out.println
legger til et spesialtegn, kalt en ny linje, som flyttes til begynnelsen av neste linje.Hvis du ikke vil ha en ny linje på slutten, kan du bruke print
i stedet for println
:
i dette eksemplet legger ikke den første setningen til en ny linje, så utdataene vises på en enkelt linje:
Farvel, grusom verden
Legg Merke til at det er et mellomrom på slutten av den første strengen, som vises i utgangen like før ordet grusom.
1.6 Formatering Kildekode
I Java kildekode, noen mellomrom er nødvendig.For eksempel trenger du minst ett mellomrom mellom ord, så dette programmet er ikke lovlig:
publicclassGoodbye{ publicstaticvoidmain (Streng args) { System.ut.skriv ut (“Farvel”); System.ut.println (“grusom verden”); }}
men de fleste andre områder er valgfrie.For eksempel er dette programmet lovlig:
linjeskiftene er valgfrie, too.So vi kunne bare skrive dette:
det fungerer fortsatt, men programmet blir vanskeligere og vanskeligere å lese.Linjeskift og mellomrom er viktig for å visuelt organisere programmet, noe som gjør det lettere å forstå programmet og finne feil når de oppstår.
Mange redaktører vil automatisk formatere kildekoden med konsekvent innrykk og linjeskift.For Eksempel, I DrJava (se Vedlegg A. 1) kan du rykke inn koden din ved å velge all tekst (Ctrl+A) og trykke På Tab-tasten.
Organisasjoner som driver med mye programvareutvikling, har vanligvis strenge retningslinjer for hvordan kildekoden skal formateres.For Eksempel publiserer Google Sine Java-kodingsstandarder for bruk i åpen kildekode-prosjekter: https://google.github.io/styleguide/javaguide.html.
du vil sannsynligvis ikke forstå disse retningslinjene nå, fordi de refererer til språkfunksjoner du ennå ikke har sett.Men du vil kanskje referere til dem med jevne mellomrom mens du leser denne boken.
1.7 Ved Hjelp Av Fluktsekvenser
er det mulig å vise flere linjer med utgang med bare en linje med kode.Du må bare fortelle Java hvor du skal sette linjeskift:
utgangen er to linjer, hver slutter med et linjeskift:
Hallo!Hvordan går det?
Hver \n
er en rømningssekvens, eller to tegn med kildekode som representerer et enkelt tegn.(Backslash lar deg unnslippe strengen for å skrive spesialtegn.) Legg merke til at det ikke er mellomrom mellom \n
og How
.Hvis du legger til et mellomrom der, vil det være et mellomrom i begynnelsen av den andre linjen.
\n
newline \t
tab \"
dobbelt sitat \
backslash Tabell 1.1: Vanlige fluktsekvenser
Java har totalt åtte fluktsekvenser, og de fire mest brukte er oppført I Tabell 1.1.For eksempel, for å skrive anførselstegn inne i strenger, må du unnslippe dem med en omvendt skråstrek:
System.ut.println (“Hun sa \” Hei!”til meg.”);
resultatet er som følger:
Hun sa ” Hei!”til meg.
1.8 Hva Er Informatikk?
denne boken forsettlig utelater noen detaljer Om Java-språket (for eksempel de andre escape-sekvensene), fordi vårt hovedmål er å lære deg hvordan du tenker som en datavitenskapsmann.Å kunne forstå beregning er mye mer verdifullt enn bare å lære å skrive kode.
Hvis Du er interessert i å lære Mer Om Java selv, opprettholder Oracle et offisielt sett med opplæringsprogrammer på sin nettside (https://thinkjava.org/tutorial).Opplæringen “Språk Grunnleggende”, funnet under “Lære Java-Språket”, er et godt sted å starte.
En av de mest interessante aspektene ved å skrive programmer er å bestemme hvordan man skal løse et bestemt problem, spesielt når det er flere løsninger.For eksempel er det mange måter å sortere en liste over tall på, og hver vei har sin advantages.In for å finne ut hvilken vei som er best for en gitt situasjon, trenger vi teknikker for å beskrive og analysere løsninger formelt.
en algoritme er en sekvens av trinn som angir hvordan du løser et problem.Noen algoritmer er raskere enn andre, og noen bruker mindre plass i datamaskinens minne.Datavitenskap er vitenskapen om algoritmer, inkludert deres oppdagelse og analysis.As du lærer å utvikle algoritmer for problemer du ikke har løst før, du lærer å tenke som en datavitenskapsmann.
Å Designe algoritmer og skrive kode er vanskelig og utsatt for feil.Av historiske årsaker kalles programmeringsfeil feil, og prosessen med å spore dem ned og korrigere dem kalles debugging.As du lærer å feilsøke programmene dine, du vil utvikle nye problemløsende ferdigheter.Du må tenke kreativt når uventede feil skje.
selv om det kan være frustrerende, er feilsøking en intellektuelt rik, utfordrende og interessant del av datamaskinen science.In noen måter, debugging er som detektivarbeid.Du blir konfrontert med ledetråder, og du må utlede prosesser og hendelser som førte til resultatene du ser.Å tenke på hvordan du korrigerer programmer og forbedrer ytelsen, fører noen ganger til oppdagelsen av nye algoritmer.
1.9 Feilsøkingsprogrammer
det er en god ide å lese denne boken foran en datamaskin, slik at du kan prøve eksemplene mens du går.Du kan kjøre mange av eksemplene direkte I DrJava Interaksjoner ruten (se Vedlegg A. 2).Men hvis du legger koden i en kildefil, blir det lettere å prøve ut variasjoner.
når du eksperimenterer med en ny funksjon, bør du også prøve å gjøre feil.For Eksempel, I Hello World-programmet, hva skjer hvis du utelater et av anførselstegnene?Hva om du utelater begge deler?Hva om du staver println
feil?Slike eksperimenter hjelper deg med å huske hva du leser.De hjelper også med feilsøking, fordi du lærer hva feilmeldingene mean.It er bedre å gjøre feil nå og med vilje enn senere og ved et uhell.
Feilsøking er som en eksperimentell vitenskap: når du har en ide om hva som går galt, endrer du programmet og prøver igjen.Hvis hypotesen din var riktig, kan du forutsi resultatet av modifikasjonen, og du tar et skritt nærmere et arbeidsprogram.Hvis hypotesen din var feil, må du komme opp med en ny.
Programmering og feilsøking bør gå hånd i hånd.Ikke bare skriv en haug med kode og utfør prøving og feil feilsøking til alt fungerer.I stedet starter du med et program som gjør noe og gjør små endringer, feilsøker dem mens du går, til programmet gjør det du vil.På den måten vil du alltid ha et arbeidsprogram, og det blir lettere å isolere feil.
et godt eksempel på dette prinsippet Er Linux-operativsystemet, som inneholder millioner av linjer med code.It Startet Som et enkelt program Linus Torvalds pleide å utforske Intel 80386-brikken.Ifølge Larry Greenfield i Linux Users’ Guide, “En Av Linus tidligere prosjekter var et program som ville bytte MELLOM utskrift AAAA og BBBB.Dette utviklet seg senere Til Linux.”
til slutt bringer programmering noen ganger sterke følelser.Hvis du sliter med en vanskelig feil, kan du føle deg sint, despondent eller flau.Husk at du ikke er alene, og nesten hver programmerer har hatt lignende erfaringer.Ikke nøl med å nå ut til en venn og stille spørsmål!
1.10 Vokabular
Gjennom hele boken prøver vi å definere hvert begrep første gang vi bruker it.At på slutten av hvert kapittel inkluderer vi de nye begrepene og deres definisjoner i rekkefølge av utseende.Hvis du bruker litt tid på å lære dette vokabularet, vil du ha en lettere tid på å lese de følgende kapitlene.
problemløsning: prosessen med å formulere et problem, finne en løsning og uttrykke løsningen. maskinvare: de elektroniske og mekaniske komponentene til en datamaskin, For Eksempel Cpuer, RAM og harddisker. prosessor: En databrikke som utfører enkle instruksjoner som grunnleggende aritmetikk og logikk. minne: Kretser som lagrer data så lenge datamaskinen er slått på.Må ikke forveksles med permanente lagringsenheter som harddisker og flash. program: en sekvens med instruksjoner som angir hvordan du utfører oppgaver på en datamaskin.Også kjent som “programvare”. programmering: anvendelsen av problemløsning for å lage kjørbare dataprogrammer. statement: Del av et program som angir ett trinn i en algoritme. print statement: en setning som gjør at utdata skal vises på skjermen. metode: En navngitt sekvens av uttalelser. klasse: For nå, en samling av relaterte metoder.(Du vil se senere at det er mye mer til det.) kommentar: en del av et program som inneholder informasjon om programmet, men har ingen effekt når programmet kjører. høynivåspråk: et programmeringsspråk som er designet for å være enkelt for mennesker å lese og skrive. lavnivå språk: et programmeringsspråk som er designet for å være enkelt for en datamaskin å kjøre.Også kalt “maskinspråk”. portable: evnen til et program til å kjøre på mer enn en type datamaskin. tolke: Å kjøre et program på et språk på høyt nivå ved å oversette det en linje om gangen og umiddelbart utføre de tilsvarende instruksjonene. kompilere: å oversette et program på et språk på høyt nivå til et språk på lavt nivå, alt på en gang, som forberedelse til senere utførelse. kildekode: et program på et høyt nivå språk, før de blir kompilert. objektkode: utgangen av kompilatoren, etter å ha oversatt programmet. kjørbar: Et annet navn for objektkode som er klar til å kjøre på bestemt maskinvare. virtuell maskin: en emulering av en ekte maskin. JVM gjør det mulig for en datamaskin å kjøre Java-programmer. byte-kode: en spesiell type objektkode som brukes Til Java-programmer.Byte-kode ligner på objektkode, men den er bærbar som et språk på høyt nivå. streng: en sekvens av tegn; den primære datatypen for tekst. linjeskift: et spesialtegn som angir slutten på en tekstlinje.Også kjent som “line ending”, “end of line”(EOL), eller “line break”. escape-sekvens: en sekvens med kode som representerer et spesialtegn når det brukes i en streng. algoritme: en prosedyre eller formel for å løse et problem, med eller uten en datamaskin. informatikk: Den vitenskapelige og praktiske tilnærmingen til beregning og dens applikasjoner. feil: En feil i et program. feilsøking: prosessen med å finne og fjerne feil.
1.11 Øvelser
på slutten av hvert kapittel inkluderer vi øvelser du kan gjøre med de tingene du har lært.Vi oppfordrer deg til å i det minste forsøke alle problemer.Du kan ikke lære å programmere bare ved å lese om det; du må øve.
Før du kan kompilere Og kjøre Java-programmer, må du kanskje laste ned og installere noen verktøy.Det er mange gode alternativer, men Vi anbefaler DrJava, som er et “integrert utviklingsmiljø” (IDE) godt egnet for nybegynnere.Instruksjoner for å komme i gang er I Tillegg A.
koden for dette kapittelet er i ch01 katalogen Av ThinkJavaCode2.Se side ?? for instruksjoner om hvordan du laster ned depotet.Før du starter øvelsene, anbefaler vi at du kompilerer og kjører eksemplene.
datavitenskapere har den irriterende vanen med å bruke vanlige engelske ord til å bety noe annet enn deres vanlige engelske betydninger.For eksempel på engelsk er uttalelser og kommentarer det samme, men i programmer er de forskjellige.
- i datamaskinsjargong, Hva er forskjellen mellom en uttalelse og en kommentar?
- Hva betyr det å si at et program er bærbart?
- på vanlig engelsk, hva betyr ordet kompilere?
- Hva er en kjørbar fil? Hvorfor brukes dette ordet som et substantiv?
vokabulardelen på slutten av hvert kapittel er ment å markere ord og uttrykk som har spesielle betydninger i datavitenskap.Når du ser kjente ord, ikke anta at du vet hva de betyr!
før du gjør noe annet, finn ut hvordan du kompilerer Og kjører Et Java-program.Noen miljøer gir eksempelprogrammer som ligner på eksemplet I Avsnitt 1.3.
- Skriv Inn Hello World-programmet; deretter kompilere og kjøre det.
- Legg til en utskriftserklæring som viser En annen melding Etter Hello, World!.Si noe vittig som, Hvordan har du det?.Sett sammen og kjør programmet på nytt.
- Legg til en kommentar til programmet (hvor som helst), kompilere og kjør det igjen.Den nye kommentaren skal ikke påvirke resultatet.
denne øvelsen kan virke triviell, Men det er utgangspunktet for mange av programmene vi skal jobbe med with.To feilsøke med tillit, må du ha tillit til programmeringsmiljøet.
i enkelte miljøer er det lett å miste oversikten over hvilket program som kjøres.Du kan finne deg selv prøver å feilsøke ett program mens du ved et uhell kjører en annen.Legge til (og endre) print uttalelser er en enkel måte å være sikker på at programmet du ser på er programmet du kjører.
det er en god ide å begå så mange feil som du kan tenke på, slik at du ser hvilke feilmeldinger kompilatoren produserer.Noen ganger forteller kompilatoren deg nøyaktig hva som er galt, og alt du trenger å gjøre er å fikse det.Men noen ganger er feilmeldingene misvisende.Over tid vil du utvikle en følelse for når du kan stole på kompilatoren og når du må finne ut ting selv.
Start Med Hello World-programmet, prøv hver av følgende feil.Når du har gjort hver endring, kompilere programmet, lese feilmeldingen (hvis det er en), og deretter fikse feilen.
- Fjern en av de åpne klammeparentesene.
- Fjern en av de avsluttende klammeparentesene.
- i Stedet for
main
, skrivmian
. - Fjern ordet
static
. - Fjern ordet
public
. - Fjern ordet
System
. - Erstatt
println
medPrintln
. - Erstatt
println
medprint
. - Slett en parentes.
- Legg til en ekstra parentes.