CodeGym /Cursussen /Java Core /Laadklassen, statische gegevens...

Laadklassen, statische gegevens...

Java Core
Niveau 5, Les 7
Beschikbaar

"Hallo, Amigo! Ik hoorde dat Rishi je iets nieuws en opwindends heeft uitgelegd?!"

"Dat klopt Kim."

"Mijn onderwerp zal niet minder interessant zijn. Ik wil je vertellen hoe klassen in het geheugen worden geladen."

Klassen in Java zijn bestanden op de schijf die bytecode bevatten, wat gecompileerde Java-code is.

"Ja dat herinner ik me."

De Java-machine laadt ze niet als dat niet nodig is. Zodra er ergens in de code een klasse wordt aangeroepen, controleert de Java-machine of deze is geladen. En zo niet, dan wordt het geladen en geïnitialiseerd.

Het initialiseren van een klasse omvat het toewijzen van waarden aan al zijn statische variabelen en het aanroepen van alle statische initialisatieblokken.

"Dat lijkt op het aanroepen van een constructor voor een object. Maar wat is een statisch initialisatieblok?"

"Als u complexe code moet uitvoeren (bijvoorbeeld iets uit een bestand laden) om objecten te initialiseren, kunnen we dit in een constructor doen. Statische variabelen hebben deze mogelijkheid echter niet. Maar aangezien de behoefte nog steeds bestaat, kunt u voeg een statisch initialisatieblok of blokken toe aan klassen. Ze zijn in principe gelijk aan statische constructors."

Zo ziet het eruit:

Code Wat gebeurt er echt
class Cat
{
public static int catCount = 0 ;
public static String namePrefix;

static
{
Properties p = new Properties();
p.loadFromFile("cat.properties");
namePrefix = p.get("name-prefix");
}

public static int maxCatCount = 50;

static
{
Properties p = new Properties();
p.loadFromFile("max.properties");
if (p.get("cat-max") != null)
maxCatCount = p.getInt("cat-max");
}

}


class Cat
{
public static int catCount;
public static String namePrefix;
public static int maxCatCount;

//Static constructors aren't allowed in Java,
//but if they were, everything
//would look like this
public static Cat()
{
catCount = 0;

Properties p = new Properties();
p.loadFromFile("cat.properties");
namePrefix = p.get("name-prefix");

maxCatCount = 50;

Properties p2 = new Properties();
p2.loadFromFile("max.properties");
if (p2.get("cat-max")!=null)
maxCatCount = p2.getInt("cat-max");
}
}

Het lijkt veel op wat er gebeurt als een constructor wordt aangeroepen. Ik heb het zelfs geschreven als een (niet-bestaande) statische constructor.

"Ja ik snap het."

"Erg goed."

4
Taak
Java Core, niveau 5, les 7
Vergrendeld
Code entry
Your attention, please! Now recruiting code entry personnel for CodeGym. Turn up your focus, let your fingers relax, read the code, and then... type it into the appropriate box. Code entry is far from a useless exercise, though it might seem so at first glance: it allows a beginner to get used to and remember syntax (modern IDEs seldom make this possible).
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION