Java >> Java tutorial >  >> Tag >> class

Introduktion til klasser i Java

Java er det mest berømte objektorienterede sprog, der bruges af programmører i dag. For at få en dybdegående fortælling om, hvordan java fungerer, skal vi have en dyb forståelse af klasser og objekter. Lad os dykke ned i objekternes og klassernes verden og få et første kig på, hvordan de fungerer.

Objekter og klasser

Hvis vi ser på en bil, kan vi se, at den består af mange komponenter som hjul, ruder, speederpedal, bremsepedal og så videre. Der er mange komponenter under motorhjelmen, som vi ikke kan se, såsom motor, radiator osv. Når vi taler om en bil, er det ikke kun én genstand, men en samling af objekter, der arbejder sammen.

Den samme opfattelse gælder for computerprogrammering, men objektet er ikke en fysisk enhed. I java kan et objekt gøre 2 ting:

  • Den kan gemme data
  • Den kan udføre handlinger

Så objekter spiller en vigtig rolle i et objektorienteret sprog. Hvis du for eksempel skal læse input fra konsollen, skal du bruge et scannerobjekt. Spørgsmålet er, hvordan bruger vi disse objekter? Nå, de optræder ikke bare på magisk vis i et program; vi skal oprette et objekt i hukommelsen, og før vi opretter et objekt, har vi brug for en klasse.

En klasse beskriver et bestemt objekt, så vi kan sige, at en klasse er en blueprint af et objekt. Lad os begynde med en demo af en faktisk kode, der viser Java-klasser og -objekter.

import java.util.Scanner; // Needed for the Scanner class
import java.util.Random; // Needed for the Random class
import java.io.*; // Needed for file I/O classes

 /**
 This program writes random numbers to a file.
 */

 public class ObjectDemo
 {
 public static void main(String[] args) throws IOException
 {
 int maxNumbers; // Max number of random numbers
 int number; // To hold a random number

 // Create a Scanner object for keyboard input.
 Scanner keyboard = new Scanner(System.in);

 // Create a Random object to generate random numbers.
 Random rand = new Random();

 // Create a PrintWriter object to open the file.
 PrintWriter outputFile = new PrintWriter("numbers.txt");

 // Get the number of random numbers to write.
 System.out.print("How many random numbers should I write? ");
 maxNumbers = keyboard.nextInt();

 // Write the random numbers to the file.
 for (int count = 0; count < maxNumbers; count++)
 {
 // Generate a random integer.
 number = rand.nextInt();

 // Write the random integer to the file.
 outputFile.println(number);
 }

 // Close the file.
 outputFile.close();
 System.out.println("Done");
 }
 }

En væsentlig detalje at bemærke om Java er, at ethvert program er eksekverbart, når det har en klasse. I modsætning til C++, hvor hovedfunktionen er uden for klassen, er alle funktionerne inde i en klasse, selv hovedfunktionen. ObjectDemo-klassen skriver grundlæggende et specificeret antal tilfældige heltal til en fil kaldet numbers.txt, og for at gøre dette opretter den 3 instanser, nemlig Scanner, PrintWriter og Random.

Når vi arbejder med objekter, bruger vi to ting:

  • Selve objektet
  • En referencevariabel, der refererer til objektet

Objektet oprettes i hukommelsen ved hjælp af det nye nøgleord og indeholder nogle data til at udføre nogle operationer. For at bruge objektet i koden skal vi bruge en referencevariabel, så hvis vi for eksempel vil bruge Scanner-objektet, har vi en referencevariabel kaldet keyboard. Referencevariablen har ingen værdi. Den indeholder bare objektets hukommelsesadresse. Denne forklaring af objekt- og referencevariabler kan bedre forklares gennem en figur.

Skriv en simpel klasse (trin for trin)

Lad os nu begynde med vores første trinvise demonstration af at skabe en klasse, dens variabler og metoder. Her vil vi skrive vores klasse kaldet rektangel. Klasserektanglet vil have længden og bredden af ​​følgende felter. Rektangelklassen vil også have nogle funktioner som getArea.

Lad os begynde med vores java-kode til beskrivelsen.

public class Rectangle
 {
  //keyword private is an access specifier
  private double length;
  private double width;
  
  /**
 The setLength method stores a value in the
 length field.
 @param length The value to store in length.
 */

  public void setLength(double length)
  {
   this.length = length;
  }
 /**
 The setWidth method stores a value in the
 length field.
 @param width The value to store in width.
 */
   public void setWidth(double width)
  {
   this.width = width;
  }

 /**The getArea method returns a Rectangle
 object's area.
 @return The product of length times width
 */
  public void getArea()
  {
  	return length*width;
  }
 }

Den private specificator betyder, at vi ikke kan bruge variablerne (længde, bredde) uden for klassen. Den offentlige specificator betyder, at vi kan kalde metoderne uden for klassen.

