Il linguaggio Java Dott. Ing. M. Banci, PhD ) import java.util.Vector; ) in realtà: fa considerare Vector abbreviazione di java.util.Vector ) La dichiarazione import permette di riferirsi alla classe utilizzando il nome breve senza l'indicazione del package a cui appartiene la classe. 8 Giugno 2007 Esercitazione Java - 1 2 senza import Vector v = new Vector(); // Class not found in compilazione java util.Vector = new java.util.Vector(); // è necessario 8 Giugno 2007 Esercitazione Java - 1 3 ) ) Se non avessimo fatto questa dichiarazione, per creare l'oggetto Vector e per dichiarare variabili per tipo Vector occorreva utilizzare il nome completo java.util.Vector. È importante capire che questa dichiarazione non inserisce niente nel testo del programma compilato: semplicemente permette di abbreviare il nome della classe. Di solito si fanno delle classi che nascono in un package e poi migrano ad altri package. Usare la dichiarazione dei package e in maniera consistente permette di correggere il codice semplicemente cambiando le dichiarazioni package e import all'inizio di ogni file. Usare nel testo di un programma il nome lungo complica questi spostamenti abbastanza comuni. 8 Giugno 2007 Esercitazione Java - 1 4 import import java.util.*; importa tutte le classi del package. Fa cercare le classi non trovare in java.util 8 Giugno 2007 Esercitazione Java - 1 5 A volte sono numerose le classi che devono essere utilizzate, ma in generale tendono a trovarsi in pochi package. È possibile importare un intero package: si utilizza l'asterisco (*) al posto del nome della classe. In ogni caso come l'importazione non di inserisce nulla, anche l'uso della importazione globale non inserisce nulla ma comunica al compilatore di utilizzare il package indicati per ricercare classi che non sono state trovate. Normalmente è possibile utilizzare direttamente classi che si trovano allo stesso package della classe senza importarle. 8 Giugno 2007 Esercitazione Java - 1 6 Possibili collisioni import java.util.*; import java.sql.*; // ambiguo: java.util.Date o java.sql.Date? Date d = new Date (); // ERRORE import java.util.*; import java.sql.*; import java.sql.Date; java.util.Date=new java.util.Date(); // usa java.util.Date Date = new Date(); // usa java.sql.Date Esiste la possibilità di collisioni: per esempio se si importano i due package java.util.* e java.sql.*, troviamo che la classe Date si trova in entrambi i package. Allora quale dei due deve essere utilizzata: il compilatore segnala un errore. In un questi casi o sui usa esplicitamente il nome lungo, oppure si può disambiguare utilizzando dopo la import con *, anche una import specifica, come nell'esempio. 8 Giugno 2007 Esercitazione Java - 1 7 Sempre implicito ) import java.lang.*; ) per System, String, Thread, etc non occorrono import ) Alcune classi vengono automaticamente importate: in particolare è sempre implicito un import java.lang.*; in questo modo non è necessario importare classi di uso molto comune come quelle già dette. 8 Giugno 2007 Esercitazione Java - 1 8