Javassa luokat ja objektit ovat Object Oriented Programming (OOP:t) peruskäsitteitä, joita käytetään edustamaan todellisia käsitteitä ja kokonaisuuksia. Luokka edustaa ryhmää objekteja, joilla on samanlaiset ominaisuudet ja käyttäytyminen. Esimerkiksi eläintyyppi Koira on luokka, kun tietty koira on nimetty Tommy on kohde Koira luokkaa.
Tässä artikkelissa käsittelemme Java-objekteja ja -luokkia sekä niiden toteuttamista ohjelmassamme.
Java-luokat
Java-luokka on joukko objekteja, joilla on yhteiset ominaisuudet/käyttäytyminen ja yhteiset ominaisuudet/attribuutit. Se on käyttäjän määrittelemä suunnitelma tai prototyyppi, josta objektit luodaan. Esimerkiksi Opiskelija on luokka, kun taas tietty opiskelija nimeltä Ravi on objekti.
Java-luokkien ominaisuudet
- Luokka ei ole todellinen kokonaisuus. Se on vain malli tai suunnitelma tai prototyyppi, josta objektit luodaan.
- Luokka ei vie muistia.
- Luokka on ryhmä erilaisia tietotyyppejä ja menetelmiä.
- Java-luokka voi sisältää:
- Datan jäsen
- Menetelmä
- Rakentaja
- Sisäkkäinen luokka
- Käyttöliittymä
Luokkailmoitus Javassa
access_modifier class < class_name>{ datan jäsen; menetelmä; rakentaja; sisäkkäinen luokka; käyttöliittymä; }>
Esimerkki Java-luokasta
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();> > }> > }> }> |
>
>
js-asetuksen aikakatkaisu
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();> > }> > }> }> |
>
>
Lähtö 1
0 null>
Lähtö 2
GeeksForGeeks>
Lähtö 3
GeeksForGeeks>
Java-luokkien komponentit
Yleensä luokkailmoitukset voivat sisältää nämä komponentit seuraavassa järjestyksessä:
- Muokkaimet : Luokka voi olla julkinen tai sillä voi olla oletuskäyttöoikeus (katso Tämä yksityiskohtia varten).
- Luokan avainsana: luokan avainsanaa käytetään luomaan luokka.
- Luokan nimi: Nimen tulee alkaa alkukirjaimella (yleensä isolla kirjaimella).
- Superluokka (jos sellainen on): Luokan vanhemman (superluokan) nimi, jos sellainen on, jota edeltää avainsana extends. Luokka voi laajentaa (alaluokkaa) vain yhtä vanhempaa.
- Liitännät (jos on): Pilkuilla eroteltu luettelo luokan toteuttamista liitännöistä, jos sellaisia on ja jota edeltää avainsana implements. Luokka voi toteuttaa useamman kuin yhden käyttöliittymän.
- Runko: Luokan runkoa ympäröivät aaltosulut, { }.
Konstruktoreita käytetään uusien objektien alustamiseen. Kentät ovat muuttujia, jotka ilmoittavat luokan ja sen objektien tilan, ja menetelmiä käytetään toteuttamaan luokan ja sen objektien käyttäytymistä.
On olemassa erilaisia luokkia, joita käytetään reaaliaikaisissa sovelluksissa, kuten sisäkkäiset luokat , anonyymit luokat , ja lambda ilmaisuja .
Java-objektit
Java-olio on olio-ohjelmoinnin perusyksikkö ja edustaa tosielämän kokonaisuuksia. Objektit ovat luokan esiintymiä, jotka on luotu käyttämään luokan attribuutteja ja menetelmiä. Tyypillinen Java-ohjelma luo monia objekteja, jotka, kuten tiedät, ovat vuorovaikutuksessa menetelmien avulla. Objekti koostuu:
- Osavaltio : Sitä edustavat kohteen attribuutit. Se heijastaa myös kohteen ominaisuuksia.
- Käyttäytyminen : Sitä edustavat objektin menetelmät. Se heijastaa myös kohteen vastetta muihin objekteihin.
- Identiteetti : Se antaa objektille ainutlaatuisen nimen ja mahdollistaa yhden objektin vuorovaikutuksen muiden objektien kanssa.
Esimerkki esineestä: koira
Java-objektit
Esineet vastaavat todellisesta maailmasta löytyviä asioita. Esimerkiksi grafiikkaohjelmassa voi olla objekteja, kuten ympyrä, neliö ja valikko. Verkkokauppajärjestelmässä voi olla kohteita, kuten ostoskori, asiakas ja tuote.
Huomautus: Kun luomme objektin, joka on ei-primitiivinen tietotyyppi, se varataan aina kasamuistiin.
Objektien ilmoittaminen (kutsutaan myös luokan instantoimiseksi)
Kun luokan objekti luodaan, luokan sanotaan olevan instantoitu . Kaikki esiintymät jakavat luokan attribuutit ja käyttäytymisen. Mutta näiden attribuuttien arvot, eli tila, ovat yksilöllisiä jokaiselle objektille. Yhdellä luokalla voi olla mikä tahansa määrä esiintymiä.
Esimerkki:
Java-objektin ilmoitus
Kun julistamme muuttujia, kuten (tyypin nimi;). Tämä ilmoittaa kääntäjälle, että käytämme nimeä viittaamaan tietoihin, joiden tyyppi on tyyppi. Alkuperäisellä muuttujalla tämä ilmoitus varaa myös oikean määrän muistia muuttujalle. Joten viitemuuttujien tyypin on oltava tiukasti konkreettinen luokan nimi. Yleisesti ottaen me ei voi luoda abstraktin luokan tai käyttöliittymän objekteja.
Dog tuffy;>
Jos ilmoitamme viitemuuttujan (tuffy) tällä tavalla, sen arvo on määrittelemätön (nolla), kunnes objekti on todella luotu ja osoitettu sille. Yksinkertaisesti viitemuuttujan ilmoittaminen ei luo objektia.
Java-objektin alustus
Uusi operaattori instantoi luokan varaamalla muistia uudelle objektille ja palauttamalla viittauksen tähän muistiin. Uusi operaattori kutsuu myös luokan rakentajan.
Esimerkki:
Java
jos ja muuten bashissa
// 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());> > }> }> |
>
>Lähtö
Hi my name is tuffy. My breed,age and color are papillon,5,white>
Alusta käyttämällä menetelmää/toimintoa:
tiedostojärjestelmä linuxissa
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();> > }> }> |
>
>Lähtö
Software name is: Visual studio Software price is: 0.0>
Tämä luokka sisältää yhden rakentajan. Voimme tunnistaa konstruktorin, koska sen ilmoitus käyttää samaa nimeä kuin luokka ja sillä ei ole palautustyyppiä. Java-kääntäjä erottaa rakentajat argumenttien lukumäärän ja tyypin perusteella. Rakentaja vuonna Koira luokassa on neljä argumenttia. Seuraava lause tarjoaa arvot tuffy, papillon,5 ja white näille argumenteille:
Dog tuffy = new Dog('tuffy','papillon',5, 'white');>
Tämän lausunnon suorittamisen tulos voidaan havainnollistaa seuraavasti:
Java-objektien muistin allokointi
Huomautus: Kaikilla luokilla on vähintään yksi rakentaja. Jos luokka ei nimenomaisesti ilmoita mitään, Java-kääntäjä tarjoaa automaattisesti argumentoimattoman konstruktorin, jota kutsutaan myös oletuskonstruktoriksi. Tämä oletuskonstruktori kutsuu luokan ylätason argumentitonta konstruktoria (koska se sisältää vain yhden käskyn eli super();) tai Esine luokan konstruktori, jos luokalla ei ole toista yläpäätä (koska Object-luokka on kaikkien luokkien vanhempi joko suoraan tai epäsuorasti).
Tapoja luoda luokan objekti
Javassa on neljä tapaa luoda objekteja. Tarkkaan ottaen on vain yksi tapa (käyttämällä a Uusi avainsana), ja loput käyttävät sisäisesti a Uusi avainsana.
1. Uuden avainsanan käyttäminen
Se on yleisin ja yleisin tapa luoda objekti Javassa.
Esimerkki:
// creating object of class Test Test t = new Test();>
2. Class.forName(String className) -menetelmän käyttäminen
Java.lang-paketissa on ennalta määritetty luokka nimeltä Class. Metodi forName(String className) palauttaa Luokka-objektin, joka liittyy luokkaan, jolla on annettu merkkijononimi. Meidän on annettava luokalle täysin pätevä nimi. Kutsuttaessa uutta Instance()-metodia tässä Class-objektissa palauttaa luokan uuden ilmentymän annetulla merkkijononimellä.
// creating object of public class Test // consider class Test present in com.p1 package Test obj = (Test)Class.forName('com.p1.Test').newInstance();>
3. Clone()-menetelmän käyttö
clone() -menetelmä on läsnä Object-luokassa. Se luo ja palauttaa kopion objektista.
// creating object of class Test Test t1 = new Test(); // creating clone of above object Test t2 = (Test)t1.clone();>
4. Deserialisointi
Sarjanpoisto on tekniikka, jolla objekti luetaan tallennetusta tilasta tiedostossa. Viitata Serialisointi/de-serialisointi Javassa
FileInputStream file = new FileInputStream(filename); ObjectInputStream in = new ObjectInputStream(file); Object obj = in.readObject();>
Useiden objektien luominen vain yhden tyypin mukaan (hyvä käytäntö)
Reaaliajassa tarvitsemme luokan erilaisia objekteja eri menetelmissä. Useiden viitteiden luominen tallentamista varten ei ole hyvä käytäntö, ja siksi ilmoitamme staattisen viitemuuttujan ja käytämme sitä aina tarvittaessa. Tässä tapauksessa muistin hukka on pienempi. Objektit, joihin ei enää viitata, tuhoavat Roskankerääjä Javasta.
Esimerkki:
Test test = new Test(); test = new Test();>
Periytysjärjestelmässä käytämme emoluokan viitemuuttujaa aliluokan objektin tallentamiseen. Tässä tapauksessa voimme vaihtaa eri alaluokkaobjekteihin käyttämällä samaa viitattua muuttujaa.
Esimerkki:
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(); }>
Nimettömät objektit Javassa
Anonyymit objektit ovat objekteja, jotka on instantoitu, mutta joita ei ole tallennettu viitemuuttujaan.
- Niitä käytetään välittömiin menetelmäkutsuihin.
- Ne tuhotaan menetelmäkutsun jälkeen.
- Niitä käytetään laajasti eri kirjastoissa. Esimerkiksi AWT-kirjastoissa niitä käytetään suorittamaan jotakin tapahtuman tallentamiseen liittyvää toimintaa (esim. näppäinpainallus).
- Alla olevassa esimerkissä, kun näppäinpainiketta (johon viittaa btn) painetaan, luomme yksinkertaisesti EventHandler-luokan anonyymin objektin kahvamenetelmän kutsumista varten.
btn.setOnAction(new EventHandler() { public void handle(ActionEvent event) { System.out.println('Hello World!'); } });>
Ero Java-luokan ja objektien välillä
Erot luokan ja objektin välillä Javassa ovat seuraavat:
Luokka | Esine |
---|---|
Luokka on objektin suunnitelma. Sitä käytetään esineiden luomiseen. | Objekti on luokan esiintymä. |
Muistia ei varata, kun luokka ilmoitetaan. | Muisti varataan heti, kun objekti on luotu. |
Luokka on ryhmä samankaltaisia objekteja. | Esine on todellisen maailman kokonaisuus, kuten kirja, auto jne. |
Luokka on looginen kokonaisuus. | Objekti on fyysinen kokonaisuus. |
Luokka voidaan ilmoittaa vain kerran. | Objekteja voidaan luoda useita kertoja tarpeen mukaan. |
Esimerkki luokasta voi olla auto. | Luokan auton esineitä voivat olla BMW, Mercedes, Ferrari jne. |