Innehållsförteckning:
- står för superklassens konstruktör. Olika kod använde sökordet
- , vet Java inte vilken sorts syn den hittar. Metoden
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024
När du startar ett nytt Java-projekt, erbjuder Android Studio att skapa en aktivitet för ditt projekt. Android Studio erbjuder dig flera olika typer av aktiviteter, till exempel en grundläggande aktivitet, en tom aktivitet, en inloggningsaktivitet och så vidare. Om du begär en tom aktivitet får du den här koden:
paket com. allyourcode. a10_11;
importera android. Stöd. v7. app. AppCompatActivity;
importera android. os. Bunt;
public class MainActivity utökar AppCompatActivity {
@Override
skyddad void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (R. Layout. Activity_main);
}
}
Koden förklarar en klass med namnet
MainActivity
. Detta namn
MainActivity
ingår inte i Android API-biblioteket. Det är ett namn som du gör när du skapar ett nytt Android-projekt. (Egentligen gör Android Studio namnet. Du accepterar namnet eller ändrar det till ett annat namn när du följer stegen för att skapa ett nytt projekt.)
Klassen
MainActivity
utökar en klass som hör till till Android SDK-bibliotek, nämligen klassen
AppCompatActivity
. Med andra ord är
MainActivity
-objektet ett
AppCompatActivity
-objekt. Objektet
MainActivity
har alla rättigheter och ansvar som någon
AppCompatActivity
-exempel har. Till exempel har
MainActivity
en
onCreate
-metod, som den åsidosätter.
ärver cirka 460 linjer kod från Android's
AppCompatActivity
klass, som ärver cirka 1.000 linjer från Android
FragmentActivity
class, som ärver cirka 6, 700 linjer från Android Aktivitetsklass. De arvade metoderna inkluderar sådana som
getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
getWindow
,
,
påKeyDown
,
påKeyLongPress
,
onLowMemory
,
påMenuItemSelected
,
setTitle <,
setTitleColor
,
startAktivitet
, avsluta och många, många andra. Du ärverger all denna funktion med två enkla ord: utökar
AppCompatActivity
.
I terminologin för familjeförhållanden är din
MainActivity
-kategori en efterkommer av Android's
Aktivitet
-klass. Din klass
MainActivity
är en typ av
Aktivitet
.
Denna bild, som tas direkt från Android: s onlinedokumentation, sammanfattar denna information om klassen
AppCompatActivity
.
Ett AppCompatActivity-släktträd.
Bokmärk sidan för enkel åtkomst till Androids API-biblioteksdokumentation.
Förutom att vara en underklass implementerar klassen
ett gäng gränssnitt, inklusive gränssnittet
AppCompatCallback
, gränssnittet
TaskStackBuilder
och andra. Du behöver inte komma ihåg något av detta. Om du någonsin behöver veta det kan du kolla upp det på Android: s dokumentationssida.
Java's superord, revisited
Ordet
super
står för superklassens konstruktör. Olika kod använde sökordet
super
på olika sätt. Ja,
super
har alltid något att göra med en klassens föräldraklass. Men nej,
super
refererar inte alltid till moderklassens konstruktör.
I en
onCreate
metod kallas samtalet
super. onCreate (savedInstanceState)
skickar
savedInstanceState
till moderklassens metod
onCreate
. Förälderklassen är klassen
AppCompatActivity
. Så Java kallar
AppCompatActivit
y-klassens
onCreate
-metod.
Metoden
AppCompatActivity
klassens
onCreat
e innehåller sitt eget samtal till
super. onCreate (savedInstanceState)
. Klassen
AppCompatActivity
klassen är klassen
FragmentActivity
. Så Java övergår
savedInstanceState
till metoden
FragmentActivity
klassens
onCreate
. Och så vidare.
Det är inte förrän du kommer till klassen
Aktivitet
- din M
ainActivity
klassens farförälder - att koden gör direkt användning av variabeln
savedInstanceState
. Från denna
savedInstanceState
-information sätter koden aktiviteten på samma sätt som tidigare innan systemet förstörde det.
Casting, again
När du ringer
findViewById
, vet Java inte vilken sorts syn den hittar. Metoden
findViewById
returnerar alltid ett
Visa
-exempel, men många Android-klasser förlänger klassen
Visa
. Till exempel klasserna
Knapp
,
TextView
,
ImageView
,
Checkbox
,
Chronometer
och
RatingBar
alla utökar Android's
View
-klass. Om du skriver följande kod:
// GÖR INTE DETTA! !
TextView textView;
textView = findViewById (R. Id. TextView);
Java släpper ut en rungande, ödesdigra vrålning: "Hur vågar du antar att objektet som returneras genom ett samtal till
findViewById
hänvisar till en förekomst av klassen
TextView
! "(I själva verket visar Java tyst och mekaniskt ett felmeddelande
Inkompatibla typer
i Android Studios redaktör.)
Narrowing betyder att försöka tilldela ett långt
värde till en > int värde. Ett värde
långt
har 64 bitar och ett värde
int
har endast 32 bitar. Därför misslyckas försöket till förminskning. I den kod du hittar här är det dåliga
findViewById
samtalet ett annat försök att göra inskränkning - tilldela värdet
Visa
som returneras av ett metodanrop till en
TextView
-variabel.Klassen
TextView
är en underklass i klassen
Visa
, så uppgiften misslyckas olyckligt.
beröm Java-gudarna genom att lägga till en casting-operatör till koden. Du berättar för Java att konvertera vad som helst som kommer från metoden
findViewById
i ett
TextView
-objekt.
textView =
(TextView)
findViewById (R.ID.textView1);
Medan du skriver in koden, humörar Java dig och säger, "Din casting-operatör visar mig att du är medveten om skillnaden mellan en
TextView och någon gammal View
. Jag gör mitt bästa för att tolka det
Visa
objektet som jag hittar vid körning som ett
TextView
objekt. "(Faktum är att Java inte säger något när du skriver koden. Det faktum att Java inte visar några felmeddelanden när du använder det här casting-tricket är ett bra tecken. Java-gjutningsfunktionen sparar dagen!)
Casting hindrar dig från att se ett felmeddelande medan du utvecklar din kod. På så sätt är gjutning ganska användbar för Java. Men gjutning kan inte rädda dig om din kod innehåller runtimefel. När du skriver
textView = (TextView) findViewById (R.ID.textView1);
du verifierar att namnet
textView
representerar en
TextView
widget. När appen körs tar Java
R. id. textView
widget från
activity_main. xml
fil, och allt fungerar bra. Men du kan ibland glömma att kolla din
R. java
namn på komponenterna i XML-filen. Ett samtal till
findViewById
speglar överraskande en
Button
komponent när din gjutning berättar för Java att förvänta en
TextView
widget. När detta händer, kraschar Java på gjutningsoperatören och din app kraschar under sin körning. Tillbaka till ritbordet!