Конструктордағы «бос» деген код орындалмайды

Егер мен оны қолдансам

class Test {
    public Test() {
        System.out.println("constructor");
    }
}

public class MainClass {
    public static void main(String[] args) {
        Test t1 = new Test();
        Test t2 = new Test();
    }
}

Мен 2 нәтиже аламын конструктор конструктор

Бірақ конструкторға бос болмасам (public void Test ()) - шығу бос. Неліктен сонша?

2
қосылды автор yAnTar, көзі
@Jayram конструкторлары JVM ішіндегі void қайтару түріне ие, бірақ әзірлеушілерден жасырын
қосылды автор Anirudha, көзі
конструктордың қайтару түрі жоқ
қосылды автор Jayram Singh, көзі
қосылды автор Swapnil, көзі

8 жауаптар

Бұл таңқаларлық емес, бұл қалыпты мінез. Конструктордың қайтару түрі жоқ

public Test() {
    System.out.println("constructor");
}

конструктор болып табылады, бірақ

public void Test() {
    System.out.println("constructor");
}

t1.Test() арқылы қоңырау шала алатын қарапайым әдіс.

This page lists the differences between constructors and methods:

1) Java-ның әдісімен конструктор арасындағы алғашқы айырмашылық конструктордың аты сыныптың атымен бірдей болуы керек, бірақ Java-дегі әдіс үшін мұндай қажеттілік жоқ. әдістер Java-да еркін атау болуы мүмкін.

     

2) Java әдісі мен конструктор арасындағы екінші айырмашылық, конструктордың ешқандай қайтару түріне ие емес, бірақ әдіс қайтару түріне ие және қайтарылмайтын нәрсе қайтарады.

     

3) Java конструкторы мен әдісі арасындағы үшінші айырмашылық конструкторлар тізбектеліп, белгілі бір тәртіпте шақырылады, әдістер үшін осындай қондырғы жоқ.

     

4) Әдіс айырмашылығы, конструктор, бірақ сыныпта жарияланған сынып мүшесі емес деп саналады. Конструкторлар балалар сыныптары бойынша мұрагерлікке ие болмайды, бірақ әдістер жеке сыныптар жасалмайынша, балалар сыныптары бойынша мұрагерлікке ие болады. бұл жағдайда олар тек жарияланған сыныпта ғана көрінеді. Сол сияқты, жеке конструктор сіз бұл класс объектісін сыртынан жасай алмайсыз дегенді білдіреді, Java-дегі Singleton үлгісін қолдануға арналған әдістердің бірі.

     

5) Java-ның әдісі мен конструкторы арасындағы айырмашылық осы және супер арнайы конструкторды нақты конструкторға қоңырау шалу үшін пайдаланылады. әдіс үшін мұндай нәрсе жоқ, оларды өздеріне қоңырау шалу үшін қолдануға болады.

10
қосылды
@yAnTar Әдетте біз оны әдіс ретінде көре аламыз, бірақ бұл қарапайым әдіс емес, оны кез-келген басқа әдіс ретінде t1.Test() деп атауға болмайды, конструктор объект
қосылды автор BackSlash, көзі
Рахмет, бірақ конструктор-ақ әдіс (бірақ нақты)
қосылды автор yAnTar, көзі
Рахмет, бұл басқа тілдерден біршама ерекшеленеді, мен білмедім және менің сұрағым ақымақ болды.
қосылды автор yAnTar, көзі
JVM деңгейінде конструкторлар қайтару түрін қайтарады, бірақ әзірлеушілерден жасырылады
қосылды автор Anirudha, көзі
@yAnTar Конструктор әдіс емес . Бұл әдіске ұқсас кодтың бөлігі: (а) оның қайтару түрі жоқ (b) тек new өрнегі арқылы шақырылуы мүмкін (c) оның мақсаты - жаңадан бөлінген құрылған объектіге (d) жарамды күйге дейін жадты жасаудан кейін бар объектіге шақыруға болмайды және, демек, бағдарламалық жасақтама мен талдауда әдіс деп қарастырылмайды. Әртүрлі тілдерде жүзеге асырылатын жол not relevant .
қосылды автор Theodoros Chatzigiannakis, көзі

Өйткені, конструктор болмайтын конструкторға void қоссаңыз. Бұл тек сынып секілді атауға ие болатын әдіс ғана.

Содан кейін, сіз сұрай аласыз «бірақ қалай конструктор деп атауға болмайды?» Әрбір класс жалған, құрастырушы жоқ.

Қорытынды: конструктордың қайтару түрі болмауы керек.

5
қосылды

Конструкторларда қайтару түрі жоқ .Параметрлер қайтару түріне ие. Егер сіз void() қоссаңыз, ол әдіске ауысады. Әдісті шақыру үшін оған қоңырау шалу керек.

t1.test();
2
қосылды
Бірақ мен ойлаймын - конструктор-ақ әдіс (бірақ нақты).
қосылды автор yAnTar, көзі
Сондай-ақ, конструкторлардың аты-жөні жоқ, тек қайтару түрі бар деп айтуға болады
қосылды автор dasblinkenlight, көзі

Java тілінің ерекшелігі.

Docs saying

Сыныпта сынып жоспарынан нысандарды жасау үшін шақырылған конструкторлар бар. Конструкторлық декларациялар әдіс декларациясына ұқсас, тек олар сыныптың атын пайдаланады және қайтару түріне ие емес.

1
қосылды

Жазған кезде:

public Test() 
    {
        System.out.println("constructor");
    }

Бұл, әрине, конструктор болып табылады. Ал, сіз Тест сыныбының бірінші нысанын жазғанда:

    Test t1 = new Test();

Бұл конструкторды бірінші рет шақырады, ал сіз басып шығару мәлімдемесінде жазылған код, яғни конструктор консольге шығарылады. Есіңізде болсын, конструкторлар сыныптың нысанын жасаған кезде автоматты түрде шақырылады.

Екіншіден, сіз объектіні жазу арқылы жасай аласыз:

    Test t2 = new Test();

Бұл сол конструкторды шақырады және экрандағы «конструкторды» шығарады, бірақ бұл екінші рет.

Сонымен, сіз жауапты аласыз: конструктор конструктор

In the second case, Жазған кезде:

public void test()
    {
        System.out.println("constructor");
    }

компилятор оны конструктор емес, әдіс ретінде қарастырады.

Тіпті ештеңе қайтармаса да, ол «қайтару» типі болып табылады және конструкторлар ешқашан қайтару түріне ие бола алмайды. Бұл олар сізге ештеңе қайтармайтындығын білдірмейді, бірақ олар тек қайтарым түріне ие емес.

Мәселен, сыныптың нысаны жасалса, әдіс автоматты түрде шақырылмайды. Мәселен, бірдей нәтиже күтуге болмайды.

Енді сіз бос шығарылымды аласыз, себебі компилятор оны анықтамасаңыз да, әрбір сыныпқа күлгін/әдепкі конструктор береді. Ал бұл әдепкі конструктор сіз сыныптың нысанын жасаған сайын, оны анық деп санасаңыз да, аталмайды!

әдепкі конструктор мына жерде жазылған болуы мүмкін:

test() {   }

Енді сіз екі объектіні жасағанда не болатынын елестете аласыз, бағдарлама сізді бос шығаруды қайтарып, дұрыс жұмыс жасайды және іске қосады!

Сізге көмектесті деп үміттенемін.

1
қосылды

Java конструкторына тиесілі класс атымен бірдей атауы бар. Құрастырушының синтаксисі қайтару түрін қамтымайды, себебі конструкторлар ешқашан мән қайтармайды.

 public Test() {
    System.out.println("constructor");
}
0
қосылды

Себебі конструкторлар қайтару түріне ие емес. void қайтару түрін қосқан кезде жасайтын нәрсе ештеңе қайтармайтын Test() әдісі болып табылады.

Компилятор сізге ешқандай аргс конструкторын береді, себебі сіз ештеңе жазған жоқсыз және ештеңе жасамайды, себебі ол сіз жасаған әдіс емес.

0
қосылды

Егер конструкторға қайтару түрін қоссаңыз, ол конструктор болмайды. Бұл әдіс сияқты.

0
қосылды