In deze tutorialserie leert u Java kennen, de programmeertaal die wordt gebruikt om Android-applicaties te ontwikkelen. Ons doel is om degenen die al bekend zijn met één programmeertaal, zoals PHP of Objective-C, voor te bereiden op het comfortabel werken met de Java-programmeertaal en een duik nemen in de ontwikkeling van Android-apps. In deze tutorial krijgt u een korte introductie tot Java-fundamentals, waaronder objectgeoriënteerd programmeren, overerving en meer. Als je nieuw bent bij Java, of als je alleen maar de details wilt opfrissen, dan is dit de tutorialserie voor jou!
Voor zover de vereisten gaan, gaan we ervan uit dat je begrijpt hoe je moet programmeren (misschien in PHP of Visual Basic of C ++), maar dat je niet bekend bent met de details van programmeren in de Java-taal. We gaan je niet leren programmeren; we gaan u voorzien van duidelijke voorbeelden van veelgebruikte constructies en principes van de Java-taal, terwijl we u wijzen op enkele Android-specifieke tips en trucs.
Technisch gezien heb je geen tools nodig om deze tutorial te voltooien, maar je zult ze zeker nodig hebben om Android-applicaties te ontwikkelen.
Om Android-applicaties (of welke Java-applicaties dan ook) te ontwikkelen, hebt u een ontwikkelomgeving nodig om applicaties te schrijven en te bouwen. Eclipse is een zeer populaire ontwikkelomgeving (IDE) voor Java en de geprefereerde IDE voor Android-ontwikkeling. Het is gratis beschikbaar voor Windows-, Mac- en Linux-besturingssystemen.
Zie de Android-ontwikkelaarswebsite voor volledige instructies over het installeren van Eclipse (inclusief welke versies worden ondersteund) en de Android SDK.
Android-applicaties worden ontwikkeld met behulp van de Java-taal. Vanaf nu is dat echt jouw enige optie voor native applicaties. Java is een zeer populaire programmeertaal die is ontwikkeld door Sun Microsystems (nu eigendom van Oracle). Ontwikkeld lang na C en C ++, incorporeert Java veel van de krachtige functies van die krachtige talen terwijl ze enkele van hun nadelen aanpakken. Toch zijn programmeertalen net zo krachtig als hun bibliotheken. Deze bibliotheken bestaan om ontwikkelaars te helpen bij het bouwen van applicaties.
Enkele van de belangrijkste kernfuncties van Java zijn:
Android vertrouwt zwaar op deze Java-fundamentals. De Android SDK bevat veel standaard Java-bibliotheken (datastructuurbibliotheken, wiskundebibliotheken, grafische bibliotheken, netwerkbibliotheken en alles wat u maar wilt) en speciale Android-bibliotheken die u helpen geweldige Android-applicaties te ontwikkelen.
Java is om verschillende redenen gemakkelijk te leren. Er is zeker geen tekort aan Java-bronnen om u te helpen de taal te leren, inclusief websites, zelfstudies, boeken en lessen. Java is een van de meest besproken, onderwezen en gebruikte programmeertalen op de planeet. Het wordt gebruikt voor veel verschillende soorten programmeerprojecten, ongeacht hun schaal, van webtoepassingen tot desktoptoepassingen en mobiele toepassingen.
Als u afkomstig bent van een traditionele programmeerachtergrond zoals C of C ++, vindt u de Java-syntaxis redelijk vergelijkbaar. Als je dat niet bent, neem dan gerust het gevoel dat je een van de gemakkelijkste talen hebt gekozen om te leren. U bent in een mum van tijd helemaal klaar voor de start.
Ten slotte is Java een van de meest menselijk-leesbare talen die er zijn, waarmee we bedoelen dat iemand die niets weet van programmeren vaak naar een bepaalde Java-code kan kijken en op zijn minst een idee heeft van wat het doet. Bekijk het volgende voorbeeld:
char character = 'a'; if (character == 'a') doSomething (); else doSomethingElse ();
Als je de code eenvoudig voorleest, kun je vrijwel zeggen dat dit codefragment het doet. Er is een variabele met één letter genaamd karakter. Als de tekenvariabele gelijk is aan de letter a, doen we iets (de methode doSomething () aanroepen), anders doen we iets anders (door de methode doSomethingElse () aan te roepen).
Bij veel programmeertalen moet u een compiler gebruiken om uw code terug te brengen in machinetaal die het apparaat kan begrijpen. Hoewel dit goed en wel is, gebruiken verschillende apparaten verschillende machinetalen. Dit betekent dat u mogelijk uw applicaties voor elk apparaat of elke machinetaal moet compileren, met andere woorden, uw code is niet erg draagbaar. Dit is niet het geval met Java. De Java-compilers converteren uw code van menselijk leesbare Java-bronbestanden naar iets dat "bytecode" wordt genoemd in de Java-wereld. Deze worden geïnterpreteerd door een Java Virtual Machine, die net als een fysieke CPU werkt op machinecode, om de gecompileerde code daadwerkelijk uit te voeren. Hoewel het lijkt alsof dit inefficiënt is, is er veel moeite gedaan om dit proces zeer snel en efficiënt te maken. Deze inspanningen hebben hun vruchten afgeworpen in die Java-prestaties in het algemeen op de tweede plaats na C / C ++ in vergelijkingen van gemeenschappelijke taalprestaties.
Android-applicaties draaien op een speciale virtuele machine genaamd de Dalvik VM. Hoewel de details van deze VM onbelangrijk zijn voor de gemiddelde ontwikkelaar, kan het handig zijn om de Dalvik VM te beschouwen als een bubbel waarin uw Android-toepassing wordt uitgevoerd, zodat u zich geen zorgen hoeft te maken of het apparaat een Motorola Droid is, of een HTC Evo, of de nieuwste broodrooster met Android. Het maakt je niet uit zolang het apparaat Dalvik VM-vriendelijk is - en dat is de taak van de fabrikant van het apparaat die moet worden geïmplementeerd, niet de jouwe.
Laten we dit bubbelidee een beetje verder nemen. Omdat Java-toepassingen binnen de bubbel worden uitgevoerd als een virtuele machine, worden ze geïsoleerd van de onderliggende apparaathardware. Daarom kan een virtuele machine code-uitvoering op een veilige manier inkapselen, bevatten en beheren in vergelijking met talen die direct in machinecode werken. Het Android-platform gaat een stap verder. Elke Android-applicatie draait op het (op Linux gebaseerde) besturingssysteem met een ander gebruikersaccount en in zijn eigen exemplaar van de Dalvik VM. Android-applicaties worden nauwlettend gecontroleerd door het besturingssysteem en afgesloten als ze niet leuk spelen (gebruik bijvoorbeeld te veel verwerkingskracht, worden niet meer reageert, afvalbronnen, enz.). Daarom is het belangrijk om applicaties te ontwikkelen die stabiel en responsief zijn. Toepassingen kunnen met elkaar communiceren met behulp van goed gedefinieerde protocollen.
Net als veel andere talen is Java nog steeds een gecompileerde taal, ook al compileert het niet helemaal naar machinecode. Dit betekent dat u, de ontwikkelaar, uw Android-projecten moet compileren en verpakken om ze op apparaten te implementeren. De Eclipse-ontwikkelomgeving (gebruikt met de Android Development plug-in) maakt dit vrij pijnloos. In Eclipse is automatische compilatie vaak standaard ingeschakeld. Dit betekent dat telkens wanneer u een projectbestand opslaat, Eclipse de wijzigingen voor uw toepassingspakket opnieuw compileert. U ziet meteen compileerfouten. Eclipse interpreteert Java ook tijdens het typen, biedt handige codekleuring en -formattering en laat tegelijkertijd vele soorten fouten zien. Vaak kun je op de fout klikken en Eclipse een typefout automatisch laten corrigeren, of een importinstructie toevoegen, of een methode-naschaf voor je leveren, waardoor veel typen wordt bespaard.
U kunt uw code nog steeds handmatig compileren als u dat wilt. Binnen Eclipse vind je de Build-instellingen onder het projectmenu. Als u "Automatisch bouwen" hebt ingeschakeld, kunt u nog steeds de optie "Opschonen ..." kiezen waarmee u alle bestanden volledig opnieuw kunt opbouwen. Als "Automatisch bouwen" is uitgeschakeld, zijn de menu-opties "Alle bouwen" en "Project bouwen" ingeschakeld. "Alles bouwen" betekent dat alle projecten in de werkruimte worden gebouwd. Je kunt veel projecten hebben in een Eclipse-werkruimte.
Het bouwproces, voor reguliere Java-projecten, resulteert in een bestand met de extensie JAR - Java ARbieslook. Android-applicaties nemen JAR-bestanden en verpakken ze voor implementatie op apparaten als EENndroid PacKleeftijdsbestanden met extensie .apk. Deze indelingen omvatten niet alleen uw gecompileerde Java-code, maar ook andere bronnen, zoals tekenreeksen, afbeeldingen of geluidsbestanden, die uw toepassing vereist om te worden uitgevoerd, evenals het Application Manifest-bestand, AndroidManifest.xml. Het Android Manifest-bestand is een bestand dat is vereist voor alle Android-apps, die u gebruikt om configuratiedetails over uw app te definiëren.
Oke. Tijd voor een zeer korte en 20.000 voet weergave van object georiënteerd programmeren (OOP). OOP is een programmeerstijl of -techniek die steunt op de definitie van gegevensstructuren die objecten worden genoemd. Voor degenen die nieuw zijn bij OOP, kan een object worden beschouwd als een aangepast gegevenstype. U kunt bijvoorbeeld een object Dog hebben, dat de blauwdruk voor een generieke hond vertegenwoordigt, met een naam, ras en geslacht. U kunt vervolgens verschillende exemplaren van het object Dog maken om specifieke honden te vertegenwoordigen. Elk Dog-object moet worden gemaakt door het te bellen bouwer (een methode met dezelfde naam als het object zelf en kan al dan niet parameters hebben voor het instellen van beginwaarden). De volgende Dog-objecten gebruiken bijvoorbeeld een constructor met drie parameters (naam, ras, geslacht):
Hondenhond1 = nieuwe hond ("Lassie", collie, vrouw); Hondenhond2 = nieuwe hond ("Fifi", poedel, vrouw); Hondenhond3 = nieuwe hond ("Asta", foxterrier, mannetje);
Dus waar is dit Dog-object gedefinieerd? Welnu, hier moeten we beginnen met het definiëren van enkele van de fundamentele bouwstenen van de programmeertaal Java. EEN klasse geeft een definitie voor een object. Daarom is er ergens een hondenklasse - ofwel door jou bepaald of ergens in een bibliotheek. Over het algemeen wordt een klasse gedefinieerd in zijn eigen bestand, met de bestandsnaam die overeenkomt met de klassenaam (bijvoorbeeld Dog.java). Er zijn uitzonderingen op deze regel, zoals klassen die in andere klassen zijn gedefinieerd (wanneer een klasse binnen een klasse wordt gedeclareerd, wordt deze over het algemeen alleen in de bovenliggende klasse gedefinieerd als een helperklasse, en wordt deze een innerlijke klasse).
Wanneer u naar een object wilt verwijzen vanuit een andere klasse, moet u een import verklaring in de top van uw klassenbestand, net zoals u een # include-instructie zou gebruiken in een gecompileerde taal als C.
Een klasse beschrijft meestal de gegevens en het gedrag van een object. Het gedrag wordt gedefinieerd met behulp van klasse methoden. Methode is de gebruikelijke term voor een subroutine in een OOP-taal. Veel algemene objectklassen worden gedefinieerd in gedeelde klassenbibliotheken, zoals software development kits (SDK's), terwijl andere door u, de ontwikkelaar, voor uw eigen doeleinden worden gedefinieerd. Software wordt vervolgens opgebouwd door objectexemplaren op verschillende manieren te gebruiken en te manipuleren.
Realiseer u alstublieft dat dit een zeer algemene definitie van OOP is. Er zijn hele boeken over dit onderwerp geschreven. Als u meer wilt weten over OOP, volgen hier enkele bronnen die u wellicht wilt bekijken:
Opmerking: we gebruiken veel verschillende terminologie in deze zelfstudie. Er zijn meerdere manieren om naar een bepaald concept te verwijzen (bijvoorbeeld superklasse versus ouderklasse), wat verwarrend is voor nieuw concept voor objectgeoriënteerd programmeren. Verschillende ontwikkelaars gebruiken verschillende termen en daarom hebben we geprobeerd waar mogelijk synoniemen te vermelden. Bepalen welke termen je gaat gebruiken, is een persoonlijke keuze.
Hier is nog een belangrijk punt Java-concept waar je veel tegenkomt: erfenis. Eenvoudig gezegd betekent overerving dat Java-klassen (en dus objecten) kunnen worden georganiseerd in hiërarchieën met lagere, specifiekere klassen in de hiërarchie erven gedrag en eigenschappen van hogere, meer generieke klassen.
Dit concept wordt het best geïllustreerd door het voorbeeld. Laten we doen alsof we een Java-toepassing ontwikkelen om een aquarium te simuleren. Dit aquarium heeft wat vis erin. Daarom kunnen we een klasse definiëren om een vis te vertegenwoordigen. Deze klasse, genaamd Fish, kan enkele gegevensvelden bevatten (ook wel attributen of variabelen van klassenleden genoemd) om een visobject te beschrijven: soort, kleur en grootte; evenals een deel van zijn gedrag in de vorm van methoden (ook wel subroutines genoemd, of functies in procedurele talen), zoals eat (), sleep () en makeBabyFish ().
Een speciaal type methode, genaamd a bouwer, wordt gebruikt om een object te maken en te initialiseren; constructors hebben dezelfde naam als hun klasse en kunnen parameters bevatten. De volgende Fish-klasse heeft twee constructors: één voor het maken van een generiek Fish-object en een andere voor het construeren van een specifiek Fish-object met enkele initiële gegevens. Je zult ook zien dat de Fish-klasse twee eet () -methoden heeft: een voor het eten van iets willekeurigs, en een andere voor het eten van een andere vis, die zou worden vertegenwoordigd door een ander exemplaar van de klasse Fish:
public class Fish private String mSpecies; private String mColor; privé int mSize; Fish () // generic fish mSpecies = "onbekend"; mColor = "onbekend"; mSize = 0; Vis (String soorten, String kleur, int grootte) mSpecies = soort; mColor = kleur; mSize = maat; openbare leegte eten () // eet wat algen; public void eat (Fish fishToEat) // eet nog een vis! ; openbare nietige slaap () // slaap; openbare leegte makeBabyFish (Fish fishSpouse, int numBabies) // Maak numBabies ter waarde van babyvissen met Fish-echtgenoot;
Klassen kunnen worden georganiseerd in hiërarchieën, waarbij een afgeleide klasse (of subklasse) bevat alle functies van zijn ouderklasse (of superklasse), maar verfijnt en voegt eraan toe om een meer specifiek object te definiëren met behulp van het trefwoord extends. Dit wordt overerving genoemd.
De klasse Fish kan bijvoorbeeld twee subklassen hebben: FreshwaterFish en SaltwaterFish. Deze subklassen zouden alle kenmerken van de klasse Fish hebben, maar zouden de objecten verder kunnen aanpassen aan nieuwe kenmerken en gedragingen of aan aangepast gedrag van de bovenliggende klasse Fish. De klasse FreshwaterFish kan bijvoorbeeld informatie bevatten over het type zoetwatermilieu dat wordt bewoond (bijvoorbeeld rivier, meer, vijver of plas). Evenzo kan de klasse SaltwaterFish de makeBabyFish () -methode zodanig aanpassen dat de vis zijn partner na de kweek (zoals gedefinieerd in de superklasse) opeet met behulp van het override-mechanisme, zoals dit:
public class SaltwaterFish breidt Fish uit @Override public void makeBabyFish (Fish fishSpouse, int numBabies) // call parent-methode super.makeBabyFish (fishSpouse, numBabies); // eet partner eet (fishSpouse);
In Java kunt u objectgedrag organiseren in zogenaamde interfaces. Terwijl een klasse een object definieert, definieert een interface een bepaald gedrag dat op een object kan worden toegepast. We kunnen bijvoorbeeld een zwemmerinterface definiëren die een reeks methoden biedt die voor alle objecten die kunnen zwemmen dezelfde zijn, of ze nu vissen, otters of submergibele androïden zijn. De zwemmer-interface kan vier methoden specificeren: startZwemmen (), stopZwemmen (), duiken () en oppervlak ().
openbare interface Zwemmer void startZwemmen (); void stopZwemmen (); ongeldige duik (); leeg oppervlak ();
Een klasse zoals Fish kan dan de zwemmerinterface implementeren (met behulp van het sleutelwoord voor werktuigen) en implementaties van het zwemgedrag bieden:
publieke klasse Visgereedschappen Zwemmer // Implementeer de vier methoden binnen de interface Zwemmer
Klassehiërarchieën, zoals onze vislessen, kunnen vervolgens worden georganiseerd in pakketjes. Een pakket is gewoon een verzameling klassen en interfaces, bij elkaar gebundeld. Ontwikkelaars gebruiken naamruimten om pakketten uniek te benoemen. We kunnen bijvoorbeeld com.mamlambo.aquarium of com.ourclient.project.subproject als pakketnaam gebruiken om onze visgerelateerde klassen bij te houden..
Wauw! U bent net begonnen aan een spoedcursus in Java voor Android-ontwikkeling. We hebben hier een behoorlijk intense hoeveelheid materiaal gedekt, dus laat de zaken wat rustig worden voordat we verdergaan met de volgende les van deze serie. In les 2 schakelen we onze aandacht naar de subtiele details van de Java-syntaxis.
U hebt alleen de oppervlakte van Java-ontwikkeling voor Android-ontwikkeling gekrast. Bekijk alle andere geweldige tutorials over Mobiletuts + om dieper in Java en Android te duiken. Succes!
Mobiele ontwikkelaars Lauren Darcey en Shane Conder hebben samen meerdere boeken geschreven over Android-ontwikkeling: een diepgaand programmeerboek getiteld Android Wireless Application Development en Sams TeachYourself Android Application Development binnen 24 uur. Wanneer ze niet schrijven, besteden ze hun tijd aan het ontwikkelen van mobiele software bij hun bedrijf en het leveren van consultingservices. Ze zijn te bereiken via e-mail naar [email protected], via hun blog op androidbook.blogspot.com, en op Twitter @androidwireless.
Als u aan de slag wilt gaan met Android-ontwikkeling, is een Android-app-sjabloon een prima startpunt. Bekijk de selectie op Envato Market - of je zou specifieker kunnen zoeken naar Java-items.
Android app-sjablonen op Envato MarketU kunt Android-ontwikkelaars ook vinden op Envato Studio om u te helpen met alles van UI-ontwerp tot het maken van een native Android-app.
Android-ontwikkelaars op Envato Studio