Já jsem to sice věděl, ale čistě didakticky pro autora článku přidávám, že dneska tyhle věci dokáže velmi obstojně (i ve slovenštině) vysvětlit i ChatGPT 3.5:
Já: Prečo musí byť metóda main v jazyku Java statická?
ChatGPT:
V jazyku Java je metóda main statická z dôvodu konkrétneho spôsobu, ako Java spracúva spustenie programu. Statické metódy sú metódy, ktoré patria triede ako celku, a nie konkrétnym inštanciám tejto triedy. Metóda main je statická, pretože je volaná pri spustení programu, predtým než je vytvorená akákoľvek inštancia triedy.
Keď spustíte program Java, systém Java volá metódu main bez toho, aby vytvoril inštanciu triedy, v ktorej je definovaná. To znamená, že metóda main musí byť statická, aby bola dostupná systému Java na úrovni triedy, a nie na úrovni konkrétnej inštancie. Statická metóda môže byť volaná bez toho, aby bola vytvorená inštancia triedy, čo je presne to, čo sa deje pri spustení programu.
Tým, že je metóda main statická, umožňuje systému Java spustiť program bez toho, aby musel vytvárať inštanciu triedy, a zároveň umožňuje prístup k metóde na úrovni triedy, čo je potrebné pre správne spustenie programu.
Vy čekáte od ChatGPT vysvětlení? Vždyť je to skvělý nástroj, pokud potřebujete něco okecat.
Jinak vytvořit instanci by samozřejmě šlo. Ale proč? Má smysl vytvářet i další instance té třídy? Jestli ne, pak je rozdíl mezi statickou a nestatickou metodou nebo proměnnou dost kosmetický.
Co když z té třídy s metodou main něco odvodím. Bude se vytvářet báze nebo ta odvozená? "A metoda main musí být ve třídě, která je (z neznámého důvodu) final." :)
Jak dlouho ta třída žije? Bude se na ní volat finalize?
Ve výsledku bu to byla další neviditelná funkcionalita s hromadou dodatečných pravidel.
Asi proto, že se na to nikdo nezeptal.
Důvod je ten, že když chcete vytvořit instanci třídy, musíte vědět jak. Konstruktorem, tovární metodou, builderem? Asi byste řekl, že konstruktorem. Pak ale ta třída musí mít veřejný bezparametrický singleton. A bude třeba velmi komplikované z toho udělat singleton. Takže byste musel přidat spoustu dalších pravidel a programátorům byste svázal ruce. Ale proč? Aby se při zápisu ušetřilo jedno klíčové slovo?
Bingo! Už som si myslel, že som tu sám. Google/GTP musí človek používať ako pomôcku, nemôže to preberať nekriticky. Musíme naďalej rozmýšľať. Pretože oba nástroje sú jednak omylné a jedna podsúvajú nejakú agendu či ideológiu. A to platí aj v technických smeroch.
Celé toto "vysvetlenie" je len dôsledkom pôvodných návrhových rozhodnutí, ktoré zaviedli ktovie prečo. Možno preto, že v 90 rokoch tak letelo OOP a preto všetko musí byť strašne objektovo.