In dieser Tutorial-Reihe lernen Sie Java kennen, die Programmiersprache, mit der Android-Anwendungen entwickelt werden. Unser Ziel ist es, diejenigen, die bereits mit einer Programmiersprache wie PHP oder Objective-C vertraut sind, auf die Arbeit mit der Programmiersprache Java vorzubereiten und in die Entwicklung von Android-Apps einzutauchen. In diesem Tutorial erhalten Sie eine kurze Einführung in die Java-Grundlagen, einschließlich objektorientierter Programmierung, Vererbung und mehr. Wenn Sie Java noch nicht kennen oder nur die Details auffrischen möchten, dann ist dies die Tutorial-Serie für Sie!
Anfangen
Wir gehen davon aus, dass Sie die Programmierkenntnisse (möglicherweise in PHP, Visual Basic oder C ++) beherrschen, die Besonderheiten der Programmierung in der Java-Sprache jedoch nicht kennen. Wir werden Ihnen nicht das Programmieren beibringen. Wir werden Ihnen anschauliche Beispiele für häufig verwendete Java-Sprachkonstruktionen und -Prinzipien geben und einige Android-spezifische Tipps und Tricks aufzeigen.
Was du brauchen wirst
Technisch gesehen benötigen Sie keine Tools, um dieses Tutorial zu vervollständigen, aber Sie werden sie sicherlich benötigen, um Android-Anwendungen zu entwickeln.
Zum Entwickeln von Android-Anwendungen (oder anderen Java-Anwendungen) benötigen Sie eine Entwicklungsumgebung, um Anwendungen zu schreiben und zu erstellen. Eclipse ist eine sehr beliebte Entwicklungsumgebung (IDE) für Java und die bevorzugte IDE für die Android-Entwicklung. Es ist für Windows-, Mac- und Linux-Betriebssysteme frei verfügbar.
Eine vollständige Anleitung zur Installation von Eclipse (einschließlich der unterstützten Versionen) und des Android SDK finden Sie auf der Android-Entwickler-Website .
Was ist java?
Android-Anwendungen werden in der Java-Sprache entwickelt. Ab sofort ist dies die einzige Option für native Anwendungen. Java ist eine sehr beliebte Programmiersprache, die von Sun Microsystems (jetzt im Besitz von Oracle) entwickelt wurde. Java wurde lange nach C und C ++ entwickelt und enthält viele der leistungsstarken Funktionen dieser leistungsstarken Sprachen, wobei einige ihrer Nachteile behoben wurden. Dennoch sind Programmiersprachen nur so leistungsfähig wie ihre Bibliotheken. Diese Bibliotheken helfen Entwicklern beim Erstellen von Anwendungen.
Einige der wichtigsten Kernfunktionen von Java sind:
- Es ist leicht zu lernen und zu verstehen
- Es ist plattformunabhängig und sicher und verwendet
virtuelle Maschinen - Es ist objektorientiert
Android stützt sich stark auf diese Java-Grundlagen. Das Android SDK enthält viele Standard-Java-Bibliotheken (Datenstrukturbibliotheken, Mathematikbibliotheken, Grafikbibliotheken, Netzwerkbibliotheken und alles, was Sie sich wünschen können) sowie spezielle Android-Bibliotheken, mit denen Sie großartige Android-Anwendungen entwickeln können.
Warum ist Java leicht zu erlernen?
Java ist aus verschiedenen Gründen leicht zu erlernen. Es gibt sicherlich einen Mangel an Java-Ressourcen, mit denen Sie die Sprache erlernen können, einschließlich Websites, Tutorials, Büchern und Kursen. Java ist eine der am häufigsten diskutierten, gelehrten und verwendeten Programmiersprachen der Welt. Es wird für viele verschiedene Arten von Programmierprojekten verwendet, von Webanwendungen über Desktopanwendungen bis hin zu mobilen Anwendungen.
Wenn Sie einen traditionellen Programmierhintergrund wie C oder C ++ haben, ist die Java-Syntax ziemlich ähnlich. Wenn nicht, dann trösten Sie sich mit dem Wissen, dass Sie eine der am einfachsten zu erlernenden Sprachen gewählt haben. Sie sind in kürzester Zeit einsatzbereit.
Schließlich ist Java eine der am besten lesbaren Sprachen, womit wir meinen, dass eine Person, die nichts über Programmierung weiß, sich häufig Java-Code ansieht und zumindest ahnt, was er tut. Betrachten Sie das folgende Beispiel:
Zeichen = ‚a‘;
if (Zeichen == ‚a‘)
{
etwas tun();
} else {
mach etwas anderes();
}
Wenn Sie einfach den Code vorlesen, können Sie ziemlich genau erkennen, dass dieser Codeausschnitt funktioniert. Es gibt eine einzelne Buchstabenvariable, die als Zeichen bezeichnet wird. Wenn die Zeichenvariable dem Buchstaben a entspricht, führen wir etwas aus (rufen Sie die Methode doSomething () auf), andernfalls führen wir etwas anderes aus (rufen Sie die Methode doSomethingElse () auf).
Warum ist Plattformunabhängigkeit wichtig?
Bei vielen Programmiersprachen müssen Sie einen Compiler verwenden, um Ihren Code auf eine Maschinensprache zu reduzieren, die das Gerät verstehen kann. Das ist zwar gut und schön, aber unterschiedliche Geräte verwenden unterschiedliche Maschinensprachen. Dies bedeutet, dass Sie Ihre Anwendungen möglicherweise für jedes Gerät oder jede Maschinensprache kompilieren müssen. Mit anderen Worten, Ihr Code ist nicht sehr portabel. Dies ist bei Java nicht der Fall. Die Java-Compiler konvertieren Ihren Code aus lesbaren Java-Quelldateien in so genannten Bytecode in der Java-Welt. Diese werden von einer Java Virtual Machine interpretiert, die ähnlich wie eine physische CPU mit Maschinencode arbeitet, um den kompilierten Code tatsächlich auszuführen. Obwohl dies als ineffizient erscheinen mag, wurden große Anstrengungen unternommen, um diesen Prozess sehr schnell und effizient zu gestalten.
Android-Anwendungen werden in einer speziellen virtuellen Maschine namens Dalvik VM ausgeführt. Obwohl die Details dieser VM für den durchschnittlichen Entwickler unwichtig sind, kann es hilfreich sein, sich die Dalvik-VM als eine Blase vorzustellen, in der Ihre Android-Anwendung ausgeführt wird, sodass Sie sich keine Gedanken darüber machen müssen, ob das Gerät ein Motorola Droid ist oder nicht HTC Evo oder der neueste Toaster mit Android. Es ist Ihnen egal, solange das Gerät Dalvik VM-freundlich ist – und es ist die Aufgabe des Geräteherstellers, dies zu implementieren, nicht Ihre.
Warum ist Java Secure?
Lassen Sie uns diese Blasenidee etwas weiter führen. Da Java-Anwendungen in der Blase ausgeführt werden, die eine virtuelle Maschine ist, sind sie von der zugrunde liegenden Gerätehardware isoliert. Daher kann eine virtuelle Maschine die Codeausführung im Vergleich zu Sprachen, die direkt im Maschinencode ausgeführt werden, sicher kapseln, enthalten und verwalten. Die Android-Plattform geht noch einen Schritt weiter. Jede Android-Anwendung wird auf dem (Linux-basierten) Betriebssystem unter einem anderen Benutzerkonto und in einer eigenen Instanz der Dalvik-VM ausgeführt. Android-Anwendungen werden vom Betriebssystem genau überwacht und heruntergefahren, wenn sie nicht gut funktionieren (z. B. zu viel Rechenleistung verbrauchen, nicht mehr reagieren, Ressourcen verschwenden usw.). Daher ist es wichtig, Anwendungen zu entwickeln, die stabil und reaktionsschnell sind.
Kompilieren Sie Ihren Code
Java ist wie viele andere Sprachen immer noch eine kompilierte Sprache, auch wenn sie nicht bis zum Maschinencode kompiliert wird. Dies bedeutet, dass Sie als Entwickler Ihre Android-Projekte kompilieren und sie für die Bereitstellung auf Geräten packen müssen. Die Eclipse-Entwicklungsumgebung (verwendet mit dem Android-Entwicklungs-Plug-In) macht dies ziemlich schmerzlos. In Eclipse ist die automatische Kompilierung häufig standardmäßig aktiviert. Dies bedeutet, dass Eclipse jedes Mal, wenn Sie eine Projektdatei speichern, die Änderungen für Ihr Anwendungspaket neu kompiliert. Sie sehen sofort Kompilierungsfehler. Eclipse interpretiert Java auch während der Eingabe und bietet nützliche Funktionen zum Färben und Formatieren von Code sowie zum Anzeigen vieler Arten von Fehlern. Häufig können Sie auf den Fehler klicken und Eclipse automatisch einen Tippfehler korrigieren lassen oder eine Importanweisung hinzufügen oder einen Methodenstub für Sie bereitstellen, wodurch viel Tipparbeit gespart wird.
Sie können Ihren Code nach wie vor manuell kompilieren, wenn Sie dies wünschen. Innerhalb von Eclipse finden Sie die Build-Einstellungen im Projektmenü. Wenn Sie „Automatisch erstellen“ aktiviert haben, können Sie weiterhin die Option „Bereinigen …“ auswählen, mit der Sie alle Dateien vollständig neu erstellen können. Wenn „Automatisch erstellen“ deaktiviert ist, sind die Menüoptionen „Alle erstellen“ und „Projekt erstellen“ aktiviert. „Alle erstellen“ bedeutet, dass alle Projekte im Arbeitsbereich erstellt werden. In einem Eclipse-Arbeitsbereich können sich viele Projekte befinden.
Der Erstellungsprozess für reguläre Java-Projekte führt zu einer Datei mit der Erweiterung JAR- J ava AR chive. Android – Anwendungen nehmen JAR – Dateien und sie auf Geräten wie für die Bereitstellung Paket A ndroid P ac K Alter Dateien mit der Erweiterung APK. Diese Formate enthalten nicht nur Ihren kompilierten Java-Code, sondern auch alle anderen Ressourcen wie Zeichenfolgen, Bilder oder Audiodateien, die Ihre Anwendung zum Ausführen benötigt, sowie die Anwendungsmanifestdatei AndroidManifest.xml. Die Android-Manifestdatei ist eine Datei, die von allen Android-Anwendungen benötigt wird und mit der Sie Konfigurationsdetails zu Ihrer java app programmieren definieren.
Was ist eine objektorientierte Programmiersprache?
Okay. Zeit für eine sehr kurze und 20.000-Fuß-Ansicht der objektorientierten Programmierung (OOP). OOP ist ein Programmierstil oder eine Programmiertechnik, die auf der Definition von Datenstrukturen beruht, die als Objekte bezeichnet werden. Für diejenigen, die OOP noch nicht kennen, kann sich ein Objekt wie ein benutzerdefinierter Datentyp vorstellen. Beispielsweise könnten Sie ein Dog-Objekt haben, das die Blaupause für einen generischen Hund darstellt, mit einem Namen, einer Rasse und einem Geschlecht. Sie können dann verschiedene Instanzen des Dog-Objekts erstellen, um bestimmte Hunde darzustellen. Jedes Dog-Objekt muss durch Aufrufen seines Konstruktors erstellt werden (eine Methode mit demselben Namen wie das Objekt selbst und möglicherweise Parametern zum Festlegen von Anfangswerten). Beispielsweise verwenden die folgenden Dog-Objekte einen Konstruktor mit drei Parametern (Name, Rasse, Geschlecht):
Hund dog1 = neuer Hund („Lassie“, Collie, weiblich);
Hund dog2 = neuer Hund („Fifi“, Pudel, weiblich);
Hund dog3 = neuer Hund („Asta“, Foxterrier, Rüde);
Also, wo ist dieses Hundeobjekt definiert? Nun, hier müssen wir beginnen, einige der grundlegenden Bausteine der Java-Programmiersprache zu definieren. Eine Klasse stellt eine Definition für ein Objekt bereit. Daher gibt es irgendwo eine Hundeklasse – entweder von Ihnen definiert oder irgendwo in einer Bibliothek. Im Allgemeinen wird eine Klasse in einer eigenen Datei definiert, deren Dateiname mit dem Klassennamen übereinstimmt (z. B. Dog.java). Es gibt Ausnahmen von dieser Regel, z. B. Klassen, die in anderen Klassen definiert sind (wenn eine Klasse in einer Klasse deklariert ist, ist sie im Allgemeinen nur für die Verwendung in der übergeordneten Klasse als Hilfsklasse definiert und wird als innere Klasse bezeichnet ).
Wenn Sie ein Objekt aus einer anderen Klasse referenzieren möchten, müssen Sie eine import-Anweisung in die Klassendatei einfügen, ähnlich wie Sie eine # include-Anweisung in einer kompilierten Sprache wie C verwenden würden.
Eine Klasse beschreibt normalerweise die Daten und das Verhalten eines Objekts. Das Verhalten wird mit Klasse definiert Methoden . Methode ist die gebräuchliche Bezeichnung für ein Unterprogramm in einer OOP-Sprache. Viele allgemeine Objektklassen werden in gemeinsam genutzten Klassenbibliotheken wie Software Development Kits (SDKs) definiert, während andere von Ihnen, dem Entwickler, für Ihre eigenen Zwecke definiert werden. Software wird dann erstellt, indem Objektinstanzen auf verschiedene Arten verwendet und bearbeitet werden.
Bitte beachten Sie, dass dies eine sehr verallgemeinerte Definition von OOP ist. Es gibt ganze Bücher zu diesem Thema. Wenn Sie mehr über OOP erfahren möchten, sehen Sie sich hier einige Ressourcen an:
- Wikipedia hat einen schönen Überblick über OOP
- Sun Java Tutorials auf Java
- Die Java Tutorials bei Oracle
Hinweis: In diesem Lernprogramm werden viele verschiedene Begriffe verwendet. Es gibt mehrere Möglichkeiten, auf ein bestimmtes Konzept zu verweisen (z. B. Superklasse vs. Elternklasse), was für diejenigen verwirrend ist, die neu in der objektorientierten Programmierung sind. Verschiedene Entwickler verwenden unterschiedliche Begriffe. Deshalb haben wir versucht, gegebenenfalls Synonyme zu erwähnen. Die Entscheidung, welche Begriffe Sie verwenden, ist eine persönliche Entscheidung.
Vererbung verstehen
Hier ist ein weiteres wichtiges Java-Konzept, auf das Sie häufig stoßen werden: Vererbung . Einfach ausgedrückt bedeutet Vererbung, dass Java-Klassen (und damit Objekte) in Hierarchien mit niedrigeren, spezifischeren Klassen in der Hierarchie organisiert werden können, die Verhalten und Merkmale höherer, allgemeinerer Klassen erben .
Dieses Konzept lässt sich am besten anhand eines Beispiels veranschaulichen. Nehmen wir an, wir entwickeln eine Java-Anwendung zur Simulation eines Aquariums. In diesem Aquarium befinden sich einige Fische. Daher können wir eine Klasse definieren, die einen Fisch darstellt. Diese Klasse mit der Bezeichnung Fisch kann einige Datenfelder (auch Attribute oder Klassenmitgliedervariablen genannt) enthalten, um ein Fischobjekt zu beschreiben: Art, Farbe und Größe; sowie einige Verhaltensweisen in Form von Methoden (auch Subroutinen oder Funktionen in prozeduralen Sprachen genannt), wie eat (), sleep () und makeBabyFish ().
Eine spezielle Methode, genannt Konstruktor , wird verwendet, um ein Objekt zu erstellen und zu initialisieren. Konstruktoren haben den gleichen Namen wie ihre Klasse und können Parameter enthalten. Die folgende Fish-Klasse verfügt über zwei Konstruktoren: einen zum Erstellen eines allgemeinen Fish-Objekts und einen weiteren zum Erstellen eines bestimmten Fish-Objekts mit einigen Anfangsdaten. Sie werden auch feststellen, dass die Fish-Klasse über zwei eat () -Methoden verfügt: eine zum Essen von zufälligen Objekten und eine zum Essen von anderen Fischen, die durch eine andere Instanz der Fish-Klasse dargestellt würden:
public class Fisch {
private String mSpecies;
private String mColor;
private int mSize;
Fisch() {
// generischer Fisch
mSpecies = „unbekannt“;
mColor = „unbekannt“;
mSize = 0;
}
Fisch (Saitenart, Saitenfarbe, int. Größe) {
mSpecies = Spezies;
mColor = Farbe;
mSize = Größe;
}
public void eat () {
// Algen essen
};
öffentliche Leere essen (Fisch fishToEat) {
// iss noch einen Fisch!
};
öffentlicher nichtiger Schlaf () {
// schlafen
};
public void makeBabyFish (Fisch fishSpouse, int numBabies) {
// Machen Sie mit Fish spouse Babys zu Babies
};
}
Klassen können in Hierarchien organisiert werden, in denen eine abgeleitete Klasse (oder Unterklasse ) alle Features ihrer übergeordneten Klasse (oder Oberklasse ) enthält, diese jedoch verfeinert und ergänzt, um ein spezifischeres Objekt mithilfe des Schlüsselworts extend zu definieren. Dies nennt man Vererbung.
Beispielsweise kann die Fish-Klasse zwei Unterklassen haben: FreshwaterFish und SaltwaterFish. Diese Unterklassen verfügen über alle Funktionen der Fish-Klasse, können jedoch die Objekte durch neue Attribute und Verhaltensweisen oder durch geänderte Verhaltensweisen der übergeordneten Klasse Fish weiter anpassen. Zum Beispiel kann die FreshwaterFish-Klasse Informationen über die Art der Süßwasserumgebung enthalten, in der sie lebt (z. B. Fluss, See, Teich oder Pfütze). In ähnlicher Weise kann die SaltwaterFish-Klasse die makeBabyFish () -Methode anpassen, sodass der Fisch nach dem Züchten seinen Partner frisst (wie in der Superklasse definiert), indem er den Überschreibungsmechanismus wie folgt verwendet:
public class SaltwaterFish erweitert Fish
{
@Override
public void makeBabyFish (Fisch fishSpouse, int numBabies) {
// übergeordnete Methode aufrufen
super.makeBabyFish (fishSpouse, numBabies);
// iss Kumpel
essen (fishSpouse);
}
}
Organisieren des Objektverhaltens mit Schnittstellen
In Java können Sie Objektverhalten in sogenannten Schnittstellen organisieren. Während eine Klasse ein Objekt definiert, definiert eine Schnittstelle ein Verhalten, das auf ein Objekt angewendet werden kann. Beispielsweise könnten wir eine Schwimmer-Schnittstelle definieren, die eine Reihe von Methoden bereitstellt, die für alle schwimmfähigen Objekte gelten, unabhängig davon, ob es sich um Fische, Otter oder tauchbare Androiden handelt. Die Benutzeroberfläche von Swimmer kann vier Methoden angeben: startSwimming (), stopSwimming (), dive () und surface ().
öffentliche Schnittstelle Schwimmer
{
void startSwimming ();
void stopSwimming ();
Tauchgang stornieren ();
leere Fläche ();
}
Eine Klasse wie Fish könnte dann die Swimmer-Schnittstelle implementieren (mithilfe des implements-Schlüsselworts) und Implementierungen des Schwimmverhaltens bereitstellen:
public class Fischgeräte Swimmer {
// Implementierungen der vier Methoden in der Swimmer-Schnittstelle bereitstellen
}
Organisieren von Klassen und Schnittstellen mit Paketen
Klassenhierarchien wie unsere Fischklassen können dann in Paketen organisiert werden . Ein Paket ist einfach eine Reihe von Klassen und Schnittstellen, die zusammen gebündelt sind. Entwickler verwenden Namespaces, um Pakete eindeutig zu benennen. Beispielsweise könnten wir com.mamlambo.aquarium oder com.ourclient.project.subproject als Paketnamen verwenden, um unsere fischbezogenen Klassen zu verfolgen.
Einpacken
Beeindruckend! Sie haben gerade einen Crashkurs in Java für die Android-Entwicklung begonnen. Wir haben hier eine ziemlich große Menge an Material behandelt, also lassen Sie die Dinge ein wenig ruhiger angehen, bevor Sie mit der nächsten Lektion dieser Tutorial-Serie fortfahren. In Lektion 2 konzentrieren wir uns auf die Details der Java-Syntax.
Sie haben nur die Oberfläche der Java-Entwicklung für Android-Entwicklung zerkratzt. Schauen Sie sich alle anderen großartigen Tutorials zu Mobiletuts + an, um tiefer in die Java- und Android-Entwicklung einzutauchen. Viel Glück!