JavaRush /Блоги Java /Random-TG /Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java. Қисми 1...
Roman Beekeeper
Сатҳи

Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java. Қисми 1

Дар гурӯҳ нашр шудааст
Салом ба ҳама, хонумҳо ва ҷанобон Муҳандисони нармафзор! Биёед дар бораи саволҳои мусоҳиба сӯҳбат кунем. Дар бораи он ки шумо бояд ба чӣ омода шавед ва чиро донед. Ин як сабаби хубест барои такрор ё омӯзиши ин нуктаҳо аз сифр. Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Қисми 1 - 1Ман як маҷмӯаи хеле васеи саволҳои зуд-зуд додашаванда дар бораи OOP, Java Syntax, истисноҳо дар Java, коллексияҳо ва мултипликатсия дорам, ки барои роҳат ман онҳоро ба чанд қисм тақсим мекунам. Муҳим:мо танҳо дар бораи versionҳои Java то 8 сӯҳбат хоҳем кард. Дар ин ҷо ҳама навовариҳои 9, 10, 11, 12, 13 ба назар гирифта намешаванд. Ҳама гуна фикру мулоҳизаҳо дар бораи беҳтар кардани ҷавобҳо қабул карда мешаванд . Хониши хушбахтона, биёед!

Мусоҳибаи Java: Саволҳои OOP

1. Java дорои кадом хусусиятҳо мебошад?

Ҷавоб:
  1. Консепсияҳои OOP:

    1. самти an object;
    2. мерос;
    3. капсулатсия;
    4. полиморфизм;
    5. абстракция.
  2. Кросс-платформа: Барномаи Java метавонад дар ҳама платформаҳо бидуни тағирот иҷро карда шавад. Ягона чизе, ки ба шумо лозим аст, JVM насбшуда (мошини виртуалии java) аст.

  3. Иҷрои баланд: JIT (Just In Time compiler) имкон медиҳад, ки иҷрои баланд. JIT bytecodeро ба рамзи мошин табдил медиҳад ва сипас JVM иҷроро оғоз мекунад.

  4. Multithreading: Риштаи иҷро бо номи Thread. JVM риштаеро бо номи main thread. Барномасоз метавонад тавассути мерос аз синфи Thread ё тавассути татбиқи интерфейс риштаҳои сершумор эҷод кунад Runnable.

2. Мерос чист?

Мерос маънои онро дорад, ки як синф метавонад синфи дигарро мерос гирад (“ васеъ мекунад ”). Бо ин роҳ шумо метавонед codeро аз синфе, ки аз он мерос гирифтаед, дубора истифода баред. Синфи мавҷуда бо номи superclass, ва синфи сохташуда бо номи subclass. Онхо инчунин мегуянд parentва child.
public class Animal {
   private int age;
}

public class Dog extends Animal {

}
Animalдар куҷост parentва Dog- child.

3. Инкапсуляция чист?

Ин савол аксар вақт ҳангоми мусоҳибаҳои таҳиягарони Java пайдо мешавад. Инкапсуляция иҷрокуниро бо истифода аз тағирдиҳандаҳои дастрасӣ, бо истифода аз гирандагон ва танзимкунандагон пинҳон мекунад. Ин барои бастани дастрасӣ ба истифодаи беруна дар ҷойҳое анҷом дода мешавад, ки таҳиягарон зарур мешуморанд. Мисоли дастрас аз ҳаёт як мошин аст. Мо ба кори двигатель бевосита дастрас надорем. Барои мо кор аз он иборат аст, ки калидро ба оташгиранда гузошта, моторро ба кор андозем. Ва кадом равандҳо дар зери сарпӯш сурат мегиранд, кори мо нест. Гузашта аз ин, дахолати мо ба ин фаъолият метавонад боиси вазъияти пешгӯинашаванда гардад, ки мо метавонем мошинро вайрон кунем ва ба худамон зарар расонем. Дар барномасозӣ маҳз ҳамин чиз рӯй медиҳад. Дар Википедиа хуб тавсиф шудааст . Инчунин мақола дар бораи инкапсуляция дар JavaRush мавҷуд аст .

4. Полиморфизм чист?

Полиморфизм ин қобorяти як барнома барои истифода бурдани an objectҳои дорои интерфейси якхела аст, бидуни маълумот дар бораи намуди мушаххаси ин an object. Тавре ки мегӯянд, як интерфейс - бисёр татбиқ. Бо полиморфизм, шумо метавонед намудҳои гуногуни an objectҳоро дар асоси рафтори умумии онҳо якҷоя ва истифода баред. Масалан, мо синфи Animal дорем, ки ду насл дорад - Саг ва Гурба. Синфи умумии Animal дорои як рафтори умумӣ барои ҳама аст - садо диҳед. Дар ҳолате, ки ба мо лозим аст, ки ҳамаи наслҳои синфи Ҳайвонҳоро якҷоя кунем ва усули "садо созем" -ро иҷро кунем, мо аз имкониятҳои полиморфизм истифода мебарем. Ин чунин хоҳад буд:
List<Animal> animals = Arrays.asList(new Cat(), new Dog(), new Cat());
animals.forEach(animal -> animal.makeSound());
Ҳамин тавр, полиморфизм ба мо кӯмак мекунад. Ғайр аз он, ин ба усулҳои полиморфӣ (аз ҳад зиёд пурбор) низ дахл дорад. Амалияи истифодаи полиморфизм

Саволҳои мусоҳиба - Синтаксиси Java

5. Конструктор дар Java чист?

Хусусиятҳои зерин эътибор доранд:
  1. Ҳангоми сохтани an objectи нав, барнома барои ин кор конструктори мувофиқро истифода мебарад.
  2. Конструктор ба усул монанд аст. Хусусияти он дар он аст, ки ягон элементи баргардонанда (аз он чумла ботил) нест ва номи он бо номи класс якхела аст.
  3. Агар ягон конструктор ба таври возеҳ навишта нашавад, конструктори холӣ ба таври худкор эҷод карда мешавад.
  4. Конструкторро бекор кардан мумкин аст.
  5. Агар конструктори дорои параметрҳо сохта шуда бошад, аммо ба шумо инчунин бе параметр лозим аст, шумо бояд онро алоҳида нависед, зеро он ба таври худкор сохта намешавад.

6. Кадом ду синф аз Объект мерос намегиранд?

Фирефтаи иғвогарон нашавед, чунин синфҳо вуҷуд надоранд: ҳама синфҳо мустақиман ё тавассути аҷдодҳо аз синфи Object мерос гирифта шудаанд!

7. Тағйирёбандаи маҳаллӣ чист?

Саволи дигари маъмул ҳангоми мусоҳибаи таҳиягари Java. Тағйирёбандаи маҳаллӣ тағирёбандаест, ки дар дохor усул муайян карда мешавад ва то лаҳзаи иҷро шудани усул вуҷуд дорад. Пас аз анҷоми иҷро, тағирёбандаи маҳаллӣ мавҷудияти худро қатъ мекунад. Ин аст барномае, ки тағирёбандаи маҳаллии helloMessage-ро дар усули main() истифода мебарад:
public static void main(String[] args) {
   String helloMessage;
   helloMessage = "Hello, World!";
   System.out.println(helloMessage);
}

8. Тағйирёбандаи мисол чист?

Тағйирёбандаи мисол тағирёбандаест, ки дар дохor синф муайян карда мешавад ва он то лаҳзаи мавҷудияти an object вуҷуд дорад. Мисол синфи Bee аст, ки дорои ду тағирёбанда nectarCapacity ва maxNectarCapacity мебошад:
public class Bee {

   /**
    * Current nectar capacity
    */
   private double nectarCapacity;

   /**
    * Maximal nectar that can take bee.
    */
   private double maxNectarCapacity = 20.0;

  ...
}

