Java söhbetdeşligi: OOP soraglary
1. Java-da haýsy aýratynlyklar bar?
Jogap:-
OOP düşünjeleri:
- obýektiň ugry;
- miras;
- encapsulation;
- polimorfizm;
- abstraksiýa.
-
Çyzgyly platforma: Java programmasy islendik üýtgetmesiz islendik platformada işledilip bilner. Size ýeke-täk zat gurnalan JVM (java wirtual maşyn).
-
Performanceokary öndürijilik: JIT (Just In Time compiler) ýokary öndürijilige mümkinçilik berýär. JIT bytekody maşyn kodyna öwürýär we JVM ýerine ýetirip başlaýar.
- Köp okamak: belli bolan ýerine ýetiriş sapagy
Thread
. JVM atly sapak döredýärmain thread
. Programmist, sapak synpyndan miras almak ýa-da interfeýs arkaly birnäçe sapak döredip bilerRunnable
.
2. Miras näme?
Miras, bir synpyň başga bir synpy miras alyp biljekdigini aňladýar (“ giňeldýär ”). Şeýlelik bilen, miras alýan synpyňyzdan kod ulanyp bilersiňiz.superclass
Bar bolan synp , bilinýän ýaly bilinýär subclass
. Şeýle hem aýdýarlar parent
we child
.
public class Animal {
private int age;
}
public class Dog extends Animal {
}
nirede Animal
we - . parent
_Dog
child
3. Gaplamak näme?
Bu sorag köplenç Java dörediji söhbetdeşliklerinde ýüze çykýar. Enkapsulýasiýa giriş üýtgeýjilerini, getterleri we sazlaýjylary ulanyp, durmuşa geçirmegi gizleýär. Bu, işläp düzüjileriň zerur hasaplaýan ýerlerinde daşarky ulanmak üçin girişi ýapmak üçin edilýär. Durmuşdan elýeterli mysal awtoulagdyr. Motoryň işleýşine gönüden-göni girip bilmeris. Biziň üçin iş açary otlamak we motory açmak. Kapotyň aşagynda haýsy prosesler amala aşyrylar, bu biziň işimiz däl. Mundan başga-da, bu işe gatyşmagymyz garaşylmadyk ýagdaýa getirip biler, bu sebäpli maşyny döwüp, özümize zyýan berip bileris. Programmirlemekde edil şol bir zat bolýar. Wikipediýada gowy suratlandyryldy . JavaRush- da encapsulation hakda makala hem bar .4. Polimorfizm näme?
Polimorfizm , programmanyň şol obýektiň belli bir görnüşi barada maglumat bolmazdan, şol bir interfeýsli obýektleri birmeňzeş ulanmak ukybydyr. Olaryň aýdyşy ýaly, bir interfeýs - köp ýerine ýetiriş. Polimorfizm bilen, umumy häsiýetlerine esaslanyp dürli görnüşli zatlary birleşdirip we ulanyp bilersiňiz. Mysal üçin, iki nesli bolan It we Pişik bolan Haýwan synpymyz bar. Umumy haýwanlar synpy hemmeler üçin umumy häsiýetdir - ses çykarmak. Haýwanlar synpynyň ähli nesillerini bir ýere jemläp, “ses çykarmak” usulyny ýerine ýetirmeli bolanymyzda, polimorfizmiň mümkinçiliklerinden peýdalanýarys. Görnüşi ýaly:List<Animal> animals = Arrays.asList(new Cat(), new Dog(), new Cat());
animals.forEach(animal -> animal.makeSound());
Şonuň üçin polimorfizm bize kömek edýär. Mundan başga-da, bu polimorf (aşa ýüklenen) usullara-da degişlidir. Polimorfizmi ulanmagyň amaly
Söhbetdeşlik soraglary - Java sintaksis
5. Java-da konstruktor näme?
Aşakdaky aýratynlyklar dogry:- Täze obýekt döredilende, programma munuň üçin degişli konstruktory ulanýar.
- Konstruktor usul ýalydyr. Onuň aýratynlygy, gaýdyp gelýän elementiň ýoklugy (boşlugy hem goşmak bilen) we ady synpyň ady bilen deňdir.
- Hiç bir konstruktor aç-açan ýazylmasa, boş konstruktor awtomatiki usulda dörediler.
- Konstruktoryň üstünden ýazylyp bilner.
- Parametrleri bolan konstruktor döredilen bolsa, ýöne parametrlersiz zerur bolsa, awtomatiki usulda döredilmänsoň, aýratyn ýazylmalydyr.
6. Haýsy iki synp Obýektden miras almaýar?
Prowokasiýa bilen aldanmaň, beýle synplar ýok: ähli synplar gönüden-göni ýa-da ata-babalaryň üsti bilen Obýekt synpyndan miras galypdyr!7. Localerli üýtgeýän näme?
Java dörediji bilen geçirilen söhbetdeşlik wagtynda başga bir meşhur sorag. Localerli üýtgeýji, usulyň içinde kesgitlenýän we usul ýerine ýetirilýänçä bar bolan üýtgeýjidir. Executionerine ýetiriş gutaransoň, ýerli üýtgeýji ýok bolar. Ine, esasy () usulynda helloMessage ýerli üýtgeýjisini ulanýan programma:public static void main(String[] args) {
String helloMessage;
helloMessage = "Hello, World!";
System.out.println(helloMessage);
}
8. Instant üýtgeýän näme?
Instant üýtgeýjisi, synpyň içinde kesgitlenýän üýtgeýjidir we obýekt bar bolýança bar. Mysal üçin iki üýtgeýän nektarCapacity we maxNectarCapacity bolan ary synpy:public class Bee {
/**
* Current nectar capacity
*/
private double nectarCapacity;
/**
* Maximal nectar that can take bee.
*/
private double maxNectarCapacity = 20.0;
...
}
9. Giriş üýtgedijileri näme?
Giriş üýtgedijileri synplara, usullara we üýtgeýänlere girişi sazlamaga mümkinçilik berýän guraldyr. Giriş mümkinçiligini artdyrmak üçin sargyt edilen aşakdaky üýtgedijiler bar:private
- usullar, meýdanlar we konstruktorlar üçin ulanylýar. Giriş derejesi diňe yglan edilen synpdyr.package-private(default)
- sapaklar üçin ulanylyp bilner. Diňe synp, usul, üýtgeýän, konstruktor yglan edilen belli bir bukjada giriň.protected
package-private
- üýtgediji bilen bir synpdan miras galan synplar üçin + bilen deň girişprotected
.public
- sapaklar üçin hem ulanylýar. Applicationhli programma boýunça doly giriş.
10. Artykmaç usullar näme?
Usul artykmaçlygy çaga ene-atasynyň özüni alyp barşyny üýtgetmek islän mahaly ýüze çykýar. Ene-atanyň usulyndaky zatlary ýerine ýetirmeli bolsaňyz, çagaňyzda super.methodName () ýaly gurluşy ulanyp bilersiňiz, bu ene-atanyň usulyny ýerine ýetirer we diňe logika goşar. Beerine ýetirilmeli talaplar:- usulyň goly birmeňzeş bolmaly;
- yzyna gaýtarmak bahasy birmeňzeş bolmaly.
11. Usul goly näme?
Usul goly, usulyň adynyň we usulyň kabul edýän argumentleriniň toplumydyr. Usul goly, aşa köp ýüklenende usul üçin özboluşly kesgitleýji.12. Artykmaç usul näme?
Usuly artykmaç ýüklemek polimorfizmiň häsiýetidir, onda usulyň goluny üýtgedip, şol bir hereketler üçin dürli usullary döredip bilersiňiz:- şol bir usulyň ady;
- dürli argumentler;
- başga bir gaýdyp geliş görnüşi bolup biler.
add()
zatlary ArrayList
aşa köp ýükläp bolýar we gelýän argumentlere baglylykda goşmaçany başgaça ýerine ýetirer:
add(Object o)
- diňe bir obýekt goşýar;add(int index, Object o)
- belli bir görkezijä obýekt goşýar;add(Collection<Object> c)
- obýektleriň sanawyny goşýar;add(int index, Collection<Object> c)
- belli bir indeksden başlap obýektleriň sanawyny goşýar.
13. Interfeýs näme?
Java-da birnäçe miras amala aşyrylmaýar, şonuň üçin bu meseläni ýeňip geçmek üçin interfeýsler goşuldy;) Uzak wagtlap interfeýslerde diňe durmuşa geçirilmezden usullar bardy. Bu jogabyň bir bölegi hökmünde, olar hakda gürleşeris. Mysal üçin:
public interface Animal {
void makeSound();
void eat();
void sleep();
}
Käbir nuanslar şundan gelýär:
- interfeýsdäki ähli usullar köpçülige we abstrakt;
- ähli üýtgeýjiler umumy statiki jemleýji;
- synplar miras almaýarlar (giňeldýärler), ýöne durmuşa geçirýärler (durmuşa geçirýärler). Mundan başga-da, isleýşiňiz ýaly köp interfeýsi durmuşa geçirip bilersiňiz.
- interfeýsi amala aşyrýan synplar, interfeýsdäki ähli usullaryň durmuşa geçirilmegini üpjün etmeli.
public class Cat implements Animal {
public void makeSound() {
// method implementation
}
public void eat() {
// implementation
}
public void sleep() {
// implementation
}
}
14. Interfeýsde deslapky usul näme?
Indi asyl usullar barada gürleşeliň. Näme üçin, kim üçin? Bu usullar hemme zady “siziňki we biziňki” etmek üçin goşuldy. Men näme hakda gürleşýärin? Hawa, bir tarapdan täze funksiýa goşmalydy: lambdas, Stream API, beýleki tarapdan, Java-yň meşhur bolan zadyny - yza gabat gelmegi goýmalydy. Munuň üçin interfeýslere taýýar çözgütleri girizmek zerur boldy. Ine, adaty usullar bize geldi. .Agny, deslapky usul açar sözi bolan interfeýsde ýerine ýetirilen usuldyrdefault
. Mysal üçin, belli stream()
usul Collection
. Barlap görüň, bu interfeýs görünişi ýaly ýönekeý däl;). forEach()
Ora-da deň derejede belli usul Iterable
. Şeýle hem, adaty usullar goşulýança ýokdy. Theeri gelende aýtsak, bu hakda JavaRush- da okap bilersiňiz .
15. Onda iki sany birmeňzeş usuly nädip miras almaly?
Adaty usulyň nämedigi baradaky öňki jogaba esaslanyp, başga bir sorag berip bilersiňiz. Usullary interfeýslerde durmuşa geçirip bilýän bolsaňyz, teoretiki taýdan şol bir usul bilen iki interfeýsi durmuşa geçirip bilersiňiz we muny nädip etmeli? Bir usul bilen iki dürli interfeýs bar:interface A {
default void foo() {
System.out.println("Foo A");
}
}
interface B {
default void foo() {
System.out.println("Foo B");
}
}
Bu iki interfeýsi amala aşyrýan bir synp bar. foo()
Näbelliligiň öňüni almak we kody düzmek üçin synpdaky usuly ýok etmeli we diňe interfeýsleriň haýsydyr biriniň C
usulyny atlandyryp bileris - ýa-da . Justöne belli bir interfeýs usulyny nädip saýlamaly ýa-da ? Munuň ýaly gurluş bar : foo()
A
B
А
В
A.super.foo()
public class C implements A, B {
@Override
public void foo() {
A.super.foo();
}
}
ýa-da:
public class C implements A, B {
@Override
public void foo() {
B.super.foo();
}
}
Şeýlelik bilen, foo()
synp usuly interfeýsden deslapky usuly ýa-da interfeýs usulyny C
ulanar . foo()
A
foo()
B
16. Abstrakt usullar we synplar näme?
abstract
Java-da abstrakt synplary we usullary aňlatmak üçin ulanylýan ätiýaçlyk söz bar . Birinjiden, käbir kesgitlemeler. abstract
Abstrakt usul, abstrakt synpda açar söz bilen ýerine ýetirilmezden döredilen usul . .Agny, bu interfeýsdäki ýaly usul, diňe açar söz goşmak bilen, mysal üçin:
public abstract void foo();
abstract
Abstrakt synp, şeýle hem sözi bolan synpdyr :
public abstract class A {
}
Abstrakt synpyň birnäçe aýratynlygy bar:
- esasynda bir obýekt döredilip bilinmez;
- abstrakt usullary bolup biler;
- abstrakt usullary bolmazlygy mümkin.
17. Setir, setir gurluşykçysy we setir buferiniň arasynda näme tapawut bar?
GymmatlyklarString
yzygiderli simli howuzda saklanýar. Bir hatar döredilenden soň, bu howuzda peýda bolar. Ony pozmak mümkin bolmaz. Mysal üçin:
String name = "book";
... üýtgeýji setir basseýnine salgylanar Üznüksiz setir howzy Üýtgeýjiniň adyny başga bir baha goýsaňyz, aşakdakylary alarsyňyz:
name = "pen";
Yzygiderli setir howuz Şonuň üçin bu iki baha şol ýerde galar. Setir buferi:
- bahalar
String
stakada saklanýar. Bahasy üýtgedilse, täze baha köne bilen çalşyrylar; String Buffer
sinhronlaşdyrylan we şonuň üçin sapak howpsuz;- Threadüpüň howpsuzlygy sebäpli, iş tizligi köp islenýär.
StringBuffer name = "book";
Adyň gymmaty üýtgän badyna, stakanyň bahasy üýtgeýär: StringBuilder Edil şol bir zat StringBuffer
, diňe sapak howpsuz däl. Şonuň üçin onuň tizligi öňküsinden has ýokarydyr StringBuffer
.
18. Abstrakt synp bilen interfeýsiň arasynda näme tapawut bar?
Abstrakt synp:- abstrakt synplarda deslapky konstruktor bar; bu abstrakt synpyň çagasy her gezek döredilende diýilýär;
- abstrakt we abstrakt däl usullary öz içine alýar. Umuman aýdanyňda, abstrakt usullary öz içine alyp bilmez, ýöne abstrakt synp bolup biler;
- abstraktdan miras galan synp diňe abstrakt usullary durmuşa geçirmeli;
- abstrakt synpda dessine üýtgeýji bolup biler (5-nji soraga serediň).
- konstruktory ýok we başlap bolmaz;
- diňe abstrakt usullar goşulmalydyr (deslapky usullary hasaba almazdan);
- interfeýsi amala aşyrýan synplar ähli usullary durmuşa geçirmeli (deslapky usullary hasaba almazdan);
- interfeýslerde diňe yzygiderlilik bolup biler.
19. Näme üçin bir massiwdäki elemente girmek O (1) alýar?
Bu sorag sözüň doly manysynda soňky söhbetdeşlikden. Soň öwrenişim ýaly, bu sorag adamyň nähili pikir edýändigini görmek üçin berilýär. Bu bilimde amaly manylaryň azdygy düşnüklidir: diňe bu hakykaty bilmek ýeterlikdir. Ilki bilen, O (1) amalyň hemişe ýerine ýetirilende algoritmiň wagt çylşyrymlylygy üçin bellikdigini aýdyňlaşdyrmalydyrys . .Agny, bu bellik iň çalt ýerine ýetirilişdir. Bu soraga jogap bermek üçin, massiwler hakda bilýänlerimize düşünmeli? Bir massiw döretmek üçinint
aşakdakylary ýazmalydyrys:
int[] intArray = new int[100];
Bu ýazgydan birnäçe netije çykaryp bolar:
- Bir massiw döredilende onuň görnüşi belli bolýar. Görnüşi belli bolsa, massiwiň her öýjüginiň haýsy ululykda boljakdygy belli bolýar.
- Bu massiwiň ululygy belli.
ArrayList-de obýektlere girmek üçin O (1) nädip almaly?
Bu sorag derrew öňki soraga eýerýär. Bir massiw bilen işlänimizde we ol ýerde ilkinjiler bar bolsa, bu görnüşiň döredilende ululygynyň nämedigini öňünden bilýäris. Theöne suratdaky ýaly shema bar bolsa näme etmeli: we A görnüşli elementler bilen kolleksiýa döretmek we dürli amallary goşmak isleýäris - B, C, D:List<A> list = new ArrayList();
list.add(new B());
list.add(new C());
list.add(new D());
list.add(new B());
Bu ýagdaýda her öýjügiň ululygyna nädip düşünip bilersiňiz, sebäbi her bir obýekt üýtgeşik bolar we dürli goşmaça meýdanlar bolup biler (ýa-da düýbünden başgaça). Näme etmeli? Bu ýerde sorag bulaşdyrmak we bulaşdyrmak ýaly görnüşde berilýär. Aslynda kolleksiýanyň obýektleri saklamaýandygyny, diňe bu zatlara baglanyşykdygyny bilýäris. Linkshli baglanyşyklaryň ululygy birmeňzeş we belli. Şonuň üçin bu ýerdäki ýeri sanamak öňki soragdaky ýaly işleýär.
21. Awtobokslamak we gutusyny açmak
Taryhy fon: awtobokslamak we awto-boks JDK 5-iň esasy täzeliklerinden biridir. Awtobokslamak, başlangyç görnüşden degişli örtük synpyna awtomatiki öwrülişdir. Awtomatik gutulmak - awto-boksyň tersini edýär - örtük synpyny başlangyç görnüşe öwürýär. Aöne örtük bahasy bar bolsanull
, gaplamak wagtynda kadadan çykma bolar NullPointerException
.
Ilkinji gabat gelýän - örtük
Ilkinji | Wrapper synpy |
---|---|
boolean | Boolean |
int | Bitewi |
baýt | Baýt |
char | Nyşan |
ýüzmek | Float |
uzyn | Uzyn |
gysga | Gysga |
goşa | Iki gezek |
Awtomatiki usulda ýüze çykýar:
-
örtük synpyna başlangyç salgylanma berlende:
Java 5-den öň:
//manual packaging or how it was BEFORE Java 5. public void boxingBeforeJava5() { Boolean booleanBox = new Boolean(true); Integer intBox = new Integer(3); // and so on to other types } после Java 5: //automatic packaging or how it became in Java 5. public void boxingJava5() { Boolean booleanBox = true; Integer intBox = 3; // and so on to other types }
-
örtügine garaşýan usula argument hökmünde başlangyç geçende:
public void exampleOfAutoboxing() { long age = 3; setAge(age); } public void setAge(Long age) { this.age = age; }
Awtomatik açmak bolýar:
-
örtük synpyna başlangyç üýtgeýjini bellänimizde:
//before Java 5: int intValue = new Integer(4).intValue(); double doubleValue = new Double(2.3).doubleValue(); char c = new Character((char) 3).charValue(); boolean b = Boolean.TRUE.booleanValue(); //and after JDK 5: int intValue = new Integer(4); double doubleValue = new Double(2.3); char c = new Character((char) 3); boolean b = Boolean.TRUE;
-
Arifmetiki amallar bolan ýagdaýlarda. Olar diňe başlangyç görnüşlere degişlidir, munuň üçin primitiwlere gutulmak gerek.
// Before Java 5 Integer integerBox1 = new Integer(1); Integer integerBox2 = new Integer(2); // for comparison it was necessary to do this: integerBox1.intValue() > integerBox2.intValue() //в Java 5 integerBox1 > integerBox2
-
degişli primitiwi kabul edýän usul bilen örtüge geçirilende:
public void exampleOfAutoboxing() { Long age = new Long(3); setAge(age); } public void setAge(long age) { this.age = age; }
22. Iň soňky açar söz näme we ony nirede ulanmaly?
Açar sözfinal
üýtgeýjiler, usullar we synplar üçin ulanylyp bilner.
- Soňky üýtgeýjini başga bir obýekte geçirip bolmaz.
- jemleýji synp steril)) mirasdüşerleri bolup bilmez.
- gutarnykly usuly ata-babanyň üstünden ýazyp bolmaz.
soňky üýtgeýjiler
; Java üýtgeýjini döretmek we oňa belli bir baha bermek üçin bize iki ýol berýär:- Üýtgeýjini yglan edip, soň başlap bilersiňiz.
- Üýtgeýjini yglan edip, derrew belläp bilersiňiz.
public class FinalExample {
//final static variable, which is immediately initialized:
final static String FINAL_EXAMPLE_NAME = "I'm likely final one";
//final is a variable that is not initialized, but will only work if
//initialize this in the constructor:
final long creationTime;
public FinalExample() {
this.creationTime = System.currentTimeMillis();
}
public static void main(String[] args) {
FinalExample finalExample = new FinalExample();
System.out.println(finalExample.creationTime);
// final field FinalExample.FINAL_EXAMPLE_NAME cannot be assigned
// FinalExample.FINAL_EXAMPLE_NAME = "Not you're not!";
// final field Config.creationTime cannot be assigned
// finalExample.creationTime = 1L;
}
}
Jemleýji üýtgeýjini hemişelik hasaplap bolarmy?
Soňky üýtgeýjä täze baha belläp bilmejekdigimiz sebäpli, bular hemişelik üýtgeýänler ýaly. Thisöne bu diňe ilkinji seredişde. Üýtgeýjiniň maglumat görnüşi bolsaimmutable
, hawa, hemişelik. Emma maglumatlaryň görnüşi mutable
üýtgeýän bolsa, usullary we üýtgeýjileri ulanyp, üýtgeýjiniň görkezýän obýektiniň bahasyny üýtgedip bolar final
we bu ýagdaýda hemişelik diýip bolmaz. Şeýlelikde, mysal soňky üýtgeýänleriň käbiri hakykatdanam üýtgewsizdigini görkezýär, ýöne käbirleri ýok we üýtgedilip bilner.
public class FinalExample {
//immutable final variables:
final static String FINAL_EXAMPLE_NAME = "I'm likely final one";
final static Integer FINAL_EXAMPLE_COUNT = 10;
// mutable filter variables
final List<String> addresses = new ArrayList();
final StringBuilder finalStringBuilder = new StringBuilder("constant?");
}
Finalerli jemleýji üýtgeýjiler
final
Usulyň içinde üýtgeýji döredilende, oňa üýtgeýji local final
diýilýär:
public class FinalExample {
public static void main(String[] args) {
// This is how you can
final int minAgeForDriveCar = 18;
// or you can do it this way, in the foreach loop:
for (final String arg : args) {
System.out.println(arg);
}
}
}
final
Açar sözi giňeldilen aýlawda ulanyp bileris for
, sebäbi aýlawyň gaýtalanmagy tamamlanandan soň for
her gezek täze üýtgeýji döredilýär. Emma bu aýlaw üçin adaty bir zat üçin ulanylmaýar, şonuň üçin aşakdaky kody düzmek üçin ýalňyşlyk goýberer.
// final local changed j cannot be assigned
for (final int i = 0; i < args.length; i ++) {
System.out.println(args[i]);
}
Jemleýji synp
Declaredaly yglan edilen synpy uzaldyp bilmersiňizfinal
. Plyönekeý söz bilen aýdylanda, hiç bir synp bu synpdan miras alyp bilmez. final
JDK-da synpyň ajaýyp mysaly String
. final
Üýtgemez synp döretmek üçin ilkinji ädim , ony uzaldyp bolmaz ýaly bellemekdir :
public final class FinalExample {
}
// Compilation error here
class WantsToInheritFinalClass extends FinalExample {
}
Jemleýji usullar
Haçan-da bir usul gutarnykly bellenilse, oňa soňky usul diýilýär (logiki, şeýlemi?). Jemleýji usuly nesil synpynda ýok edip bolmaz. Theeri gelende aýtsak, Obýekt synpyndaky usullar - garaşyň () we habar beriň () - gutarnykly, şonuň üçin olary ýok etmek mümkinçiligimiz ýok.public class FinalExample {
public final String generateAddress() {
return "Some address";
}
}
class ChildOfFinalExample extends FinalExample {
// compile error here
@Override
public String generateAddress() {
return "My OWN Address";
}
}
Java-da finaly nädip we nirede ulanmaly
- käbir synp derejesindäki yzygiderliligi kesgitlemek üçin iň soňky açar sözden peýdalanyň;
- obýektleriň üýtgedilmegini islemeýän wagtyňyzda soňky üýtgeýjileri dörediň. Mysal üçin, hasaba alyş maksatlary üçin ulanyp boljak obýektlere mahsus aýratynlyklar;
- synpyň uzaldylmagyny islemeýän bolsaňyz, ony gutarnykly diýip belläň;
- üýtgewsiz <synp döretmeli bolsa, ony gutarnykly etmeli;
- usulyň durmuşa geçirilmegini onuň nesillerinde üýtgetmezlik isleseňiz, usuly şeýle kesgitläň
final
. Bu ýerine ýetirilişiň üýtgemezligini üpjün etmek üçin örän möhümdir.
23. Üýtgedip bolmajak näme?
Üýtgeýän
Üýtgeýän zatlar, ýagdaýlar we üýtgeýjiler döredilenden soň üýtgedilip bilinýän obýektlerdir. Mysal üçin, StringBuilder, StringBuffer ýaly sapaklar. Mysal:public class MutableExample {
private String address;
public MutableExample(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
// this setter can change the name field
public void setAddress(String address) {
this.address = address;
}
public static void main(String[] args) {
MutableExample obj = new MutableExample("first address");
System.out.println(obj.getAddress());
// update the name field, so this is a mutable object
obj.setAddress("Updated address");
System.out.println(obj.getAddress());
}
}
Üýtgemez
Üýtgemeýän zatlar, obýekt döredilenden soň ýagdaýy we üýtgeýjileri üýtgedilip bilinmeýän zatlardyr. Näme üçin HashMap üçin ajaýyp açar däl, şeýlemi?) Mysal üçin, Setir, Integer, Double we ş.m. Mysal:// make this class final so no one can change it
public final class ImmutableExample {
private String address;
ImmutableExample (String address) {
this.address = address;
}
public String getAddress() {
return address;
}
//remove the setter
public static void main(String[] args) {
ImmutableExample obj = new ImmutableExample("old address");
System.out.println(obj.getAddress());
// Therefore, do not change this field in any way, so this is an immutable object
// obj.setName("new address");
// System.out.println(obj.getName());
}
}
24. Üýtgemeýän synpy nädip ýazmaly?
Üýtgeýän we üýtgemeýän zatlaryň nämedigine göz ýetireniňizden soň, indiki sorag tebigy - ony nädip ýazmaly? Üýtgemez synpy ýazmak üçin ýönekeý ädimleri ýerine ýetirmeli:- synpy jemläň.
- ähli meýdanlary şahsylaşdyryň we olar üçin diňe girdeji alyň. Elbetde, sazlaýjylar hökman däl.
- Bahasy diňe bir gezek kesgitlenip bilner ýaly, üýtgeýän meýdanlaryň hemmesini jemläň.
- çuňňur göçürmäni ýerine ýetirip, konstruktoryň üsti bilen ähli meýdanlary başlaň (ýagny obýektiň özüni, üýtgeýänlerini, üýtgeýänleriň üýtgeýänlerini we ş.m.)
- klonlarda üýtgeýän üýtgeýän obýektler, hakyky obýektlere salgylanmalar däl-de, diňe bahalaryň nusgalaryny yzyna gaýtarmak üçin.
/**
* An example of creating an immutable object.
*/
public final class FinalClassExample {
private final int age;
private final String name;
private final HashMap<String, String> addresses;
public int getAge() {
return age;
}
public String getName() {
return name;
}
/**
* Clone the object before returning it.
*/
public HashMap<String, String> getAddresses() {
return (HashMap<String, String>) addresses.clone();
}
/**
* In the constructor, deep copy the mutable objects.
*/
public FinalClassExample(int age, String name, HashMap<String, String> addresses) {
System.out.println("Performing a deep copy in the constructor");
this.age = age;
this.name = name;
HashMap<String, String> temporaryMap = new HashMap<>();
String key;
Iterator<String> iterator = addresses.keySet().iterator();
while (iterator.hasNext()) {
key = iterator.next();
temporaryMap.put(key, addresses.get(key));
}
this.addresses = temporaryMap;
}
}
GO TO FULL VERSION