Inhoudsopgave:
Video: Learn Java Programming with Beginners Tutorial 2024
Wanneer u een nieuw Java-project start, biedt Android Studio u aan een activiteit voor uw project te maken. Android Studio biedt verschillende soorten activiteiten, zoals een basisactiviteit, een lege activiteit, een inlogactiviteit, enzovoort. Als u om een lege activiteit vraagt, krijgt u deze code:
package com. allyourcode. a10_11;
importeer android. ondersteuning. v7. app. AppCompatActivity;
importeer android. os. Bundel;
openbare klasse MainActivity breidt AppCompatActivity uit {
@Override
beschermde ongeldig onCreate (bundel savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (r.lay-out.activiteit_hoofd);
}
}
De code declareert een klasse met de naam
MainActivity
. Deze naam
MainActivity
maakt geen deel uit van de Android API-bibliotheek. Het is een naam die u verzint wanneer u een nieuw Android-project maakt. (Eigenlijk maakt Android Studio de naam aan, accepteert u de naam of wijzigt u deze in een andere naam wanneer u de stappen volgt om een nieuw project te maken.)
De klasse
MainActivity
breidt een klasse uit die thuishoort naar de SDK-bibliotheek van Android, namelijk de klasse
AppCompatActivity
. Met andere woorden, het
MainActivity
-object is een
AppCompatActivity
-object. Het
MainActivity
-object heeft alle rechten en verantwoordelijkheden die een
AppCompatActivity
-instantie heeft. De
MainActivity
heeft bijvoorbeeld een
onCreate
-methode, die deze overschrijft.
In feite erft de
MainActivity
-klasse ongeveer 460 regels code uit de
AppCompatActivity
-klasse van Android, die ongeveer 1 000 regels van de
van Android erft FragmentActivity
-klasse, die ongeveer 6 700 regels van de Activiteitsklasse van Android overerft. De overgeërfde methoden omvatten degenen zoals
getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
getWindow
,
onBackPressed
,
onKeyDown
,
onKeyLongPress
,
onLowMemory
,
onMenuItemSelected
,
setTitle <,
setTitleColor
,
startActivity
, voltooien en nog vele andere. U ervaart al deze functionaliteit met twee eenvoudige woorden: verlengt
AppCompatActivity
.
In de terminologie van familierelaties is uw
MainActivity
-klasse een afstammeling van de
activiteit
-klasse van Android. Uw
MainActivity
-klasse is een soort
activiteit
.
Deze afbeelding, rechtstreeks overgenomen uit de online-documentatie van Android, geeft een samenvatting van deze informatie over de klasse
AppCompatActivity
.
Een stamboom van AppCompatActivity.
Naast een subklasse, implementeert de klasse
AppCompatActivity
een aantal interfaces, waaronder de
AppCompatCallback
-interface, de
TaskStackBuilder
-interface en andere. U hoeft hier niets van te onthouden. Als je het ooit moet weten, kun je het opzoeken op de documentatiepagina van Android.
Java-superzoekwoord, herzien
Het woord
super
staat voor de constructor van de superklasse. Verschillende code gebruikte het trefwoord
super
op verschillende manieren. Ja,
super
heeft altijd iets te maken met de bovenliggende klasse van een klas. Maar nee,
super
verwijst niet altijd naar de constructor van de ouderklasse.
In een
onCreate
-methode, de oproep
super. onCreate (savedInstanceState)
verzendt
savedInstanceState
naar de
onCreate
-methode van de bovenliggende klasse. De bovenliggende klasse is de klasse
AppCompatActivity
. Daarom roept Java de
AppCompatActivit
y-klasse
onCreate
aan.
De
AppCompatActivity
-klasse
onCreat
e-methode bevat een eigen aanroep van
super. onCreate (savedInstanceState)
. De klasse
AppCompatActivity
is de klasse
FragmentActivity
. Dus geeft Java
savedInstanceState
over aan de
FragmentActivity
-klasse
onCreate
-methode. Enzovoort.
Pas als u de klasse
Activiteit
- de overgrootouder van uw klasse M
ainActivity
- hebt bereikt, gebruikt de code rechtstreeks de variabele
savedInstanceState
. Uit deze
savedInstanceState
-informatie zet de code de activiteit terug zoals deze was voordat het systeem de activiteit vernietigde.
Casten, opnieuw
Wanneer u
findViewById
aanroept, weet Java niet wat voor soort weergave het zal vinden. De
findViewById
-methode retourneert altijd een
View
-instantie, maar veel klassen van Android breiden de
View
-klasse uit. De klassen
Knop
,
Tekstweergave
,
ImageView
,
CheckBox
,
Chronometer
en
RatingBar
breiden alle Android
View
-klasse uit. Als u de volgende code typt:
// DO NOT DIT! !
TextView-tekstView;
textView = findViewById (r. Id. TextView);
Java laat een klinkend, woedend gebrul horen: "Hoe durf je te veronderstellen dat het object dat wordt geretourneerd door een aanroep van
findViewById
verwijst naar een instantie van de
TextView
-klasse! "(In feite geeft Java stil en mechanisch een
Incompatibele typen foutmelding weer in de editor van Android Studio.) Beperken
betekent dat u probeert een lange
waarde toe te kennen aan een > int
waarde. Een
lange
-waarde heeft 64 bits en een
int
-waarde heeft slechts 32 bits. Dus de poging tot verkleinen mislukt. In de code die u hier vindt, is de slechte
findViewById
-aanroep een andere poging om een versmalling uit te voeren: de waarde
Weergeven
die door een methode-aanroep is geretourneerd, toewijzen aan een
TextView
-variabele.De
TextView
-klasse is een subklasse van de klasse
View
, dus de opdracht mislukt jammerlijk.
tevreden de Java-goden door een casting-operator toe te voegen aan de code. U vertelt Java dat de conversie van
findViewById
naar een
TextView
-object moet worden geconverteerd.
textView =
(TextView)
findViewById (tekst IDView1); Terwijl u de code intypt, schrijft Java u en zegt: "Uw casting-operator laat me zien dat u op de hoogte bent van het verschil tussen een TextView
en een oude
View
. Ik zal mijn best doen om het
View
-object dat ik tijdens runtime vind te interpreteren als een
TextView
-object. "(Terwijl je de code intikt, zegt Java niets, terwijl het feit dat Java geen foutmeldingen weergeeft wanneer je deze castingtruc gebruikt een goed teken is.) De castingfunctie van Java redt de dag!)
Casting voorkomt dat u een foutmelding krijgt terwijl u uw code ontwikkelt. Op die manier is casten een behoorlijk handige functie van Java. Maar casten kan u niet redden als uw code runtime-fouten bevat. Wanneer u
textView = (TextView) typt, vindt uViewById (R. Id. TextView1);
u controleert of de naam
tekstView
staat voor een
TextView
-widget. Wanneer de app wordt uitgevoerd, pakt Java de
R. ID kaart. textView
widget van
activity_main. xml
bestand, en alles werkt prima. Maar u kunt soms vergeten uw
R te controleren. java
namen tegen de componenten in het XML-bestand. Een aanroep van
findViewById
spuugt verrassend een
Knop
-gedeelte uit wanneer uw casting aan Java laat weten een
tekstweergave
-widget te verwachten. Wanneer dit gebeurt, verslikt Java zich in de casting-operator en crasht uw app tijdens de uitvoering. Terug naar de tekentafel!