9. Модификаторҳои дастрасӣ чист?

Тағирдиҳандаҳои дастрасӣ асбобест, ки ба шумо имкон медиҳад дастрасӣ ба синфҳо, усулҳо ва тағирёбандаҳоро танзим кунед. Тағйирдиҳандаҳои зерин мавҷуданд, ки бо тартиби афзоиши дастрасӣ фармоиш дода шудаанд:
  1. private- барои усулҳо, майдонҳо ва конструкторҳо истифода мешавад. Сатҳи дастрасӣ танҳо синфест, ки дар дохor он эълон шудааст.
  2. package-private(default)- барои дарсҳо истифода бурдан мумкин аст. Дастрасӣ танҳо дар бастаи мушаххасе, ки дар он синф, усул, тағирёбанда, созанда эълом шудааст.
  3. protected— ҳамон дастрасии package-private+ барои он синфҳое, ки аз синф бо тағирдиҳанда мерос мегиранд protected.
  4. public- инчунин барои дарсҳо истифода мешавад. Дастрасии пурра дар тамоми барнома.
  5. Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Қисми 1 - 2

10. Усулҳои афзалиятнок чист?

Бартараф кардани усул вақте рух медиҳад, ки кӯдак мехоҳад рафтори синфи волидайнро тағир диҳад. Агар шумо хоҳед, ки он чизе, ки дар усули волидайн мавҷуд аст, иҷро карда шавад, шумо метавонед як сохтмонро ба монанди super.methodName() дар кӯдак истифода баред, ки кори усули волидайнро иҷро мекунад ва танҳо баъд мантиқро илова кунед. Талаботҳое, ки бояд иҷро шаванд:
  • имзои усул бояд якхела бошад;
  • арзиши бозгашт бояд якхела бошад.

11. Имзои метод чист?

Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Қисми 1 - 3Имзои метод маҷмӯи номи усул ва далелҳое мебошад, ки усул қабул мекунад. Имзои метод як идентификатори беназир барои усул ҳангоми боркунии усулҳо мебошад.

12. Усули изофаборкунӣ чист?

Боркунии изофабори усул як хосияти полиморфизм аст, ки дар он бо тағир додани имзои усул шумо метавонед барои як амалҳо усулҳои гуногун эҷод кунед:
  • номи ҳамон усул;
  • далелҳои гуногун;
  • метавонад намуди дигари бозгашт вуҷуд дошта бошад.
Масалан, ҳамон якро add()ба ArrayListтаври зерин изофабор кардан мумкин аст ва иловаро вобаста ба далелҳои воридотӣ ба таври дигар иҷро мекунад:
  • add(Object o)- танҳо an object илова мекунад;
  • add(int index, Object o)— an objectро ба индекси мушаххас илова мекунад;
  • add(Collection<Object> c)— рӯйхати an objectҳоро илова мекунад;
  • add(int index, Collection<Object> c)— рӯйхати an objectҳоро аз индекси муайян илова мекунад.

13. Интерфейс чист?

Дар Java мероси чандкарата амалӣ карда намешавад, аз ин рӯ, барои бартараф кардани ин мушкилот, интерфейсҳое, ки мо медонем, илова карда шуданд;) Дар муддати тӯлонӣ, интерфейсҳо танҳо усулҳое доштанд, ки бидуни татбиқи онҳо. Ҳамчун як қисми ин ҷавоб, мо дар бораи онҳо сӯҳбат хоҳем кард. Барои намуна:

public interface Animal {
   void makeSound();
   void eat();
   void sleep();
}
Баъзе нозукиҳо аз ин бармеоянд:
  • ҳама усулҳо дар интерфейс оммавӣ ва абстрактӣ мебошанд;
  • ҳама тағирёбандаҳо ниҳоии статикии ҷамъиятӣ мебошанд;
  • синфҳо онҳоро мерос намегиранд (васеъ мекунад), балки онҳоро амалӣ мекунанд (амал мекунад). Ғайр аз он, шумо метавонед интерфейсҳои зиёдеро, ки мехоҳед, татбиқ кунед.
  • синфҳое, ки интерфейсро амалӣ мекунанд, бояд татбиқи ҳамаи усулҳои интерфейсро таъмин кунанд.
