I package sono collezioni di classi, messe insieme in un unico "pacchetto". Costituiscono delle vere e proprie librerie cui accedere sfruttandone le funzionalità.
Possiamo creare un package racchiudendovi ad esempio le classi che vogliamo riutilizzare su diversi progetti, ma per ora esaminiamo i package già definiti in Java.
È questa la vera potenza odierna di Java, il numero di classi già definite che svolgono i più svariati compiti, ed è anche la parte che continua sempre di più a crescere e ad aggiornarsi con le nuove versioni di Java. I package di Java sono così tanti che ne descriveemo per sommi capi alcuni in un intero capitolo (il capitolo 3) della guida, e ne vedremo più o meno in dettaglio un paio, ovvero quelli che ci serviranno per definire interfacce grafiche e applet.
Ovviamente tutti i package del linguaggio sono descritti nella mastodontica guida in linea del JDK, disposizione anche online (c'è il link nella pagina www.javasoft.com o www.java.sun.com).
Il nucleo di Java contiene solo le parole chiave per la costruzione delle classi, i commenti, i normali costrutti if, switch, while, do-while, for, etichette, break, continue e return (manca il goto), che vedremo in dettaglio nel prossimo capitolo, tutto il resto è implementato nei package del linguaggio, comprese le normali primitive di Input e di Output.
In questo paragrafo vedremo la lista dei packages di Java e ne vedremo uno in particolare, quello che ci interessa vedere per scrivere la nostra prima applicazione Java ancor prima di avere visto i costrutti, ovvero quello in cui possiamo trovare le istruzioni di input e output.
La lista completa dei packages di Java 1.2.1 in ordine alfabetico è la seguente :
com.sun.image.codec.jpeg, com.sun.java.swing.plaf.windows,com.sun.java.swing.plaf.motif, java.applet, java.awt, java.awt.color, java.awt.datatransfer, java.awt.dnd, java.awt.event, java.awt.font, java.awt.geom, java.awt.im, java.awt.image, java.awt.image.renderable, java.awt.print, java.beans, java.beans.beancontext, java.io, java.lang, java.lang.ref, java.lang.reflect, java.math, java.net, java.rmi, java.rmi.activation, java.rmi.dgc, java.rmi.registry, java.rmi.server, java.security, java.security.acl, java.security.cert, java.security.interfaces, java.security.spec, java.sql, java.text, java.util, java.util.jar, java.util.zip, javax.accessibility, javax.swing, javax.swing.border, javax.swing.colorchooser, javax.swing.event, javax.swing.filechooser, javax.swing.plaf, javax.swing.plaf.basic, javax.swing.plaf.metal, javax.swing.plaf.multi, javax.swing.table, javax.swing.text, javax.swing.text.html, javax.swing.text.html.parser, javax.swing.text.rtf, javax.swing.tree, javax.swing.undo, org.omg.CORBA, org.omg.CORBA.DynAnyPackage, org.omg.CORBA.ORBPackage, org.omg.CORBA.portable, org.omg.CORBA.TypeCodePackage, org.omg.CosNaming, org.omg.CosNaming.NamingContextPackage, sun.tools.ttydebug, sunw.io, sunw.util.
Sembrano pochini in effetti, ma se pensiamo che solo il package java.io comprende 50 classi e 10 interfacce, si capisce bene quanto la collezione sia corposa.
A questo punto proviamo a sperimentare l'input e output da console, per farlo utilizziamo il package java.lang.
Per usare un package in una classe, prima della definizione della classe dobbiamo inserire l'istruzione import, ad esempio volendo usare il package java.awt dobbiamo inserire all'inizio del nostro file:
import java.awt.*;
L'asterisco (*) sta ad indicare che vogliamo usarne tutte le classi, se invece vogliamo usarne solo una classe possiamo specificarlo, ad esempio, import java.awt.Frame; potremo usare solo la classe Frame dell'awt.
Nel caso nostro, in cui vogliamo fare una operazione di output, dovremmo dichiarare all'inizio import java.lang.*; oppure, sapendo che la classe del package java.lang che contiene i metodi per fare questo è System. Potremmo scrivere:
import java.lang.System;
La classe System a sua volta avrà al suo interno una import java.io (che è il package per l'input e l'output) per accedere alle classi dell'input e dell'output, e le userà per mandare quello che vogliamo su schermo.
Abbiamo visto un esempio di package che al suo interno invoca ne invoca un altro per affidargli alcuni compiti: nelle librerie Java questo accade spesso, ed è forse per questo che Java appare un po' ostico, però superato il "blocco psicologico", la programmazione diviene semplice ed immediata.
Il package java.lang, che abbiamo appena introdotto, è il più importante di Java. java.lang racchiude le classi fondamentali del linguaggio, tanto che non serve dichiararne l'import, perché java lo importa automaticamente.
java.lang, e anche se esso importa il package java.io, nel nostro file non possiamo sfruttare le classi di java.io, per farlo dovremo importarlo esplicitamente. Questo accade anche se abbiamo una applicazione in più file (con più classi), in ogni file devo importare i package che occorrono alla relativa classe, non basta importarli in una sola.
Vediamo quindi le classi countenute nel package java.lang:
| Classe | Descrizione |
|---|---|
| Boolean | abbiamo detto che i tipi di dato possono essere anche rappresentati da oggetti detti |
| contenitori | questa è la classe che genera i contenitori per i tipi di dato booleani (vero, falso) |
| Byte | questa è la classe che genera i contenitori per i tipi di dato interi corti (di un byte) |
| Character | questa è la classe che genera i contenitori per i tipi di dato caratteri |
| Character.Subset | questa è la classe che genera i contenitori per i tipi di dato caratteri con codifica unicode |
| Character.UnicodeBlock | questa è la classe che genera i contenitori per i tipi di dato caratteri con codifica unicode 2.0 |
| Class | rappresenta classi e interfacce a runtime (in esecuzione), in Java è possibile a tempo di esecuzione creare, mandare in esecuzione e compilare classi, il compilatore e l'esecutore sono mischiati in modo strano, ma a noi non serviranno queste classi "particolari", perché scriveremo delle applicazioni tranquille |
| ClassLoader | caricatore di classi a tempo di esecuzione |
| Compiler | compilatore di classi a tempo di esecuzione |
| Double | questa è la classe che genera i contenitori per i tipi di dato reali in virgola mobile di 64 bit |
| Float | questa è la classe che genera i contenitori per i tipi di dato reali di 32 bit in virgola mobile |
| Integer | questa è la classe che genera i contenitori per i tipi di dato interi |
| Long | questa è la classe che genera i contenitori per i tipi di dato interi doppi |
| Math | contiene metodi che emulano funzioni matematiche |
| Number | classe di oggetti contenitori numeri generici |
| Object | questa è la classe da cui derivano tutte le classi del linguaggio Java, ovvero ogni classe è sottoclasse (non per forza diretta) di questa |
| Package | contiene metodi per estrapolare informazioni sui package di Java |
| Process | Java è un linguaggio che permette di gestire Thread, ovvero programmini che girano in parallelo, questa classe si occupa di loro, come le altre classi di java.lang: Runtime, RuntimePermission, Thread, ThreadGroup, ThreadLocal, Throwable |
| SecurityManager | per la sicurezza |
| Short | questa è la classe che genera i contenitori per i tipi di dato interi corti |
| String | questa è la classe che genera i contenitori per i tipi di dato stringhe di caratteri |
| StringBuffer | questa è la classe che genera i contenitori per i tipi di dato stringhe di caratteri modificabili |
| System | è la classe che interagisce con il sistema, essa contiene molti metodi utili, e dei riferimenti ad altre classi (detti class field), è quella che useremo ad esempio noi per creare un output su schermo a caratteri |
| Void | questa è la classe che genera i contenitori per i tipi di dato void, ovvero senza tipo. Questo sembra un tipo di dato inutile, ma vedremo che non lo è affatto, anzi è utilissimo, infatti è utile quando si vuole definire un metodo-procedura (un metodo che non ha valore di ritorno), in Java esistono solo funzioni, le quali sono obbligate a ritornare un valore del tipo che dichiarano. Dichiarando un metodo come void, si emula la procedura, ovvero non vi è la necessità del return |
Utilizzare OSGi in EclipseArticolo di introduzione all'utilizzo di OSGI in ambiente Eclipse |
Jsoup: parsing semplice di HTML5 in javaPresentazione della libreria JSOUP: un parser molto semplice per... |
The Cube: una demo 3D per Android con JMonkeyUn progetto di demo passo-passo per gestire gli eventi 3d di base in... |
Parsing JSON semplice con google GSONBreve ed essenziale introduzione alla libreria di google per la... |
AppFuse: realizzare un'applicazione completa (implementare i servizi)Prosegue la serie per realizzare una app completa con AppFuse.... |
Guida Apache StrutsIl primo e più utilizzato tra i framework MVC del mondo Java,... |
Guida Java SpringScoprire il lightweight container più famoso del mondo Java.... |
Guida Java 6Prendendo le mosse dalla guida Java, già presente su HTML.it,... |
Ogni mese, direttamente nella tua e-mail: articoli, script e guide su Java, Visual Basic, VB.Net ed i più diffusi linguaggi di programmazione.
Iscriviti alla newsletter
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |