PACKAGE


I package sono delle collezioni di classi. Sono composte da una struttura ad albero (tipo cartelle). I package, a sua volta, possono contenere dei sottopackage che contengono altre classi. Le classi contenute in questi package sono la potenza di Java, infatti sono degli strumenti software per sviluppare i programmi. Questi package e le relative classi sono definite standard. Per vedere i package di Java 8 e le relative classi cercare con il motore di ricerca : “API java 8”. Queste pagine web sono messe a disposizione da Oracle che è la società che da qualche anno sviluppa il linguaggio Java. I package principali della gerarchia delle librerie standard sono java e javax. Per esempio :


java

java.lang

java.lang.reflect


per scendere nella gerarchia si usano i punti “.”. Il vantaggio di avere tanti contenitore permette di avere, se salvati in package diversi, classi con lo stesso nome (ovvio che nello stesso package le classi devono avere nomi differenti). Per esempio :


java.lang.reflect.Array

java.sql.Array

Per usare un package standard usiamo l'istruzione :


import java.awt.*;


in questo modo posso usare tutte le classi contenute nel package awt (infatti il simbolo “*” significa tutti i file). Se voglio usare solo una specifica classe la posso inserire al posto di “*” :


import java.awt.Frame;


in questo caso importo solo la classe Frame.


Le librerie sono contenute nel JDK che usa la JVM e quindi non mi sovraccarica il codice (come le direttive #include dell'assembler e del C o C++).


Se vogliamo scrivere delle informazioni su console dobbiamo usare la classe System quindi dovrei importare :


import java.lang.System;


a sua volta la classe System ha al suo interno l'istruzione import.java.io (package per input e output). Le classi, all'interno del loro codice, importano le classi utili a svolgere il loro compito. Classi. Il package java.lang è il più importante di Java, infatti viene importato di default.


E' possibile creare dei nuovi package per salvarci le classi personali. E' importante notare che in ogni file (classe) che creo devo importare le classi che mi servono all'interno del file stesso. I package personalizzati sono solitamente composti dal nome di dominio del produttore in ordine inverso :


it.gov.istitutodarzo.classijava


equivalente al sito www.istitutodarzo.gov.it se la scuola fosse un produttore di classi Java. I package personali, invece, possono invece contenere un nome legato all'utilizzo delle classi che contiene.


Se una classe creata non viene indicato il package che la contiene, la classe viene inserita in un package virtuale detto : package di default.


Vediamo quali sono le classi che contiene il package principale : java.lang


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.


Con gli abituali linguaggi di programmazione è possibile fare due tipologie di programmi, escludendo le librerie dinamiche (.DLL) o statiche (.LIB) e varie, ovvero le applicazioni a consolle e le applicazioni a finestre, le prime sono quelle più semplici da costruire, che non hanno grafica e che hanno interfaccia a caratteri, tipo le vecchie applicazioni DOS, o javac.exe stesso ( il compilatore Java ), mentre le seconde sono quelle Windows o X-Windows, con tutti i bottoni, menu e via dicendo, più complicate da fare, ma estremamente gradevoli da vedere. Con Java è possibile fare oltre a queste due una terza applicazione, quella che gira su Web, ovvero l'applet. Inizialmente Java era nato solo come linguaggio per il Web, ma poi si è visto che era un linguaggio completo con cui era facile scrivere anche applicazioni a consolle e a finestre. Le prime applicazioni che vedremo sono chiaramente le più semplici, anche se le meno spettacolari, ovvero le applicazioni a consolle.

Un applicazione può essere composta da una o più classi, tutte rinchiuse in omonimi files tipicamente, solo per una questione di semplicità di reperimento, anche se è possibile definirne più di una in un file e chiamare i files con nomi diversi dalle classi in essi contenute, ma se si scrive una applicazione a consolle o una a finestre vi è una classe speciale che deve essere contenuta in un file che ha il suo stesso nome. Questa classe che chiamerò ad esempio ciao conterrà un metodo, chiamato main che rappresenta l'entry point del programma, ovvero il punto dal quale comincerà l'esecuzione del programma.





Una classe quando viene creata ha una visibilità che dipende dal modificatore. Nel primo caso :


class pippo

{

codice classe ...

}


questa classe non ha modificatore quindi ha una visibilità detta visibilità di default. La classe è visibile solo all'interno del package che contiene il suo file, quindi anche da eventuali altre classi interne al contenitore. Invece nel secondo caso :


public class pippo

{

codice classe ...

}


usa il modificatore public che rende la classe accessibile da qualunque programma.