Монанди ин:
public class Cat implements Animal {
   public void makeSound() {
       // method implementation
   }

   public void eat() {
       // implementation
   }

   public void sleep() {
       // implementation
   }
}

14. Усули пешфарз дар Интерфейс чист?

Акнун биёед дар бораи усулҳои пешфарз сӯҳбат кунем. Барои чи, барои кй? Ин усулҳо барои он илова карда шуданд, ки ҳама чиз "ҳам аз они мо ва ҳам аз они шумо" бошад. Ман дар бораи чӣ гап мезанам? Бале, аз як тараф, илова кардани функсияҳои нав лозим буд: lambdas, Stream API, аз тарафи дигар, он чизеро тарк кардан лозим буд, ки Java бо он машҳур аст - мутобиқати ақиб. Барои ин ба интерфейсҳо ҳалли тайёрро ҷорӣ кардан лозим буд. Ҳамин тавр усулҳои пешфарз ба мо омаданд. Яъне, усули пешфарз усули амалӣ дар интерфейс мебошад, ки калимаи калидӣ дорад default. Масалан, усули машхур stream()дар Collection. Онро санҷед, ин интерфейс он қадар содда нест, ки ба назар мерасад;). Ё инчунин усули ба таври баробар маъруф forEach()аз Iterable. То он даме, ки усулҳои пешфарз илова карда шаванд, он низ вуҷуд надошт. Дар омади гап, шумо инчунин метавонед дар бораи ин дар JavaRush хонед .

15. Пас чӣ тавр ду усули пешфарзро мерос гирифтан мумкин аст?

Дар асоси ҷавоби қаблӣ дар бораи он ки усули пешфарз чист, шумо метавонед саволи дигар диҳед. Агар шумо метавонед усулҳоро дар интерфейсҳо татбиқ кунед, пас аз ҷиҳати назариявӣ шумо метавонед ду интерфейсро бо як усул амалӣ кунед ва ин корро чӣ гуна бояд кард? Ду интерфейси гуногун бо як усул вуҷуд дорад:
interface A {
   default void foo() {
       System.out.println("Foo A");
   }
}

interface B {
   default void foo() {
       System.out.println("Foo B");
   }
}
Ва синфе ҳаст, ки ин ду интерфейсро амалӣ мекунад. Барои пешгирӣ кардани номуайянӣ ва тартиб додани code, мо бояд методро foo()дар синф бекор кунем Cва мо метавонем танҳо як усули foo()яке аз интерфейсҳои он - Aё -ро даъват кунем B. Аммо танҳо чӣ тавр интихоб кардани усули мушаххаси интерфейс Аё В? Барои ин чунин сохтор вуҷуд дорад A.super.foo():
public class C implements A, B {
   @Override
   public void foo() {
       A.super.foo();
   }
}
ё:
public class C implements A, B {
   @Override
   public void foo() {
       B.super.foo();
   }
}
Ҳамин тариқ, усули foo()синф ё усули пешфарзро аз интерфейс ё усули интерфейсро Cистифода мебарад . foo()Afoo()B

16. Усулҳо ва синфҳои абстрактӣ кадомҳоянд?

Java калимаи ҳифзшуда дорад abstract, ки барои ифодаи синфҳо ва усулҳои абстрактӣ истифода мешавад. Якум, баъзе таърифҳо. Усули абстрактӣ ин усулест, ки бидуни татбиқ бо калимаи калидӣ abstractдар синфи абстрактӣ сохта мешавад. Яъне, ин усул ба монанди интерфейс аст, танҳо бо иловаи калимаи калидӣ, масалан:
public abstract void foo();
Синфи абстрактӣ синфест, ки инчунин abstractкалимаи зерин дорад:
public abstract class A {

}
Синфи абстрактӣ дорои якчанд хусусият аст:
  • an objectро дар асоси он сохтан мумкин нест;
  • он метавонад усулҳои абстрактӣ дошта бошад;
  • он метавонад усулҳои абстрактӣ надошта бошад.
Синфҳои абстрактӣ барои ҷамъбасти як навъ абстраксия лозиманд (бахшед барои тавтология), ки дар ҳаёти воқеӣ вуҷуд надорад, аммо дар он рафтор ва ҳолати маъмулӣ (яъне усулҳо ва тағирёбандаҳо) зиёд аст. Аз хаёт мисолхои зиёде овардан мумкин аст. Ҳама чиз дар атрофи мост. Ин метавонад "ҳайвон", "мошин", "фигураи геометрӣ" ва ғайра бошад.

17. Фарқи байни String, String Builder ва String Buffer чист?

Арзишҳо Stringдар ҳавзи сатри доимӣ нигоҳ дошта мешаванд. Пас аз он ки сатр сохта мешавад, он дар ин ҳавз пайдо мешавад. Ва онро нест кардан ғайриимкон хоҳад буд. Барои намуна:
String name = "book";
...тағирёбанда ба ҳавзи сатр ишора мекунад Ҳавзи сатри доимӣ Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Қисми 1 - 4 Агар шумо номи тағирёбандаро ба арзиши дигар таъин кунед, шумо инҳоро мегиред:
name = "pen";
Ҳавзи сатри доимӣ Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Кисми 1 — 5Пас, ин ду арзиш дар он ҷо боқӣ хоҳанд монд. Буфери сатр:
  • арзишҳо Stringдар стек нигоҳ дошта мешаванд. Агар арзиш иваз карда шавад, он гоҳ арзиши нав бо арзиши кӯҳна иваз карда мешавад;
  • String Bufferҳамоҳангшуда ва аз ин рӯ ришта бехатар;
  • Аз сабаби бехатарии ришта, суръати кор хеле дилхоҳ аст.
Мисол:
StringBuffer name = "book";
Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Қисми 1 - 6Ҳамин ки арзиши ном тағир меёбад, арзиш дар стек тағир меёбад: Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Қисми 1 - 7StringBuilder Маҳз бо StringBuffer, танҳо он риштаи бехатар нест. Аз ин ру, суръати он назар ба StringBuffer.

18. Фарқи байни синфи абстрактӣ ва интерфейс дар чист?

Синфи абстрактӣ:
  • синфҳои абстрактӣ конструктори пешфарз доранд; он ҳар дафъае, ки кӯдаки ин синфи абстрактӣ эҷод мешавад, номида мешавад;
  • усулхои абстрактй ва гайриабстрактиро дарбар мегирад. Умуман, он метавонад усулҳои абстрактӣ надошта бошад, аммо ба ҳар ҳол як синфи абстрактӣ бошад;
  • синфе, ки аз абстрактӣ мерос мегирад, бояд танҳо усулҳои абстрактиро амалӣ намояд;
  • синфи абстрактӣ метавонад як Тағйирёбандаи мисол дошта бошад (ниг. ба саволи №5).
Интерфейс:
  • созанда надорад ва онро оғоз кардан мумкин нест;
  • танҳо усулҳои абстрактӣ бояд илова карда шаванд (ба ҳисоб кардани усулҳои пешфарз);
  • синфҳое, ки интерфейсро амалӣ мекунанд, бояд ҳама усулҳоро амалӣ кунанд (ба ҳисоб кардани усулҳои пешфарз);
  • интерфейсҳо метавонанд танҳо доимӣ дошта бошанд.

19. Чаро дастрасӣ ба элементи массив O(1) -ро мегирад?

Ин савол аслан аз мусоҳибаи охирин аст. Тавре ки баъдтар фаҳмидам, ин савол барои он дода мешавад, ки шахс чӣ гуна фикр мекунад. Маълум аст, ки дар ин дониш чандон маънои амалӣ вуҷуд надорад: танҳо донистани ин далел кифоя аст. Аввалан, мо бояд равшан кунем, ки O(1) нишонаи мураккабии вақти алгоритм аст , вақте ки амалиёт дар вақти доимӣ сурат мегирад. Яъне ин таъинот зудтарин иҷрошаванда аст. Барои ҷавоб додан ба ин савол, мо бояд фаҳмем, ки мо дар бораи массивҳо чӣ медонем? Барои сохтани массив int, мо бояд инҳоро нависем:
int[] intArray = new int[100];
Аз ин сабт чанд хулоса баровардан мумкин аст:
  1. Ҳангоми сохтани массив навъи он маълум аст.Агар намуд маълум бошад, он гоҳ маълум мешавад, ки ҳар як ячейкаи массив чӣ андоза хоҳад буд.
  2. Маълум аст, ки массив чӣ андоза хоҳад буд.
Аз ин бармеояд: барои фаҳмидани он ки ба кадом ячейка навиштан лозим аст, танҳо ҳисоб кардан лозим аст, ки ба кадом майдони хотира навиштан лозим аст. Барои мошин ин осонтар набуд. Мошин дорои оғози хотираи ҷудошуда, як қатор элементҳо ва андозаи як ҳуҷайра мебошад. Аз ин маълум мешавад, ки фазои сабт ба макони ибтидоии массив + андозаи ячейка ба андозаи он зарб карда мешавад.

Чӣ тавр шумо O(1)-ро ҳангоми дастрасӣ ба an objectҳо дар ArrayList ба даст меоред?

Ин савол дарҳол пас аз саволи қаблӣ меояд. Дуруст аст, ки вақте ки мо бо массив кор мекунем ва дар он ҷо примитивҳо мавҷуданд, мо пешакӣ медонем, ки андозаи ин навъи он ҳангоми сохта шуданаш чӣ гуна аст. Аммо чӣ мешавад, агар схемае мисли схемаи дар расм мавҷуд бошад: Top 50 Саволҳо ва Ҷавобҳои Мусоҳибаи асосии Java.  Кисми 1 — 8ва мо мехоҳем коллексияеро бо унсурҳои навъи А эҷод кунем ва татбиқҳои гуногунро илова кунем - B, C, D:
List<A> list = new ArrayList();
list.add(new B());
list.add(new C());
list.add(new D());
list.add(new B());
Дар ин ҳолат, чӣ гуна шумо метавонед фаҳмед, ки андозаи ҳар як чашмак чӣ гуна хоҳад буд, зеро ҳар як an object гуногун хоҳад буд ва метавонад майдонҳои иловагии гуногун дошта бошад (ё тамоман дигар бошад). Чӣ бояд кард? Дар ин чо савол чунон ба миён гузошта шудааст, ки ба иштибох ва парешонхотирй андохта шавад. Мо медонем, ки дар асл коллексия an objectҳоро нигоҳ намедорад, балки танҳо ба ин an objectҳо пайванд медиҳад. Ва ҳама пайвандҳо як андоза доранд ва маълум аст. Ҳамин тавр, ҳисобкунии фазо дар ин ҷо ҳамон тавре ки дар саволи қаблӣ кор мекунад.

21. Автобокс ва кушодан

Заминаи таърихӣ: autoboxing ва autounboxing яке аз навовариҳои асосии JDK 5 мебошад. Autoboxing раванди табдor худкор аз навъи ибтидоӣ ба синфи мувофиқи печанда мебошад. Худкор кушодан - комилан муқобor қуттии худкорро мекунад - синфи печандаро ба ибтидоӣ табдил медиҳад. Аммо агар арзиши бастабандӣ мавҷуд бошад null, пас ҳангоми кушодан истисно партофта мешавад NullPointerException.

Мутобиқати ибтидоӣ - печанда