Vi vil derefter teste funktionerne skrevet i rektangelklassen ved at oprette en hovedmetode og derefter oprette et rektangelobjekt.

/**
 This program demonstrates the Rectangle class's
 setLength and setWidth method.
 */

 public class Demo
 {
 public static void main(String[] args)
 {
 // Create a Rectangle object and assign its
 // address to the box variable.

 Rectangle box = new Rectangle();

 // Indicate what we are doing.
 System.out.println("Sending the value 10.0 " +
 "to the setLength method.");
 System.out.println("Sending the value 20.0 " +
 "to the setWidth method.");

 // Call the box object's setLength method.
 box.setLength(10.0);
 box.setWidth(20.0);
 // Display the area.
 System.out.println("The box's area is " +
 box.getArea());
 // Indicate we are done.
 System.out.println("Done.");
 }
 }
 

Ovenstående kode skal gemmes i samme mappe som rektangelklassen, og så kan vi køre følgende kommando for at kompilere programmet.

javac Demo.java

Lad os nedbryde koden for at få en dybere forståelse af, hvordan objekter og klasser fungerer – erklæringen.

Rectangle box = new Rectangle();

Kommandoen erklærer en variabel kaldet box, og variablens datatype er et rektangel. Det nye nøgleord bruges til at oprette et objekt i hukommelsen. Når denne sætning er udført, refererer variabelboksen til det objekt, der er oprettet i hukommelsen, som vist.

Efter at vi har sat længden til 10 og sat med til 20, ændres boksobjektets tilstand.

Undgå uaktuelle data

Nu må du undre dig over, hvorfor området af rektanglet ikke er gemt, som længden og bredden. Området opbevares ikke på en mark, fordi det kan blive forældet. Når værdien af ​​en vare afhænger af andre data, og varen ikke opdateres, når dataene opdateres, bliver varen forældet.

Konstruktører

Hvad er konstruktører? Nå, konstruktører er en afgørende del af en klasse. En konstruktør kaldes automatisk, når en forekomst af klassen oprettes. Har du nogensinde undret dig over, hvorfor konstruktører kaldes konstruktører? Det er fordi de hjælper med at konstruere et objekt. En konstruktør har samme navn som klassen og har ingen returtype, fordi konstruktører ikke udføres af eksplicitte metodekald og ikke kan returnere en værdi.

Et eksempel på, hvordan konstruktører arbejder i klasser, er vist nedenfor:

/**
 Rectangle class
 */

 public class Rectangle
 {
  private double length;
  private double width;

 /**
 Constructor
 @param l The length of the rectangle.
 @param w The width of the rectangle.
 */

 public Rectangle(double l, double w)
 {
 length = l;
 width = w;
 }
 }

Konstruktøren vist ovenfor er parametriseret, og dens demonstration er vist i hovedfunktionen.

/**
 This program demonstrates the Rectangle class's
 constructor.
 */

 public class ConstructorDemo
 {
 public static void main(String[] args)
 {
 // Create a Rectangle object, passing 5.0 and
 // 15.0 as arguments to the constructor.
 Rectangle box = new Rectangle(5.0, 15.0);

 // Display the length.
 System.out.println("The box's length is " +
 box.getLength());

 // Display the width.
 System.out.println("The box's width is " +
 box.getWidth());

 // Display the area.
 System.out.println("The box's area is " +
 box.getArea());
 }
 }

I demonstrationen er længden og bredden sat til henholdsvis 5,0 og 15,0, og resultatet af området kommer ud til at være 5*15 =75.

En konstruktør, der ikke accepterer argumenter, kaldes no-arg konstruktøren. Derfor er standardkonstruktøren også en no-arg konstruktør. En standardkonstruktør oprettes, når der ikke er nogen konstruktør i klassen.

UML-diagram

Når vi designer en klasse, kan vi bruge UML-diagrammet. UML står for Unified Modeling Language og afbilder klasser i et objektorienteret system. Så hvordan ser en UML ud?

Den første sektion i UML'en indeholder klassenavnet. Den anden sektion har felterne, dvs. variablerne, og den tredje sektion indeholder metoderne.

I UML-diagrammet har vi nogle notationer. For at give adgangsspecifikationen besked om en variabel eller en metode, har vi et +, – tegn.

// private access specifier depicted by a - sign and datatype is double
-length: double

Variablerne længde og bredde er private, fordi de starter med et – tegn og deres returtype er dobbelt.

// public specifier is depicted by a + sign
// function has a return type void
// function takes in argument called length which has a return type double
+ setLength(length:double):void

Alle klassemetoderne i UML er offentlige metoder, da de har et +-tegn i starten af ​​metoden.

Konklusion

Det handler om vores introduktionsvejledning om, hvordan objekter og klasser fungerer i Java. Hold dig opdateret på Code Underscored for at blive ved med at lære mere om klasser og objekter i Java – flere guider på vej!


Java tag