I Java er klasser og objekter grundlæggende begreber for objektorienteret programmering (OOP'er), der bruges til at repræsentere virkelige begreber og entiteter. Klassen repræsenterer en gruppe af objekter med lignende egenskaber og adfærd. For eksempel dyretypen Hund er en klasse, mens en bestemt hund hedder Tommy er et objekt af Hund klasse.
I denne artikel vil vi diskutere Java-objekter og -klasser, og hvordan man implementerer dem i vores program.
Java klasser
En klasse i Java er et sæt objekter, som deler fælles egenskaber/adfærd og fælles egenskaber/attributter. Det er en brugerdefineret blueprint eller prototype, hvorfra objekter oprettes. For eksempel er Student en klasse, mens en bestemt elev ved navn Ravi er et objekt.
Egenskaber for Java-klasser
- Klasse er ikke en virkelighed. Det er blot en skabelon eller en blueprint eller prototype, som objekter er skabt ud fra.
- Klassen optager ikke hukommelsen.
- Klasse er en gruppe af variabler af forskellige datatyper og en gruppe af metoder.
- En klasse i Java kan indeholde:
- Data medlem
- Metode
- Konstruktør
- Indlejret klasse
- Interface
Klasseerklæring i Java
access_modifier class < class_name>{ data medlem; metode; konstruktør; indlejret klasse; grænseflade; }>
Eksempel på Java-klasse
Java
// Java Program for class example> class> Student {> > // data member (also instance variable)> > int> id;> > // data member (also instance variable)> > String name;> > public> static> void> main(String args[])> > {> > // creating an object of> > // Student> > Student s1 => new> Student();> > System.out.println(s1.id);> > System.out.println(s1.name);> > }> }> |
>
>
Java
// Java program to Illustrate Creation of Object> // Using new Instance> // Main class> class> GFG {> > // Declaring and initializing string> > String name => 'GeeksForGeeks'> ;> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Try block to check for exceptions> > try> {> > Class cls = Class.forName(> 'GFG'> );> > // Creating object of main class> > // using instance method> > GFG obj = (GFG)cls.newInstance();> > // Print and display> > System.out.println(obj.name);> > }> > catch> (ClassNotFoundException e) {> > e.printStackTrace();> > }> > catch> (InstantiationException e) {> > e.printStackTrace();> > }> > catch> (IllegalAccessException e) {> > e.printStackTrace();> > }> > }> }> |
>
>
objekt til jsonobject java
Java
// Java program to Illustrate Creation of Object> // Using clone() method> // Main class> // Implementing Cloneable interface> class> GFG> implements> Cloneable {> > // Method 1> > @Override> > protected> Object clone()> > throws> CloneNotSupportedException> > {> > // Super() keyword refers to parent class> > return> super> .clone();> > }> > String name => 'GeeksForGeeks'> ;> > // Method 2> > // main driver method> > public> static> void> main(String[] args)> > {> > GFG obj1 => new> GFG();> > // Try block to check for exceptions> > try> {> > GFG obj2 = (GFG)obj1.clone();> > System.out.println(obj2.name);> > }> > catch> (CloneNotSupportedException e) {> > e.printStackTrace();> > }> > }> }> |
>
>
Udgang 1
0 null>
Udgang 2
GeeksForGeeks>
Udgang 3
GeeksForGeeks>
Komponenter af Java-klasser
Generelt kan klasseerklæringer omfatte disse komponenter, i rækkefølge:
- Modifikatorer : En klasse kan være offentlig eller har standardadgang (se det her for detaljer).
- Klasse søgeord: class nøgleord bruges til at oprette en klasse.
- Klassenavn: Navnet skal begynde med et begyndelsesbogstav (med stort bogstav efter konvention).
- Superklasse (hvis nogen): Navnet på klassens forælder (superklasse), hvis nogen, efter nøgleordet udvider. En klasse kan kun udvide (underklasse) én forælder.
- Interfaces (hvis nogen): En kommasepareret liste over grænseflader implementeret af klassen, hvis nogen, efterfulgt af nøgleordet implementerer. En klasse kan implementere mere end én grænseflade.
- Legeme: Klassens krop er omgivet af seler, { }.
Konstruktører bruges til at initialisere nye objekter. Felter er variabler, der angiver klassens og dens objekters tilstand, og metoder bruges til at implementere klassens og dens objekters adfærd.
Der er forskellige typer klasser, der bruges i realtidsapplikationer som f.eks indlejrede klasser , anonyme klasser , og lambda udtryk .
Java objekter
Et objekt i Java er en grundlæggende enhed i objektorienteret programmering og repræsenterer virkelige entiteter. Objekter er forekomster af en klasse, der er oprettet for at bruge en klasses attributter og metoder. Et typisk Java-program skaber mange objekter, der som bekendt interagerer ved at påkalde metoder. Et objekt består af:
- Stat : Det er repræsenteret af attributter for et objekt. Det afspejler også et objekts egenskaber.
- Opførsel : Det er repræsenteret af et objekts metoder. Det afspejler også et objekts respons med andre objekter.
- Identitet : Det giver et unikt navn til et objekt og gør det muligt for et objekt at interagere med andre objekter.
Eksempel på en genstand: hund
Java objekter
Objekter svarer til ting, der findes i den virkelige verden. For eksempel kan et grafikprogram have objekter som cirkel, firkant og menu. Et online indkøbssystem kan have objekter som indkøbskurv, kunde og produkt.
Bemærk: Når vi opretter et objekt, som er en ikke-primitiv datatype, allokeres det altid til heap-hukommelsen.
Erklæring af objekter (også kaldet at instansiere en klasse)
Når et objekt af en klasse er oprettet, siges klassen at være instansieret . Alle forekomsterne deler klassens egenskaber og adfærd. Men værdierne af disse attributter, dvs. tilstanden, er unikke for hvert objekt. En enkelt klasse kan have et hvilket som helst antal forekomster.
Eksempel:
alfabet som tal
Java-objekterklæring
Som vi erklærer variabler som (typenavn;). Dette meddeler compileren, at vi vil bruge navnet til at henvise til data, hvis type er type. Med en primitiv variabel reserverer denne erklæring også den korrekte mængde hukommelse til variablen. Så for referencevariabler skal typen strengt taget være et konkret klassenavn. Generelt har vi kan ikke skabe objekter af en abstrakt klasse eller en grænseflade.
Dog tuffy;>
Hvis vi erklærer en referencevariabel(tuffy) som denne, vil dens værdi være ubestemt(null), indtil et objekt faktisk er oprettet og tildelt det. Blot at erklære en referencevariabel opretter ikke et objekt.
Initialisering af et Java-objekt
Den nye operator instansierer en klasse ved at allokere hukommelse til et nyt objekt og returnere en reference til denne hukommelse. Den nye operatør kalder også klassekonstruktøren.
Eksempel:
Java
// Class Declaration> public> class> Dog {> > // Instance Variables> > String name;> > String breed;> > int> age;> > String color;> > // Constructor Declaration of Class> > public> Dog(String name, String breed,> int> age,> > String color)> > {> > this> .name = name;> > this> .breed = breed;> > this> .age = age;> > this> .color = color;> > }> > // method 1> > public> String getName() {> return> name; }> > // method 2> > public> String getBreed() {> return> breed; }> > // method 3> > public> int> getAge() {> return> age; }> > // method 4> > public> String getColor() {> return> color; }> > @Override> public> String toString()> > {> > return> (> 'Hi my name is '> +> this> .getName()> > +> '.
My breed,age and color are '> > +> this> .getBreed() +> ','> +> this> .getAge()> > +> ','> +> this> .getColor());> > }> > public> static> void> main(String[] args)> > {> > Dog tuffy> > => new> Dog(> 'tuffy'> ,> 'papillon'> ,> 5> ,> 'white'> );> > System.out.println(tuffy.toString());> > }> }> |
>
>Produktion
Hi my name is tuffy. My breed,age and color are papillon,5,white>
Initialiser ved at bruge metode/funktion:
Java
public> class> GFG {> > // sw=software> > static> String sw_name;> > static> float> sw_price;> > static> void> set(String n,> float> p)> > {> > sw_name = n;> > sw_price = p;> > }> > static> void> get()> > {> > System.out.println(> 'Software name is: '> + sw_name);> > System.out.println(> 'Software price is: '> > + sw_price);> > }> > public> static> void> main(String args[])> > {> > GFG.set(> 'Visual studio'> ,> 0> .0f);> > GFG.get();> > }> }> |
>
>Produktion
Software name is: Visual studio Software price is: 0.0>
Denne klasse indeholder en enkelt konstruktør. Vi kan genkende en konstruktør, fordi dens erklæring bruger samme navn som klassen, og den har ingen returtype. Java-kompileren differentierer konstruktørerne baseret på antallet og typen af argumenter. Konstruktøren i Hund klasse tager fire argumenter. Følgende erklæring giver tuffy, papillon, 5 og hvid som værdier for disse argumenter:
Dog tuffy = new Dog('tuffy','papillon',5, 'white');>
Resultatet af at udføre denne erklæring kan illustreres som:
Hukommelsesallokering af Java-objekter
Bemærk: Alle klasser har mindst en konstruktør. Hvis en klasse ikke eksplicit erklærer nogen, giver Java-kompileren automatisk en no-argument constructor, også kaldet standard constructor. Denne standardkonstruktør kalder klasseforælderens no-argument-konstruktør (da den kun indeholder én sætning, dvs. super();), eller Objekt klassekonstruktør, hvis klassen ikke har nogen anden forælder (da Object-klassen er forælder for alle klasser enten direkte eller indirekte).
Måder at skabe et objekt i en klasse
Der er fire måder at oprette objekter på i Java. Strengt taget er der kun én måde (ved at bruge en ny søgeord), og resten internt bruger en ny søgeord.
1. Brug af nyt søgeord
Det er den mest almindelige og generelle måde at oprette et objekt på i Java.
Eksempel:
// creating object of class Test Test t = new Test();>
2. Brug af metoden Class.forName(String className).
Der er en foruddefineret klasse i java.lang-pakken med navnet Klasse. Metoden forName(String className) returnerer det Class-objekt, der er knyttet til klassen med det givne strengnavn. Vi skal give et fuldt kvalificeret navn til en klasse. Ved kald af metoden new Instance() på dette klasseobjekt returnerer en ny forekomst af klassen med det givne strengnavn.
// creating object of public class Test // consider class Test present in com.p1 package Test obj = (Test)Class.forName('com.p1.Test').newInstance();>
3. Brug af clone() metode
clone() metode er til stede i klassen Object. Den opretter og returnerer en kopi af objektet.
// creating object of class Test Test t1 = new Test(); // creating clone of above object Test t2 = (Test)t1.clone();>
4. Deserialisering
De-serialisering er en teknik til at læse et objekt fra den gemte tilstand i en fil. Henvise til Serialisering/de-serialisering i Java
FileInputStream file = new FileInputStream(filename); ObjectInputStream in = new ObjectInputStream(file); Object obj = in.readObject();>
Oprettelse af flere objekter af kun én type (en god praksis)
I realtid har vi brug for forskellige objekter i en klasse i forskellige metoder. Det er ikke en god praksis at oprette et antal referencer til lagring af dem, og derfor erklærer vi en statisk referencevariabel og bruger den, når det er nødvendigt. I dette tilfælde er spild af hukommelse mindre. De objekter, der ikke længere refereres til, vil blive ødelagt af Skraldemand af Java.
java sammenligne strenge
Eksempel:
Test test = new Test(); test = new Test();>
I arvesystemet bruger vi en overordnet klassereferencevariabel til at gemme et underklasseobjekt. I dette tilfælde kan vi skifte til forskellige underklasseobjekter ved hjælp af den samme refererede variabel.
Eksempel:
class Animal {} class Dog extends Animal {} class Cat extends Animal {} public class Test { // using Dog object Animal obj = new Dog(); // using Cat object obj = new Cat(); }>
Anonyme objekter i Java
Anonyme objekter er objekter, der instansieres, men som ikke er gemt i en referencevariabel.
- De bruges til øjeblikkelige metodekald.
- De vil blive ødelagt efter metodekald.
- De er meget brugt i forskellige biblioteker. I AWT-biblioteker bruges de f.eks. til at udføre en handling på at fange en hændelse (f.eks. et tastetryk).
- I eksemplet nedenfor, når der trykkes på en nøgleknap (refereret til af btn), opretter vi simpelthen et anonymt objekt af EventHandler-klassen for blot at kalde handle-metoden.
btn.setOnAction(new EventHandler() { public void handle(ActionEvent event) { System.out.println('Hello World!'); } });>
Forskellen mellem Java Class og Objects
Forskellene mellem klasse og objekt i Java er som følger:
klasse | Objekt |
---|---|
Klasse er tegningen af et objekt. Det bruges til at skabe objekter. | Et objekt er en instans af klassen. |
Ingen hukommelse tildeles, når en klasse erklæres. | Hukommelse allokeres, så snart et objekt er oprettet. |
En klasse er en gruppe af lignende objekter. | Et objekt er en virkelighed, såsom en bog, bil osv. |
Klasse er en logisk enhed. | Et objekt er en fysisk enhed. |
En klasse kan kun erklæres én gang. | Objekter kan oprettes mange gange efter behov. |
Et eksempel på klasse kan være en bil. | Objekter i klassebilen kan være BMW, Mercedes, Ferrari osv. |