Примитивӣ Сарпӯши синф
булӣ Булӣ
int Бутун
byte Байт
char Характер
шино кардан шино кардан
дароз дароз
кӯтоҳ Кӯтоҳ
дучанд Дучандон

Автопакеткунӣ рӯй медиҳад:

  • ҳангоми таъини ибтидоӣ истинод ба синфи печанда:

    ПЕШ АЗ Java 5:

    //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
    }
  • ҳангоми интиқоли ибтидоӣ ҳамчун далел ба усуле, ки печандаро интизор аст:

    public void exampleOfAutoboxing() {
       long age = 3;
       setAge(age);
    }
    
    public void setAge(Long age) {
       this.age = age;
    }

Кушодани худкор ба амал меояд:

  • вақте ки мо як тағирёбандаи ибтидоиро ба синфи печанда таъин мекунем:

    //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;
  • Дар ҳолатҳои амалҳои арифметикӣ. Онҳо танҳо ба намудҳои ибтидоӣ дахл доранд; барои ин шумо бояд қуттии ибтидоиро кушоед.

    // 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
  • ҳангоме ки ба парпеч бо усуле интиқол дода мешавад, ки примитиви мувофиқро қабул мекунад:

    public void exampleOfAutoboxing() {
       Long age = new Long(3);
       setAge(age);
    }
    
    public void setAge(long age) {
       this.age = age;
    }

22. Калимаи ниҳоӣ чист ва онро дар куҷо истифода бурдан мумкин аст?

Калимаи калидӣ finalметавонад барои тағирёбандаҳо, усулҳо ва синфҳо истифода шавад.
  1. Тағйирёбандаи ниҳоӣ наметавонад ба an objectи дигар таъин карда шавад.
  2. синфи охирин безарар аст)) ворисон дошта наметавонад.
  3. усули ниҳоиро дар аҷдод бекор кардан мумкин нест.
Мо болоро фаро гирифтем, ҳоло биёед онро муфассалтар муҳокима кунем.

тағирёбандаҳои ниҳоӣ

;Java ба мо ду роҳи эҷоди тағирёбанда ва муайян кардани арзиш ба он медиҳад:
  1. Шумо метавонед тағирёбандаро эълон кунед ва онро дертар оғоз кунед.
  2. Шумо метавонед тағирёбандаро эълон кунед ва онро фавран таъин кунед.
Намунаи истифодаи тағирёбандаи ниҳоӣ барои ин ҳолатҳо:
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;
   }
}

Оё тағирёбандаи ниҳоӣ метавонад доимӣ ҳисобида шавад?

Азбаски мо наметавонем арзиши навро ба тағирёбандаи ниҳоӣ таъин кунем, чунин ба назар мерасад, ки инҳо тағирёбандаҳои доимӣ мебошанд. Аммо ин танҳо дар назари аввал аст. Агар навъи маълумоте, ки тағирёбанда ба он ишора мекунад immutable, бошад, ҳа, он доимист. Аммо агар навъи маълумот mutableтағирёбанда бошад, бо истифода аз усулҳо ва тағирёбандаҳо арзиши an objectеро, ки finalтағирёбанда ба он ишора мекунад, тағир додан мумкин аст ва дар ин ҳолат онро доимӣ номидан мумкин нест. Ҳамин тавр, мисол нишон медиҳад, ки баъзе аз тағирёбандаҳои ниҳоӣ воқеан доимӣ мебошанд, аммо баъзеҳо нестанд ва онҳоро тағир додан мумкин аст.
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?");
}

Тағйирёбандаҳои ниҳоии маҳаллӣ

Вақте ки finalтағирёбанда дар дохor усул сохта мешавад, он local finalтағирёбанда номида мешавад:
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дар даври васеъ истифода барем for, зеро пас аз ба итмом расонидани такрори давр, forҳар дафъа як тағирёбандаи нав эҷод мешавад. Аммо ин ба даври муқаррарии for дахл надорад, аз ин рӯ codeи дар поён овардашуда хатои вақти компилятсионӣ медиҳад.
// final local changed j cannot be assigned
for (final int i = 0; i < args.length; i ++) {
   System.out.println(args[i]);
}

