Newsgroup: it.comp.java
Titolo: Alcuni (semplici?) dubbi su Java

- Perchè si dice che Java è un linguaggio "fortemente tipato" (l'ho trovato
su alcuni testi e sulle slides del mio prof.)? Non dovrebbe essere il
contrario, dal momento che si ha il late binding e quindi il tipo viene
deciso a run-time?
- Una classe derivata eredita anche il costruttore della classe base? Se sì,
come penso(avo), può essere una spiegazione del fatto che all'interno del
costruttore della derived_class devo *prima di tutto* richiamare il
costruttore della base_class con la parola chiave "super"? Altrimenti non
vedo perchè dovrei *per forza* costruire l'oggetto della classe derivata.
Tuttavia sul test la risposta esatta era "La classe derivata eredita tutto
tranne i costruttori", ma non riesco ancora bene a spiegarmi il perchè.
- Una domanda che è stata fatta al recente test in itinere: in java esistono
il passaggio per valori e per riferimento?
Da quanto ho capito leggendo TIJ soprattutto, in Java esistono solo i
riferimenti
a oggetti; cioè se io scrivo
Oggetto a = new Oggetto();
è chiaro che "a" si riferisce all'oggetto messo in memoria heap. Se io ad un
metodo passo "a", sto passando per riferimento, giusto? In c++ si userebbe
&a  per passare l'oggetto riferito da "a", in Java la deferenziazione è
automatica? Come posso passare un oggetto (cioè passare per valore, giusto?)
ad un metodo se la sintassi di Java mi permette di usare solamente il
reference all'oggetto?
- In un file.java deve esserci solamente una classe public? Questa deve dare
il nome al nomeClasse.java, vero?

 il nome al nomeClasse.java, vero?
Un file .java deve contenere solo una classe public. Questa, in realta', non
e' una specifica del linguaggio java, ma e' un requisito del compilatore
java della Sun. Per quanto riguarda le regole di naming, se il nome della
classe e', ad esempio, NomeClasse, il file si chiamera' NomeClasse.java.
Nota la N maiuscola di Nome: per convenzione, il nome di una classe inizia
sempre con una maiuscola, il nome di un package sempre con una minuscola.
Spero di esserti stato di aiuto,
ciao,
Luigi

il nome al nomeClasse.java, vero?
Questa e una specifica/limitazione (simpatica questa *specifica
limitazione* me la segno ;-D ) del compilatore della Sun, pertanto
altri potrebbero non averla.
-- 
Magellano
"Contro la stupidita` anche gli Dèi lottano invano",
da _Giovanna d'arco_ di Friedrich Schiller

 
Piccola precisazione: un file .java puo' contenere anche le dichiarazioni
di altre classi non public.
Riassumendo (come gia' detto il tutto e' riferito al compilatore Sun, ma
si applica praticamente anche a tutti gli altri), un sorgente Java:
* puo' contenere le dichiarazioni di piu' classi
* se fra queste classi ce n'e' una public, il nome del file deve essere
lo stesso della class. Come conseguenza nel file ci potra' essere la
dichiarazione di un'unica classe public, ed eventualmente altre classi
non public.
Curiosita': qualcuno conosce qualche compilatore che per questo aspetto
si comporta in maniera differente da quello di Sun?
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

si comporta in maniera differente da quello di Sun?
Non credo ce ne siano (ma magari mi sbaglio). Su Linux ho usato la JVM
del progetto blackdown ma si comporta allo stesso modo...credo sia
dovuto al fatto che se ho 10 classi in un file posso avere 10 main ma
nel momento in cui io dico alla VM: java Esempio lei va a cercare il
main della classe pubblica chiamata Esempio, per fare eseguire il main
delle altre classi bisogna specificarglielo
Rhymes



Beh...veramente si parlava del compilatore...e' ovvio che in fase di
esecuzione, il main che viene eseguito dalla JVM e' quello che si indica
sulla riga di comando (e questo e' da specifica, non dipende dalla
particolare implementazione della JVM).


Beh...veramente si parlava del compilatore...
Scusa ma cosa dovrebbe fare un compilatore in quel caso ? Se la JVM si
comporta sempre in quel modo...
Rhymes



...hai mai provato a compilare un sorgente (un unico file .java) che
contiene la dichiarazione di piu' classi? :-)


contiene la dichiarazione di piu' classi? :-)
Certo :) mi sa che mi sono spiegato male 
Rhymes



Il comportamento del compilatore non ha niente a che vedere col
comportamento della JVM...e ci mancherebbe altro!...altrimenti addio
portabilita'...
La JVM si aspetta comunque dei contenitori di bytecode (normalmente i file
.class), uno per ogni classe che il classloader puo' caricare.
Il compilatore invece lavora sui sorgenti e produce il bytecode. La JVM
non opera sui sorgenti. Dato che si parlava di sorgenti, il comportamento
della JVM non c'entra nulla col comportamento del compilatore.
