I den här tutorialserien kommer du att bli bekant med Java, det programmeringsspråk som används för att utveckla Android-applikationer. Vårt mål är att förbereda dem som redan är bekanta med ett programmeringsspråk, till exempel PHP eller Objective-C, för att bli bekväm med att arbeta med Java-programmeringsspråket och dyka in i Android-apputveckling. I den här handledningen får du en kort introduktion till Java-fundament, inklusive objektorienterad programmering, arv och mer. Om du är ny på Java, eller bara tittar på att borsta på detaljerna, så är det här handledningsserien för dig!
När det gäller förutsättningar går vi att anta att du förstår hur du programmerar (kanske i PHP eller Visual Basic eller C ++), men att du inte är känd med programmeringsspecifikationen i Java-språket. Vi kommer inte att lära dig att programmera; Vi kommer att ge dig tydliga exempel på vanliga Java-språkkonstruktioner och -principer, samtidigt som du pekar på några Android-specifika tips och tricks.
Tekniskt behöver du inga verktyg för att slutföra denna handledning, men du kommer säkert att behöva dem för att utveckla Android-applikationer.
För att utveckla Android-applikationer (eller Java-program, för den delen) behöver du en utvecklingsmiljö för att skriva och bygga applikationer. Eclipse är en mycket populär utvecklingsmiljö (IDE) för Java och den föredragna IDE för Android utveckling. Det är fritt tillgängligt för Windows, Mac och Linux operativsystem.
För fullständiga instruktioner om hur du installerar Eclipse (inklusive vilka versioner som stöds) och Android SDK, se webbplatsen för Android-utvecklaren.
Android-applikationer utvecklas med hjälp av Java-språket. Från och med nu är det verkligen ditt enda alternativ för inhemska applikationer. Java är ett mycket populärt programmeringsspråk som utvecklats av Sun Microsystems (nu ägs av Oracle). Utvecklat långt efter C och C ++ innehåller Java många av de kraftfulla funktionerna hos de kraftfulla språken samtidigt som de hanterar några av sina nackdelar. Ändå är programmeringsspråk bara lika kraftfulla som deras bibliotek. Dessa bibliotek finns för att hjälpa utvecklare att bygga applikationer.
Några av Java: s viktiga kärnfunktioner är:
Android är starkt beroende av dessa Java-fundament. Android SDK innehåller många vanliga Java-bibliotek (datastrukturbibliotek, matbibliotek, grafikbibliotek, nätverksbibliotek och allt du kan önska) samt speciella Android-bibliotek som hjälper dig att utveckla fantastiska Android-applikationer.
Java är lätt att lära av olika orsaker. Det finns verkligen ingen brist på Java-resurser där ute för att hjälpa dig att lära dig språket, inklusive webbplatser, handledning, böcker och klasser. Java är en av de mest diskuterade, undervisade och används programmeringsspråk på planeten. Den används för många olika typer av programprojekt, oavsett storlek, från webbapplikationer till stationära applikationer till mobila applikationer.
Om du kommer från en traditionell programmeringsbakgrund som C eller C ++ hittar du Java-syntaxen ganska lika. Om du inte är så ta det lugnt med att du vet att du har valt ett av de enklaste språken att lära dig. Du kommer att vara igång på nolltid alls.
Slutligen är Java ett av de mest mänskliga läsbara språken där ute, vilket innebär att en person som inte vet något om programmering ofta kan titta på någon Java-kod och åtminstone ha en blinkande vad den gör. Tänk på följande exempel:
karaktär = 'a'; om (tecken == 'a') doSomething (); annat doSomethingElse ();
Om du bara läser koden högt kan du ganska mycket säga att det här koden är kodad. Det finns en bokstav variabel som heter karaktär. Om teckenvariabeln är lika med bokstaven a, gör vi något (kallar metoden doSomething ()), annars gör vi något annat (genom att ringa metoden doSomethingElse ().
Med många programmeringsspråk måste du använda en kompilator för att minska din kod till maskinens språk som enheten kan förstå. Även om detta är bra och bra, använder olika enheter olika maskinspråk. Det innebär att du kanske behöver kompilera dina applikationer för varje enskilt apparat eller maskin språk - med andra ord, din kod är inte särskilt portabel. Detta är inte fallet med Java. Java-kompilatorn konverterar din kod från mänskliga läsbara Java-källfiler till något som heter "bytecode" i Java-världen. Dessa tolkas av en Java Virtual Machine, som fungerar som en fysisk CPU kan fungera på maskinkod, för att faktiskt utföra den sammanställda koden. Även om det verkar som om detta är ineffektivt har mycket ansträngning gjorts för att göra denna process väldigt snabb och effektiv. Dessa ansträngningar har betalat ut i det Java-resultatet i allmänhet andra endast till C / C ++ i gemensamma språkprestanda jämförelser.
Android-applikationer körs i en speciell virtuell maskin som heter Dalvik VM. Medan detaljerna i denna VM är oväsentliga för den genomsnittliga utvecklaren kan det vara till hjälp att tänka på Dalvik VM som en bubbla där din Android-applikation körs, så att du inte behöver oroa dig för om enheten är en Motorola Droid, en HTC Evo, eller den senaste brödrosten som kör Android. Du bryr dig inte så länge enheten är Dalvik VM vänlig - och det är enhetstillverkarens jobb att implementera, inte din.
Låt oss ta den här bubbelidén lite längre. Eftersom Java-program körs inom bubblan som är en virtuell maskin, isoleras de från den bakomliggande maskinvaran. Därför kan en virtuell maskin inkapsla, innehålla och hantera kodkörning på ett säkert sätt jämfört med språk som fungerar direkt i maskinkod. Android-plattformen tar saker ett steg längre. Varje Android-applikation körs på operativsystemet Linux (Linux-baserat) med ett annat användarkonto och i eget fall av Dalvik VM. Android-applikationer övervakas noggrant av operativsystemet och stängs av om de inte spelar bra (t.ex. använd för mycket bearbetningseffekt, svara inte, avfallshantering etc.). Därför är det viktigt att utveckla applikationer som är stabila och lyhörda. Applikationer kan kommunicera med varandra med hjälp av väldefinierade protokoll.
Liksom många språk är Java fortfarande ett kompilerat språk även om det inte kompilerar hela vägen ner till maskinkoden. Det innebär att du, utvecklaren, behöver kompilera dina Android-projekt och paketera dem för att distribuera på enheter. Eclipse-utvecklingsmiljön (som används med Android Development-plugin-modulen) gör det här ganska smärtfritt. I Eclipse aktiveras automatisk kompilering som standard. Det innebär att varje gång du sparar en projektfil, återställer Eclipse ändringarna i ditt applikationspaket. Du ser omedelbart kompileringsfel. Eclipse tolkar också Java när du skriver, vilket ger praktisk kodfärgning och formatering samt visar många typer av fel när du går. Ofta kan du klicka på felet och få Eclipse automatiskt att fixa ett typsnitt, eller lägga till ett importdeklaration eller ge en metodstub för dig, spara mycket skrivning.
Du kan fortfarande manuellt sammanställa din kod om du vill. Inom Eclipse hittar du Bygg-inställningarna under projektmenyn. Om du har "Bygg automatiskt" aktiverat kan du fortfarande välja alternativet "Rensa ..." som gör att du kan göra fullständig ombyggnad av alla filer. Om "Bygg automatiskt" är avstängt, är "Bygg alla" och "Byggprojekt" menyalternativ aktiverade. "Build All" betyder att bygga alla projekt i arbetsytan. Du kan ha många projekt i en Eclipse-arbetsyta.
Byggprocessen, för vanliga Java-projekt, resulterar i en fil med förlängningen av JAR - Java ARgräslök. Android-applikationer tar JAR-filer och paketar dem för distribuering på enheter som enndroid PväxelströmKåldersfiler med en förlängning .apk. Dessa format innehåller inte bara din kompilerade Java-kod, men också andra resurser, t.ex. strängar, bilder eller ljudfiler, som din ansökan kräver för att köra såväl som applikationsmanifestfilen, AndroidManifest.xml. Den Android Manifest-filen är en fil som krävs av alla Android-program, som du använder för att definiera konfigurationsinformation om din app.
Okej. Tid för en mycket kort och 20.000 fotvy av objektorienterad programmering (OOP). OOP är en programmeringsstil eller teknik som bygger på definitionen av datastrukturer som heter objekt. För de som är nya för OOP kan ett objekt anses vara ungefär som en anpassad datatyp. Du kan till exempel ha ett hundobjekt som representerar en plan för en generisk hund med namn, ras och kön. Du kan då skapa olika föremål av hundobjektet för att representera specifika hundar. Varje hundobjekt måste skapas genom att ringa det konstruktör (en metod som har samma namn som själva objektet, och kan eller inte har parametrar för inställning av initialvärden). Till exempel använder följande hundobjekt en konstruktör med tre parametrar (namn, ras, kön):
Hundhund1 = ny hund ("Lassie", collie, kvinnlig); Hundhund2 = Ny hund ("Fifi", puddel, kvinnlig); Hundhund3 = Ny hund ("Asta", foxterrier, manlig);
Så var definieras det här hundobjektet? Tja, här måste vi börja definiera några av de grundläggande byggstenarna i Java-programmeringsspråket. en klass ger en definition för ett objekt. Därför finns det en hundklass någonstans, antingen definierad av dig eller i något bibliotek någonstans. I allmänhet definieras en klass i sin egen fil, med filnamnet som matchar klassnamnet (t.ex. Dog.java). Det finns undantag från denna regel, till exempel klasser som definieras i andra klasser (när en klass förklaras inom en klass, definieras den i allmänhet endast för användning i moderklassen som en hjälparklass och kallas en inre klassen).
När du vill referera till ett objekt från en annan klass måste du inkludera en import uttalande i toppen av din klassfil, skulle du som en #include uttala i ett sammanställt språk som C.
En klass beskriver typiskt data och beteende hos ett objekt. Beteendet definieras med hjälp av klassen metoder. Metod är den gemensamma termen för en subrutin i ett OOP-språk. Många vanliga objektklasser definieras i delade klassbibliotek som programvaruutvecklingspaket (SDK), medan andra definieras av dig, utvecklaren, för dina egna ändamål. Programvaran byggs sedan upp genom att använda och manipulera objektinstanser på olika sätt.
Observera att det här är en mycket generaliserad definition av OOP. Det finns hela böcker om detta ämne. Om du vill veta mer om OOP, här är några resurser du kanske vill kolla in:
Obs! Vi använder en mängd olika terminologier i denna handledning. Det finns flera sätt att hänvisa till ett visst koncept (t.ex. superklass vs föräldraklass), vilket är förvirrande för de nya objektorienterade programmeringen. Olika utvecklare använder olika termer, och så har vi försökt att nämna synonymer där så är lämpligt. Att bestämma vilka villkor du ska använda är ett personligt val.
Här är en annan viktig Java-konceptet kommer att leda till mycket: arv. Enkelt uttryckt betyder arv att Java-klasser (och därmed objekt) kan organiseras i hierarkier med lägre, mer specifika, klasser i hierarkin ärva beteende och egenskaper från högre, mer generiska, klasser.
Detta koncept illustreras bäst av exempel. Låt oss låtsas att vi utvecklar en Java-applikation för att simulera ett akvarium. Detta akvarium har lite fisk i den. Därför kan vi definiera en klass för att representera en fisk. Denna klass, som kallas Fish, kan innehålla vissa datafält (även kallade attribut eller klassmedlemsvariabler) för att beskriva ett fiskobjekt: art, färg och storlek; liksom en del av sitt beteende i form av metoder (kallas även subrutiner eller funktioner i processuella språk), som att äta (), sova () och göraBabyFish ().
En särskild typ av metod, kallad a konstruktör, används för att skapa och initiera ett objekt konstruktörer heter samma som deras klass och kan innehålla parametrar. Följande fiskklass har två konstruktörer: en för att skapa ett generiskt fiskobjekt och ett annat för att bygga ett visst fiskobjekt med några initiala data. Du kommer också att se att fiskklassen har två äter () metoder: en för att äta något slumpmässigt och en annan för att äta en annan fisk, som skulle representeras av en annan instans av fiskklassen:
offentlig klass fisk privat sträng mSpecies; privat sträng mColor; privat int msize; Fisk () // generisk fisk mSpecies = "unknown"; mColor = "unknown"; mSize = 0; Fisk (Strängart, Strängfärg, Int storlek) mSpecies = species; mColor = färg; mSize = storlek; offentligt tomrum äta () // äta några alger; Offentligt tomrum äta (Fish fishToEat) // Ät en annan fisk! ; allmän tomrumssömn () // sov; public void makeBabyFish (Fish fishSpouse, int numBabies) // Gör numBabies värt av baby fisk med Fisk maka;
Klasser kan organiseras i hierarkier, där a härledd klass (eller underklass) innehåller alla funktioner i sin föräldraklass (eller superklass), men förädlar och lägger till dem för att definiera ett mer specifikt objekt med det utvidgade sökordet. Detta kallas arv.
Fiskklassen kan till exempel ha två underklasser: FreshwaterFish och SaltwaterFish. Dessa underklasser skulle ha alla funktioner i fiskklassen, men skulle kunna anpassa objekten ytterligare genom nya attribut och beteenden eller modifierade beteenden från moderklassen Fish. FreshwaterFish-klassen kan till exempel innehålla information om vilken typ av sötvattenmiljö som finns i (t ex flod, sjö, damm eller pöl). På samma sätt kan SaltwaterFish-klassen anpassa metoden MakeBabyFish () så att fisken äter sin kompis efter uppfödning (enligt definitionen i superklassen) genom att använda överstyrningsmekanismen, så här:
offentlig klass SaltwaterFish utökar fisk @Override public void makeBabyFish (Fish fishSpouse, int numBabies) // call parent method super.makeBabyFish (fishSpouse, numBabies); // äta kompis äta (fishSpouse);
I Java kan du organisera objektbeteenden i vad som kallas gränssnitt. Medan en klass definierar ett objekt definierar ett gränssnitt ett beteende som kan tillämpas på ett objekt. Till exempel kan vi definiera ett Swimmer-gränssnitt som tillhandahåller en uppsättning metoder som är gemensamma för alla objekt som kan simma, oavsett om de är fiskar, otters eller submergable androids. Swimmer-gränssnittet kan ange fyra metoder: startSwimming (), stopSwimming (), dyka () och yta ().
offentligt gränssnitt simmare void startSwimming (); void stopSwimming (); tomrum (); tomrumsytan ();
En klass som fisk kan sedan implementera Swimmer-gränssnittet (med hjälp av redskapets sökord) och tillhandahålla implementeringar av simbadbeteendet:
offentliga klassen Fiskredskap Simmaren // Tillhandahåll implementeringar av de fyra metoderna inom gränssnittet för simmaren
Klasshierarkier, som våra fiskklasser, kan sedan organiseras i paket. Ett paket är helt enkelt en uppsättning klasser och gränssnitt, buntade ihop. Utvecklare använder namnområden för att namnge paket. Till exempel kan vi använda com.mamlambo.aquarium eller com.ourclient.project.subproject som vårt paketnamn för att hålla koll på våra fiskrelaterade klasser.
Wow! Du har precis börjat på en krasch-kurs i Java för Android utveckling. Vi har täckt en ganska intensiv mängd material här, så låt sakerna bosätta sig lite innan vi går vidare till nästa lektion i denna handledningsserie. I lektion 2 byter vi vårt fokus till de nitty-gritty detaljerna i Java syntax.
Du har bara repat ytan på Java-utveckling för Android-utveckling. Kolla in alla andra bra handledning på Mobiletuts + för att dyka djupare in i Java och Android utveckling. Lycka till!
Mobila utvecklare Lauren Darcey och Shane Conder har medverkat flera böcker om Android-utveckling: en fördjupad programmeringsbok med titeln Android Wireless Application Development och Sams TeachYourself Android Application Development inom 24 timmar. När de inte skriver, spenderar de sin tid på att utveckla mobil mjukvara hos sina företag och tillhandahålla konsulttjänster. De kan nås via e-post till [email protected], via deras blogg på androidbook.blogspot.com, och på Twitter @ androidwireless.
Om du vill komma igång med Android-utveckling är en Android-appmall ett bra ställe att börja. Kolla in valet på Envato Market-eller du kan titta mer specifikt på Java-objekt.
Android app mallar på Envato MarketDu kan också hitta Android-utvecklare på Envato Studio för att hjälpa dig med allt från UI-design för att skapa en inbyggd Android-app.
Android-utvecklare på Envato Studio