Синфи ниҳоӣ

Шумо наметавонед синферо, ки ҳамчун final. Оддӣ карда гӯем, ягон синф аз ин синф мерос гирифта наметавонад. Намунаи олии finalсинф дар JDK мебошад String. Қадами аввал барои эҷоди синфи тағирнопазир ин қайд кардани он аст final, то он васеъ карда нашавад:
public final class FinalExample {
}

// Compilation error here
class WantsToInheritFinalClass extends FinalExample {
}

Усулҳои ниҳоӣ

Вақте ки усул ба ниҳоӣ ишора карда мешавад, он усули ниҳоӣ номида мешавад (мантиқӣ, дуруст?). Усули ниҳоиро дар синфи насл бекор кардан мумкин нест. Воқеан, усулҳо дар синфи Object - wait() ва notify() - ниҳоӣ мебошанд, бинобар ин мо имкони бекор кардани онҳоро надорем.
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";
   }
}

Чӣ тавр ва дар куҷо истифода бурдани final дар Java

  • Калимаи ниҳоиро барои муайян кардани баъзе константаҳои сатҳи синф истифода баред;
  • тағирёбандаҳои ниҳоӣ барои an objectҳо эҷод кунед, вақте ки шумо намехоҳед, ки онҳо тағир дода шаванд. Масалан, хосиятҳои хоси an objectҳое, ки мо метавонем барои мақсадҳои сабткунӣ истифода барем;
  • агар шумо нахоҳед, ки синф дароз карда шавад, онро ҳамчун ниҳоӣ қайд кунед;
  • агар ба шумо синфи тағирнопазир< эҷод кардан лозим бошад, шумо бояд онро ниҳоӣ кунед;
  • агар шумо хоҳед, ки татбиқи усул дар наслҳои он тағир наёбад, усулро ҳамчун final. Ин барои он хеле муҳим аст, ки татбиқи он тағир наёбад.

23. Таѓйирнашаванда чист?

Тағирёбанда

Тағирёбанда an objectҳое мебошанд, ки ҳолат ва тағирёбандаҳои онҳоро пас аз эҷод кардан мумкин аст. Масалан, синфҳо ба монанди StringBuilder, StringBuffer. Мисол:
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());
   }
}

Тағирнопазир

Тағирнопазир an objectҳое мебошанд, ки пас аз сохтани an object ҳолат ва тағирёбандаҳои онҳоро тағир додан мумкин нест. Чаро калиди олӣ барои HashMap нест, дуруст?) Масалан, String, Integer, Double ва ғайра. Мисол:
// 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. Класси тагйирнаёбанда чи тавр навишта мешавад?

Пас аз он ки шумо фаҳмед, ки an objectҳои тағирёбанда ва тағирнашаванда чист, саволи навбатӣ табиист - онро чӣ гуна бояд нависед? Барои навиштани синфи тағйирнопазир, шумо бояд қадамҳои оддиро иҷро кунед:
  • синфро ба охир расонанд.
  • ҳамаи майдонҳоро хусусӣ гардонед ва барои онҳо танҳо гирандагон эҷод кунед. Сетерҳо, албатта, лозим нестанд.
  • Ҳама майдонҳои тағирёбандаро ниҳоӣ созед, то ки арзиш танҳо як маротиба муқаррар карда шавад.
  • ба воситаи конструктор ҳамаи майдонҳоро оғоз карда, нусхабардории амиқро анҷом диҳед (яъне нусхабардории худи an object, тағирёбандаҳои он, тағирёбандаҳои тағирёбанда ва ғайра)
  • an objectҳои тағирёбандаи тағирёбандаро дар гетерҳо клон кунед, то танҳо нусхаҳои арзишҳоро баргардонед, на истинод ба an objectҳои воқеӣ.
Мисол:
/**
* 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;
   }
}
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION