1. Opprette et objekt

Vel, vi har kommet frem til å lage objekter. Du har allerede støtt på dette før, men nå skal vi analysere dette emnet mer detaljert. Det er faktisk veldig enkelt å lage objekter.

For å lage et objekt må du bruke den nye operatoren. Å lage et objekt ser omtrent slik ut:

new Class(arguments)

Etter å ha opprettet et objekt lagrer vi oftest umiddelbart en referanse til det i en variabel, som veldig ofte deler samme type som det opprettede objektet. Det betyr at når du oppretter et objekt, ser du vanligvis kode som dette:

Class name = new Class(arguments)

Hvor er opprettelsen av en ny variabel, og koden til høyre for likhetstegnet er opprettelsen av et nytt objekt hvis type er .Class nameClass

Eksempler:

Kode Merk
Object o = new Object();
Lag et Objectobjekt
Cat pet = new Cat();
Lag et Catobjekt
Scanner console = new Scanner(System.in)
Lag et Scannerobjekt

Programmerere navngir ofte variabler etter klassene sine, men med en liten bokstav. For en nybegynner programmerer kan slik kode være forvirrende:

Kode
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

Det er ingenting galt med denne koden - dette er den mest vanlige koden, der en variabel opprettes og deretter umiddelbart initialiseres av et objekt av samme type.

Til venstre for likhetstegnet har vi opprettelsen av en variabel. Til høyre, opprettelsen av et objekt. Det er det.

2. Konstruktør

Du har sikkert sett at noen argumenter ofte sendes når du lager et objekt. Dessuten sendes argumenter for noen objekter, men ikke andre. Hvordan fungerer hele denne mekanismen med argumenter?

Alt er enkelt her også: hver klasse har en spesiell metode (eller metoder) som er ansvarlige for å håndtere argumenter som sendes når du oppretter et objekt. Disse metodene kalles konstruktører . Eller når vi bare snakker om én: konstruktøren .

Det er enkelt å skille en konstruktørmetode fra en vanlig metode. Denne metoden har to kjennetegn:

  • navnet på en konstruktør er det samme som navnet på dens klasse (og starter med stor bokstav)
  • en konstruktør har ingen returtype.

Generelt, slik ser det vanligvis ut:

modifiers Class(arguments)
{
   Code
}

Eksempel:

Kode Merk
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
Pointklasse




Pointklasse konstruktør
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




Lag et objekt av Pointklassen. Klassekonstruktøren vil bli kalt.

Legg merke til hvordan konstruktøren ser ut: den har ingen returtype og navnet er det samme som klassenavnet.

Og en ting til: ta en titt på koden inne i konstruktøren. Konstruktørens parametere har samme navn som feltene i klassen: x og y. Det er standard praksis å unngå å lage nye parameternavn. Navnene er de samme som på feltene i klassen. Navnekonflikten løses ved å bruke dette nøkkelordet.

3. Ringe en konstruktør

Når du bruker den nye operatoren og en kommando som "ny klasse ( argumenter )" for å lage et nytt objekt, skjer to ting:

  • Java-maskinen oppretter et objekt hvis type er Klasse
  • Java-maskinen kaller objektets konstruktør og sender inn argumentene dine

Som programmerer får du bestemme hvilke konstruktører klassen din skal ha, og hvilke parametere disse konstruktørene skal ha.

Anta at du bestemmer deg for å opprette en klasse for å holde styr på katter på et dyrehjem. Da Catkan klassen din se slik ut:

class Cat
{
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
}
Cat cat = new Cat("Whiskers", 2);
Dette er tillatt
Cat cat = new Cat("Whiskers");
Men dette er ikke tillatt. Denne koden vil ikke kompilere.
Cat cat = new Cat();
Og dette er ikke tillatt. Denne koden vil ikke kompilere.

Klassen Cathar bare én konstruktør med navn og aldersparametere. Fordi det ikke finnes andre konstruktører, må du sende kattens navn ( name) og alder ( age) som argumenter når du oppretter et objekt. Det er ikke valgfritt å sende argumenter til konstruktøren .

4. Flere konstruktører

Men hvis du trenger det, kan du legge til flere konstruktører i klassen. Det er ingen begrensning på antall konstruktører eller deres parametere. Når du oppretter et objekt, velger kompilatoren automatisk konstruktøren som samsvarer med parameterne

Kode Merk
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
   public Cat(String name)
   {
      this.name = name;
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
Dette er tillatt: den første konstruktøren vil bli kalt
Cat cat = new Cat("Whiskers");
Dette er tillatt: den andre konstruktøren vil bli kalt
Cat cat = new Cat();
Men dette er ikke tillatt. Denne koden vil ikke kompilere.

Vi bestemte oss for å gjøre rede for det faktum at en katts alder kanskje ikke er kjent. For å håndtere dette tilfellet la vi til den spesielle konstanten UNKNOWNsammen med en konstruktør som bare har én parameter - navnet på katten.

Merk at vi fortsatt initialiserer begge variablene i begge konstruktørene. Vi erstatter de ukjente/manglende parameterne med konstanten UNKNOWN.

Hvis ingen verdi er tilordnet aldersvariabelen, vil den ha standardverdien 0. Tross alt kan en kattunge funnet på gaten godt være 0 hele år. Det betyr at en null i aldersvariabelen ikke nødvendigvis betyr "ukjent alder".

5. Standard konstruktør

Hvis du vil at objektene dine skal instansieres uten noen parametere, må klassen din erklære en konstruktør uten argumenter.

En konstruktør uten parametere er ikke nødvendigvis en konstruktør uten kode. En slik konstruktør kan inneholde kode som initialiserer variabler med startverdier:

Kode Merk
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }

   public Cat()
   {
      this.name = "Nameless";
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
Dette er tillatt: den første konstruktøren vil bli kalt
Cat cat = new Cat();
Dette er tillatt: den andre konstruktøren vil bli kalt

Standard konstruktør

Det er et veldig viktig poeng som du bør vite og huske.

Hvis klassen din erklærer ikke én konstruktør , vil kompilatoren legge til en standard konstruktør, som er en konstruktør uten argumenter med den offentlige modifikatoren.

Men hvis klassen din erklærer enda en konstruktør , vil ingen standardkonstruktør bli lagt til , og du må legge den til selv hvis du vil ha det.

Kode Merk
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
Dette er tillatt: standardkonstruktøren vil bli kalt