Салом ба ҳама, имрӯз ман таҳлor 250+ саволҳои мусоҳибаро барои таҳиягари Java идома медиҳам. Қисмҳои қаблии таҳлил: якум , дуюм , сеюм . Пас биёед идома диҳем.
<номи синф>{мерос аз синфи волидайн} {амалии интерфейс}
Пас, он чизе ки мо дорем: {тағйирдиҳандаи дастрасии синф} - танҳо тағирдиҳандаҳои оммавӣ ва тағирдиҳандаи дастрасии гумшуда, яъне default , барои синф дастрасанд . {class static} - статикӣ тағирдиҳандаест, ки нишон медиҳад, ки ин синф статикӣ буда, танҳо ба синфҳои дохилӣ (синфҳо дар дохor синфҳои дигар) татбиқ мешавад. {Класс ниҳоии} - тавре ки мо дар ёд дорем, ин тағирдиҳандаи ниҳоӣ аст , ки дар ҳузури он синф мероснашаванда мешавад (мисол аз қуттии - String ). {class abstraction} - тағирдиҳанда - абстракт , ки нишон медиҳад, ки ин синф метавонад усулҳои иҷронашуда дошта бошад. Ин тағирдиҳанда бо тағирдиҳандаи ниҳоӣ мухолиф аст , яъне танҳо яке аз онҳо метавонад дар сарлавҳаи синф бошад, зеро тағирдиҳандаи абстрактӣ маънои онро дорад, ки синфи додашуда мерос гирифта, қисмҳои абстрактии он амалӣ карда мешаванд. Ва ниҳоӣ нишон медиҳад, ки ин versionи ниҳоии (ниҳоии) синф аст ва онро мерос гирифтан мумкин нест. Дар асл, истифодаи ҳарду тағирдиҳанда дар як вақт бемаънӣ хоҳад буд ва компилятор ба мо имкон намедиҳад, ки ин корро кунем. <синф> калимаи калидии ҳатмист, ки эъломияи синфро нишон медиҳад. <номи синф> номи оддии синф аст, ки идентификатори синфи мушаххаси Java мебошад. Номи синфи пурраи тахассусӣ аз номи бастаи пурраи тахассусӣ + иборат аст. + номи оддии синф. {мерос аз синфи волидайн} - муайян кардани синфи волидайн (агар вуҷуд дошта бошад) бо истифода аз калимаи калидӣ extends . Масалан, .. -ро васеъ мекунад ParentClass . {интерфейси татбиқи} - муайян кардани интерфейсҳое, ки ин синф амалӣ мекунад (агар вуҷуд дошта бошад) бо истифода аз калимаи калидии implements . Масалан: ... амалӣ мекунад FirstInterface, SecondInterface ... Хуб, ҳамчун намунаи сарлавҳаи синф, сарлавҳаи синфи Lion -ро баррасӣ кунед , ки аз Cat мерос гирифта, интерфейси WildAnimal -ро амалӣ мекунад :
29. Оё бозгаштро дар конструктор истифода бурдан мумкин аст?
Шумо метавонед, вале бе арзиши бозгашт ба ҳуқуқи бозгашт . Яъне, шумо метавонед бозгаштро истифода баред; ҳамчун сохтмони ёрирасон ҳангоми ҳисобҳо дар конструктор бо мақсади фаврӣ анҷом додани (қатъ кардан) иҷрои codeи минбаъда ва ба итмом расонидани инициализатсияи an object. Масалан, мо як синфи Cat дорем ва агар Cat бехона бошад - isHomeless = true , мо бояд оғозкуниро ба итмом расонем ва дигар майдонҳоро пур накунем (охир, онҳо ба мо номаълуманд, зеро гурба бехона аст):public Cat(int age, String name, boolean isHomeless) {
if (isHomeless){
this.isHomeless = isHomeless;
return;
}
this.isHomeless = isHomeless;
this.age = age;
this.name = name;
}
Аммо вақте ки сухан дар бораи арзишҳои мушаххас меравад, созанда наметавонад бозгаштро барои баргардонидани арзиш истифода барад, зеро:
- ҳангоми эълон кардани конструктор шумо чизе ба намуди бозгаште нахоҳед дошт;
- Одатан, конструктор ҳангоми эҷодкунӣ ба таври ғайримустақим даъват карда мешавад;
- Конструктор усул нест: он як механизми алоҳидаест, ки ҳадафи ягонаи он оғоз кардани тағирёбандаҳои мисол аст ва оператори нав барои сохтани an object масъул аст .
30. Оё истисноро аз конструктор партофтан мумкин аст?
Конструкторҳо бо истисноҳо маҳз ҳамон тавре ки усулҳо кор мекунанд. Ва агар усулҳо ба мо имкон диҳанд, ки бо навиштани партовҳои <ExceptionType> дар сарлавҳаи метод истисноҳо гузорем , пас созанда ба мо имкон медиҳад, ки ин корро анҷом диҳем ва инчунин ҳангоми мерос гирифтан ва муайян кардани созандаи меросгузор, мо метавонем навъи истисноро васеъ кунем. Масалан, IOException -> Истисно (вале на баръакс). Ҳамчун мисол барои партофтани истисно аз ҷониби конструктор, биёед синфи Cat -ро гирем . Биёед бигӯем, ки ҳангоми сохтани он мо мехоҳем аз консол ном ва синну солро ворид кунем:public Cat() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
this.name = reader.readLine();
this.age = Integer.parseInt(reader.readLine());
}
Азбаски reader.readLine() IOException-ро мепартояд, мо онро дар сарлавҳа ҳамчун истиснои эҳтимолии партофташуда муайян мекунем.
31. Сарлавҳаи синф аз кадом элементҳо иборат аст? Мисол нависед
Дар бораи унсурҳое, ки сарлавҳаи синфро ташкил медиҳанд, сухан ронем, биёед ба диаграммаи хурд назар андозем:- ҷузъҳои ҳатмӣ дар қавс <> ҷойгир карда мешаванд
- ихтиёрӣ - дар {}
public final class Lion extends Cat implements WildAnimal
32. Сарлавҳаи метод аз кадом элементҳо иборат аст? Мисол нависед
Боз, ҳангоми дидани унсурҳое, ки сарлавҳаи методро ташкил медиҳанд, диаграммаи хурдеро баррасӣ кунед, ки дар он ҷо:- ҷузъҳои ҳатмӣ дар қавс <> оварда шудаанд
- ихтиёрӣ - дар {}
public static void main(String[] args) throws IOException
33. Дар an objectи насли конструктори пешфарз созед, агар он дар an objectи асосй муайян нашуда бошад (вале конструктори дигар муайян карда шудааст)
Ман худи саволро пурра намефаҳмам, аммо шояд ин маънои онро дорад, ки масалан, дар волидайн мо як конструктори фармоишӣ дорем:public Cat(int age, String name) {
this.age = age;
this.name = name;
}
Аз ин рӯ, дар синфи аҷдодӣ, мо бешубҳа бояд конструктореро муайян кунем, ки конструктори волидайнро пур кунад (даъват кунад):
public class Lion extends Cat {
public Lion(int age, String name) {
super(age, name);
}
}
34. Ин калимаи калидї кай истифода мешавад?
Дар Java, ин ду маънои гуногун дорад. 1. Ҳамчун истинод ба an objectи ҷорӣ, мисли this.age = 9 . Яъне, ин ба an objectе дахл дорад, ки дар он он даъват шуда буд ва codeи истифодаи ин ба он ишора мекунад . Вазифаи асосӣ ин баланд бардоштани хониши code ва пешгирӣ кардани номуайянӣ мебошад. Масалан, агар номи майдони синфи дохилӣ ва аргументи усул якхела бошад:public void setName(String name) {
this.name = name;
}
Яъне this.name майдони номи an object аст , далели метод аст.Ин истинодро дар усулҳои статикӣ истифода бурдан мумкин нест. 2. ин метавонад дар созанда дар шакли даъвати метод истифода шавад, ба монанди this(value) . Дар ин ҳолат, он занг ба конструктори дигари ҳамон синф хоҳад буд. Хулоса, шумо метавонед ҳангоми сохтани an object якбора ду конструкторро даъват кунед:
public Cat(int age, String name) {
this(name);
this.age = age;
}
public Cat(String name) {
this.name = name;
}
Вақте ки an objectи Cat сохта мешавад ва конструктори аввал даъват мешавад, ҳарду майдони an object даъват карда мешаванд ва бомуваффақият оғоз карда мешаванд. Якчанд нозукиҳо вуҷуд доранд:
- this() танҳо дар конструктор кор мекунад.
- Истинод ба конструктори дигар бояд дар сатри аввали блоки созанда (бадан) бошад. Аз ин рӯ, дар як конструктор зиёда аз як (дигар) конструктори синфи додашударо даъват кардан мумкин нест.
35. Инициализатор чист?
То ҷое ки ман фаҳмидам, дар ин савол сухан дар бораи блокҳои ибтидоӣ ва оморӣ меравад. Аввалан, биёед дар хотир дорем, ки ибтидосозӣ чист. Интициализатсия ин эҷод, фаъолсозӣ, омодагӣ ба кор, муайян кардани параметрҳо мебошад. Ба ҳолати омодагӣ барои истифода овардани барнома ё ҷузъ. Тавре ки шумо дар хотир доред, ҳангоми эҷоди an object, тағирёбандаи синфро мустақиман пас аз эъломия оғоз кардан мумкин аст:class Cat {
private int age = 9;
private String name = "Tom";
Ё онро ба таври беруна тавассути созанда насб кунед:
class Cat {
private int age;
private String name;
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
Аммо роҳи дигар вуҷуд дорад: насб кардани тағирёбандаи an objectи дохилӣ тавассути блоки оғозёбӣ, ки мисли қавсҳои ҷингила { } дар дохor синф бе ном (ба мисли усул ё созанда) ба назар мерасад:
class Cat {
private int age;
private String name;
{
age = 10;
name = "Tom";
}
Яъне, блоки оғозёбӣ як пораи codeест, ки ҳангоми сохтани an object бор карда мешавад. Одатан, чунин блокҳо барои иҷрои баъзе ҳисобҳои мураккаб истифода мешаванд, ки ҳангоми боркунии синф заруранд. Натиҷаҳои ин ҳисобкуниро метавон ҳамчун арзишҳо барои тағирёбандаҳо муайян кард. Илова бар блокҳои муқаррарии оғозёбӣ, блокҳои статикӣ мавҷуданд, ки ба назар якхелаанд, вале калимаи калидии статикӣ пеш аз қавси ҷингила доранд :
class Cat {
private static int age;
private static String name;
static{
age = 10;
name = "Tom";
}
Ин блок бо блоки қаблӣ комилан якхела аст. Аммо агар an objectи муқаррарӣ ҳангоми оғоз кардани ҳар як an object ба кор андохта шавад, он гоҳ an objectи статикӣ танҳо як маротиба, вақте ки синф бор карда мешавад, фаъол мешавад. Дар чунин блок, чун ќоида, барои инициализатсияи минбаъдаи таѓйирёбандањои синфи статикї баъзе њисобњои мураккаб низ иљро карда мешаванд. Маҳдудиятҳо ба блоки статикӣ, ба мисли усулҳои статикӣ татбиқ мешаванд: он наметавонад маълумоти ғайристатикӣ ва инчунин истинод ба an objectи ҷорӣ - ин . Минбаъд, мо метавонем тартиби инициализатсияи синфро (якҷоя бо аҷдоди он) бубинем, то лаҳзаи ба кор андохтани блокҳои оғозёбиро беҳтар дарк кунем.
36. Барои мерос гирифтани синфи ҷамъиятии синфи Child extensions Parent, тартиби оғозкунии an objectро нависед
Вақте ки синфи Child бор карда мешавад, тартиби оғозкунӣ чунин хоҳад буд:- Майдонҳои статикии синфи волидайн .
- Блоки оғозкунии статикӣ барои синфи волидайн .
- Майдонҳои статикии синфи Child .
- Блоки оғозкунии статикӣ барои синфи Child .
- Майдонҳои ғайристатикии синфи волидайн .
- Блоки оғозкунии статикӣ барои синфи Волидон нест .
- Конструктор барои синфи волидайн .
- Майдонҳои ғайристатикии синфи Child .
- Блоки оғозкунии статикӣ барои синфи Child нест .
- Сохтмони синфи кӯдакон .
37. Кадом муносибатњоро байни синфњо (an objectњо) медонед?
Дар Java ду намуди муносибатҳо байни синфҳо мавҷуданд:- IS- Муносибат
Lion IS-A Cat
(вале на ҳар гурба Шер аст ) Вазъият бо интерфейсҳо маҳз ҳамин аст. Агар синфи Lion интерфейси WildAnimal -ро татбиқ кунад , он гоҳ онҳо низ дар робита ҳастанд:
Lion IS-A WildAnimal
- Муносибатҳои HAS-A
Car HAS-A Passenger
Ва баръакс: агар Мусофир ба мошин истинод дошта бошад , пас ин муносибат хоҳад буд:
Passenger HAS-A Car
38. Кадом робитањои ассосиативии байни предметњоро медонед?
Ҷамъоварӣ ва таркиб ҷуз ҳолатҳои махсуси ассотсиатсия чизи дигаре нестанд. Агрегатсия муносибатест, ки дар он як an object ҷузъи an objectи дигар аст. Масалан, мусофир метавонад дар мошин бошад. Инчунин, метавонад якчанд мусофир бошад ё тамоман набошад (агар мо дар бораи Tesla сухан ронем, пас ронанда талаб карда намешавад). Барои намуна:public class Car {
private List passengers = new ArrayList<>();
void setPassenger(Passenger passenger) {
passengers.add(passenger);
}
void move() {
for (Passenger passenger : passengers) {
System.out.println("Перевозка пассажира - " + passenger.toString());
}
passengers.clear();
}
}
Яъне, мо ба шумораи мусофирон аҳамият намедиҳем (ё умуман вуҷуд доранд): фаъолияти синфи Car аз ин вобаста нест. Агрегатсия инчунин маънои онро дорад, ки вақте ки an object аз ҷониби an objectи дигар истифода мешавад, an objectи аввал метавонад дар дигар an objectҳо истифода шавад. Масалан, як талаба метавонад аъзои кружоки бофандагй ва хам гурухи мусикии рокерхо бошад ва дар айни замон ба гурухи омузандагони забони англисй равад. Тавре ки шумо мефаҳмед, ҷамъбаст як муносибати сусттари ассотсиативии байни синфҳо мебошад. Таркиб муносибати боз ҳам сахттар аст, вақте ки an object на танҳо ҷузъи an objectи дигар аст, балки кори an objectи дигар аз аввал хеле вобаста аст. Масалан, муҳаррики мошин. Гарчанде ки муҳаррик бидуни мошин вуҷуд дошта бошад ҳам, берун аз он бефоида аст. Хуб, мошин бе муҳаррик кор карда наметавонад:
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
void startMoving() {
engine.start();
...
}
Таркиб инчунин маънои онро дорад, ки вақте ки ашё аз ҷониби an objectи дигар истифода мешавад, аввал наметавонад ба ягон каси дигар тааллуқ дошта бошад. Агар ба мисоли худ баргардем, муҳаррик метавонад танҳо ба як мошин тааллуқ дошта бошад, аммо на дар як вақт ба ду ё зиёда мошин. Мо шояд имрӯз дар ин ҷо таваққуф кунем.
GO TO FULL VERSION