I denne opplæringsserien blir du kjent med Java, programmeringsspråket som brukes til å utvikle Android-applikasjoner. Målet vårt er å forberede de som allerede er kjent med ett programmeringsspråk, for eksempel PHP eller Objective-C, for å bli komfortabel å jobbe med Java-programmeringsspråket og dykke inn i Android app-utvikling. I denne opplæringen får du en kort introduksjon til Java-grunnleggende, inkludert objektorientert programmering, arv og mer. Hvis du er ny til Java, eller bare ser for å børste opp detaljene, så er dette opplæringsserien for deg!
Så langt som forutsetninger går, skal vi anta at du forstår hvordan du programmerer (kanskje i PHP eller Visual Basic eller C ++), men at du ikke er kjent med programmene i Java-språket. Vi skal ikke lære deg å programmere; Vi skal gi deg klare eksempler på vanlige Java-språkkonstruksjoner og -prinsipper, mens du peker på noen Android-spesifikke tips og triks.
Teknisk trenger du ikke noe verktøy for å fullføre denne opplæringen, men du vil sikkert trenge dem til å utvikle Android-applikasjoner.
For å utvikle Android-applikasjoner (eller Java-programmer, for øvrig), trenger du et utviklingsmiljø for å skrive og bygge programmer. Eclipse er et svært populært utviklingsmiljø (IDE) for Java og den foretrukne IDE for Android-utvikling. Det er fritt tilgjengelig for Windows, Mac og Linux operativsystemer.
For fullstendige instruksjoner om hvordan du installerer Eclipse (inkludert hvilke versjoner som støttes) og Android SDK, se Android-utviklerens nettsted.
Android-applikasjoner utvikles ved hjelp av Java-språket. Fra nå av er det egentlig det eneste alternativet for innfødte applikasjoner. Java er et veldig populært programmeringsspråk utviklet av Sun Microsystems (nå eid av Oracle). Utviklet lenge etter C og C + +, inneholder Java mange av de kraftige funksjonene til de kraftige språkene, samtidig som de adresserer noen av sine ulemper. Likevel er programmeringsspråk bare like kraftige som deres biblioteker. Disse bibliotekene finnes for å hjelpe utviklere til å bygge applikasjoner.
Noen av Javas viktige kjernefunksjoner er:
Android er avhengig av disse Java-grunnleggende. Android SDK inneholder mange vanlige Java-biblioteker (datastrukturbiblioteker, mattebiblioteker, grafikkbiblioteker, nettverksbiblioteker og alt annet du kan ønske) samt spesielle Android-biblioteker som vil hjelpe deg med å utvikle fantastiske Android-applikasjoner.
Java er lett å lære av en rekke årsaker. Det er absolutt ingen mangel på Java-ressurser der ute for å hjelpe deg med å lære språket, inkludert nettsteder, opplæringsprogrammer, bøker og klasser. Java er en av de mest diskutert, undervist og brukt programmeringsspråk på planeten. Den brukes til mange forskjellige typer programmeringsprosjekter, uansett omfanget, fra webapplikasjoner til stasjonære applikasjoner til mobile applikasjoner.
Hvis du kommer fra en tradisjonell programmeringsbakgrunn som C eller C + +, finner du Java-syntaksen ganske like. Hvis du ikke er, så trøste du med at du har valgt et av de enkleste språkene du kan lære. Du vil være oppe i løpet av kort tid.
Endelig er Java et av de mest lesbare språkene der ute, som vi mener at en person som ikke vet noe om programmering, ofte kan se på noen Java-kode og ha minst en inkling som det gjør. Vurder følgende eksempel:
karakter = 'a'; hvis (tegn == 'a') doSomething (); annet doSomethingElse ();
Hvis du bare leser koden høyt, kan du ganske mye fortelle at dette kodestykket gjør. Det er en enkelt bokstav variabel som kalles karakter. Hvis tegnsvariabelen er lik bokstav a, gjør vi noe (kaller metoden doSomething ()), ellers gjør vi noe annet (ved å ringe metoden doSomethingElse ().
Med mange programmeringsspråk må du bruke en kompilator for å redusere koden din til maskinens språk som enheten kan forstå. Selv om dette er bra og bra, bruker forskjellige enheter forskjellige maskinsspråk. Dette betyr at du kanskje må kompilere programmene dine for hvert annet maskin- eller maskinsspråk - med andre ord, koden din er ikke veldig bærbar. Dette er ikke tilfelle med Java. Java-kompilatene konverterer koden fra menneskelige lesbare Java-kildefiler til noe som heter "bytecode" i Java-verdenen. Disse tolkes av en Java Virtual Machine, som fungerer mye som en fysisk CPU kan fungere på maskinkode, for å faktisk utføre den kompilerte koden. Selv om det kan virke som dette er ineffektivt, har det vært mye innsats for å gjøre denne prosessen svært rask og effektiv. Disse anstrengelsene har lønnet seg i at Java-ytelsen i generelt andre bare til C / C + + i fellesprestasjonssammenligninger.
Android-applikasjoner kjøres i en spesiell virtuell maskin kalt Dalvik VM. Mens detaljene i denne VM er ubetydelige for den gjennomsnittlige utvikleren, kan det være nyttig å tenke på Dalvik VM som en boble der Android-applikasjonen kjører, slik at du ikke trenger å bekymre deg for om enheten er en Motorola Droid, en HTC Evo, eller den nyeste brødristeren som kjører Android. Du bryr deg ikke så lenge enheten er Dalvik VM vennlig - og det er enhetsprodusentens jobb å implementere, ikke din.
La oss ta denne boble ideen litt lenger. Fordi Java-programmer kjører i boblen som er en virtuell maskin, er de isolert fra den underliggende enhetsmaskinen. Derfor kan en virtuell maskin inkapslere, inneholde og administrere kodekjøring på en sikker måte i forhold til språk som opererer i maskinkode direkte. Android-plattformen tar ting et skritt videre. Hver Android-applikasjon kjører på operativsystemet (Linux-basert) med en annen brukerkonto og i egen tilfelle av Dalvik VM. Android-applikasjoner overvåkes nøye av operativsystemet og slås av hvis de ikke leker fint (for eksempel bruk for mye prosessorkraft, ikke reagere, avfallsprodukter osv.). Derfor er det viktig å utvikle applikasjoner som er stabile og lydhør. Programmer kan kommunisere med hverandre ved hjelp av veldefinerte protokoller.
Som mange språk er Java fortsatt et kompilert språk, selv om det ikke kompilerer helt ned til maskinkoden. Dette betyr at du, utvikleren, må samle dine Android-prosjekter og pakke dem opp for å distribuere til enheter. Eclipse-utviklingsmiljøet (brukt med Android Development-plugin-modulen) gjør dette ganske smertefritt. I Eclipse blir automatisk kompilering ofte slått på som standard. Dette betyr at hver gang du lagrer en prosjektfil, kompilerer Eclipse endringene for programpakken. Du ser umiddelbart kompileringsfeil. Eclipse tolker også Java mens du skriver, og gir praktisk kodefarging og formatering, samt viser mange typer feil når du går. Ofte kan du klikke på feilen og få Eclipse til å fikse en skrivefeil automatisk, eller legge til en importoppgave, eller gi en metodestub for deg, slik at du sparer mye å skrive.
Du kan fremdeles manuelt kompilere koden din dersom du ønsker det. Innenfor Eclipse finner du Bygg innstillinger under prosjektmenyen. Hvis du har "Build Automatically" slått på, kan du fortsatt velge "Clean ..." -alternativet som lar deg gjøre fullstendig ombygging av alle filer. Hvis "Bygg automatisk" er slått av, er "Bygg alle" og "Bygg prosjekt" menyalternativer aktivert. "Build All" betyr å bygge alle prosjektene i arbeidsområdet. Du kan ha mange prosjekter i et Eclipse arbeidsområde.
Byggingsprosessen, for vanlige Java-prosjekter, resulterer i en fil med utvidelsen av JAR - Java ARgressløk. Android-applikasjoner tar JAR-filer og pakker dem for distribusjon på enheter som ENndroid PacKalder filer med en utvidelse .apk. Disse formatene inkluderer ikke bare din kompilerte Java-kode, men også andre ressurser, for eksempel strenger, bilder eller lydfiler, som søknaden din krever å kjøre, så vel som applikasjonsmanifestfilen, AndroidManifest.xml. Den Android Manifest-filen er en fil som kreves av alle Android-applikasjoner, som du bruker til å definere konfigurasjonsdetaljer om appen din.
Greit. Tid for en veldig kort og 20.000 fotvisning av objektorientert programmering (OOP). OOP er en programmeringsstil eller teknikk som bygger på definisjonen av datastrukturer kalt objekter. For de som er nye til OOP, kan en gjenstand bli tenkt på mye som en egendefinert datatype. For eksempel kan du ha et hundobjekt, som representerer tegningen for en generisk hund, med navn, rase og kjønn. Du kan da opprette forskjellige forekomster av Dog-objektet for å representere bestemte hunder. Hvert hundobjekt må opprettes ved å ringe det konstruktør (en metode som har samme navn som selve objektet, og kan eller ikke har parametere for innstilling av innledende verdier). For eksempel bruker de følgende hundobjektene en konstruktør med tre parametere (navn, rase, kjønn):
Hund hund1 = ny hund ("Lassie", collie, kvinne); Dog dog2 = ny hund ("Fifi", puddel, kvinne); Hundhund3 = Ny hund ("Asta", foxterrier, hann);
Så hvor er dette Hund-objektet definert? Vel, her må vi begynne å definere noen av de grunnleggende byggeblokkene til Java-programmeringsspråket. EN klasse gir en definisjon for et objekt. Derfor er det en Hundklass et sted - enten definert av deg eller i et eller annet bibliotek. Generelt sett vil en klasse bli definert i sin egen fil, med filnavnet som passer til klassenavnet (for eksempel Dog.java). Det er unntak fra denne regelen, for eksempel klasser som er definert i andre klasser (når en klasse er deklarert i en klasse, er den vanligvis definert for bruk i foreldreklassen bare som en hjelperklasse, og referert til som en indre klasse).
Når du vil referere et objekt fra en annen klasse, må du inkludere en import uttalelse i toppen av klassefilen din, vil du som en #include-setning i et kompilert språk som C.
En klasse beskriver vanligvis data og oppførsel av et objekt. Oppførselen defineres ved hjelp av klassen fremgangsmåter. Metode er det vanlige begrepet for en subrutine i et OOP-språk. Mange vanlige objektklasser er definert i deleklassebiblioteker som programvareutviklingssett (SDK), mens andre er definert av deg, utvikleren, til eget formål. Programvaren blir da bygget opp ved å bruke og manipulere objekts forekomster på forskjellige måter.
Vær klar over at dette er en veldig generalisert definisjon av OOP. Det er hele bøker skrevet om dette emnet. Hvis du vil vite mer om OOP, her er noen ressurser du kanskje vil sjekke ut:
Merk: Vi bruker mye annen terminologi i denne opplæringen. Det er flere måter å referere til et gitt konsept (for eksempel superklasse vs foreldre klasse), som er forvirrende for de nye til objektorientert programmering. Ulike utviklere bruker forskjellige vilkår, og vi har derfor forsøkt å nevne synonymer hvor det er hensiktsmessig. Bestemme hvilke vilkår du vil bruke er et personlig valg.
Her er en annen viktig Java-konseptet vil du gå inn i mye: arv. Enkelt sagt betyr arv at Java-klasser (og dermed objekter) kan organiseres i hierarkier med lavere, mer spesifikke, klasser i hierarkiet arve oppførsel og egenskaper fra høyere, mer generiske, klasser.
Dette konseptet er best illustrert ved eksempel. La oss late som vi utvikler et Java-program for å simulere et akvarium. Dette akvariet har noen fisk i den. Derfor kan vi definere en klasse for å representere en fisk. Denne klassen, kalt fisk, kan inneholde noen datafelt (også kalt attributter eller klassemedlemvariabler) for å beskrive en fiskeobjekt: arter, farge og størrelse; samt noen av dens oppførsel i form av metoder (også kalt subrutiner, eller funksjoner i prosesspråk), som å spise (), sove () og lageBabyFish ().
En spesiell type metode, kalt a konstruktør, brukes til å lage og initialisere et objekt; Konstruktører heter det samme som deres klasse og kan omfatte parametere. Den følgende fiskeklassen har to konstruktører: en for å lage et generisk fiskobjekt og et annet for å bygge et bestemt fiskobjekt med noen innledende data. Du vil også se at fiskeklassen har to spisemetoder: en for å spise noe tilfeldig, og en annen for å spise en annen fisk, som ville bli representert av en annen forekomst av fiskeklassen:
offentlig klasse Fisk private String mSpecies; privat streng mColor; privat int mize; Fisk () // generisk fisk mSpecies = "unknown"; mColor = "unknown"; mSize = 0; Fisk (Strengart, Stringfarge, Int størrelse) mSpecies = species; mColor = farge; mSize = størrelse; offentlig tomrom spise () // spise noen alger; Offentlig tomt spise (Fish fishToEat) // spis en annen fisk! ; offentlig ugyldig søvn () // sleep; Offentlig tomgang makeBabyFish (Fish fishSpouse, int numBabies) // Gjør numBabies verdt av babyfisk med Fisk ektefelle;
Klasser kan organiseres i hierarkier, hvor a avledet klasse (eller underklasse) inneholder alle funksjonene i sin foreldre klasse (eller super), men forandrer og legger til dem for å definere et mer spesifikt objekt ved hjelp av utvidet søkeord. Dette kalles arv.
For eksempel kan fiskeklassen ha to underklasser: FreshwaterFish og SaltwaterFish. Disse underklassene vil ha alle funksjonene i fiskeklassen, men kunne tilpasse gjenstandene videre gjennom nye attributter og atferd eller endrede oppføringer fra foreldreklassen Fish. For eksempel kan FreshwaterFish-klassen inneholde informasjon om typen ferskvannsmiljø som ligger i (f.eks. Elv, innsjø, dam eller pølse). På samme måte kan SaltwaterFish-klassen tilpasse makeBabyFish () -metoden slik at fisken spiser sin kompis etter avl (som definert i superklassen) ved å bruke overstyringsmekanismen, slik:
offentlig klasse SaltwaterFish utvider fisk @Override public void makeBabyFish (Fish fishSpouse, int numBabies) // ring foreldre metode super.makeBabyFish (fishSpouse, numBabies); // spise kompis spise (fishSpouse);
I Java kan du organisere objektets oppførsel i det som kalles grensesnitt. Mens en klasse definerer et objekt, definerer et grensesnitt noen oppførsel som kan brukes på en gjenstand. For eksempel kan vi definere et svømmergrensesnitt som gir et sett med metoder som er vanlige på tvers av alle objekter som kan svømme, enten de er fisk, oter eller nedsenkbare androider. Svømmergrensesnittet kan spesifisere fire metoder: startSwimming (), stopSwimming (), dykk () og overflate ().
offentlig grensesnitt svømmer void startSwimming (); void stopSwimming (); ugyldig dykk (); tomrom overflate ();
En klasse som fisk kan da implementere svømmergrensesnittet (ved hjelp av redskapsordet) og gi implementeringer av svømningsadferansen:
offentlig klasse Fisk redskaper svømmer // Gi implementeringer av de fire metodene i svømmergrensesnittet
Klassehierarkier, for eksempel våre fiskeklasser, kan da bli organisert inn i pakker. En pakke er ganske enkelt et sett med klasser og grensesnitt, samlet sammen. Utviklere bruker navneområder til unikt navnepakker. For eksempel kan vi bruke com.mamlambo.aquarium eller com.ourclient.project.subproject som vårt pakkenavn for å holde oversikt over våre fiskrelaterte klasser.
Wow! Du har nettopp startet et krasj-kurs i Java for Android-utvikling. Vi har dekket en ganske stor mengde materiale her, så la ting avgjøre litt før du går videre til neste leksjon i denne opplæringsserien. I Leksjon 2 skifter vi vårt fokus til de nitty-gritty detaljene i Java syntaks.
Du har bare riper overflaten av Java-utvikling for Android-utvikling. Sjekk ut alle de andre gode opplæringene på Mobiletuts + for å dykke dypere inn i Java og Android utvikling. Lykke til!
Mobilutviklere Lauren Darcey og Shane Conder har medforfatter flere bøker om Android-utvikling: en grundig programmeringsbok med tittel Android Wireless Application Development og Sams TeachYourself Android Application Development i 24 timer. Når de ikke skriver, bruker de sin tid på å utvikle mobil programvare hos deres firma og tilby konsulenttjenester. De kan nås via e-post til [email protected], via bloggen deres på androidbook.blogspot.com, og på Twitter @androidwireless.
Hvis du vil komme i gang med Android-utvikling, er en Android-appmaler et flott sted å starte. Sjekk utvalget på Envato Market - eller du kan se nærmere på Java-elementer.
Android appmaler på Envato MarketDu kan også finne Android-utviklere på Envato Studio for å hjelpe deg med alt fra brukergrensesnittdesign til å lage en innfødt Android-app.
Android-utviklere på Envato Studio