Un altro aspetto:
Java è un linguaggio statico con caratteristiche piuttosto severe. Ciò significa che molte cose che sarebbero piuttosto aperte o dinamiche in altre lingue (c / f Ruby, Lisp ecc.) Sono rigorosamente determinate.
Questa è una decisione di progettazione generale. Il "perché" è difficile da rispondere (beh, perché i progettisti del linguaggio pensavano che sarebbe stato bello!). Il "cosa per" è abbastanza chiaro: consente al compilatore di rilevare un lotto di errori, che è generalmente una caratteristica piuttosto buona per qualsiasi lingua. In secondo luogo, rende relativamente facile ragionare sulla lingua. Ad esempio, è relativamente facile dimostrare la correttezza formale in (sottoinsiemi di) il linguaggio Java; come confronto, ciò sarebbe praticamente impossibile in un linguaggio dinamico come Ruby et al.
Questo modo di pensare permea la lingua, ad esempio la dichiarazione forzata delle possibili eccezioni che un metodo può lanciare, il tipo separato di interface
rispetto a class
per evitare un'eredità multipla ambigua e così via. Per quello che è (un linguaggio realistico OOP imperativo statico con una strong attenzione alla gestione degli errori del tempo di compilazione) quelle cose sono in realtà abbastanza eleganti e potenti. Si avvicinano a linguaggi teorici (scientifici) appositamente creati per esplorare alcuni di questi problemi rispetto a qualsiasi altro linguaggio reale prima (in quel momento, intendiamoci).
. Avere un tipo void
rigoroso è un messaggio chiaro: questo metodo non restituisce nulla, punto. È quello che è. Sostituirlo con l'applicazione per restituire sempre qualcosa porterebbe ad un comportamento molto più dinamico (come in Ruby dove ogni def ha un valore di ritorno esplicito o implicito, sempre), il che sarebbe negativo per provabilità e ragionamento ; o ad enorme massacro usando qualche altro meccanismo qui.
(E NB, Ruby (per esempio) lo gestisce in modo diverso, e la sua soluzione è ancora esattamente accettabile come Java, perché ha una filosofia completamente diversa, ad esempio getta completamente la provabilità e la ragionevolezza fuori dalla finestra mentre metti un focus grande sull'estrema espressività della lingua.)