Java

3.3609534619462 (881)
Inviato da david 18/03/2009 @ 16:09

Tags : java, programmazione, computer, high tech

ultime notizie
Come operare la serializzazione in Java (2/2) - Programmazione.it
Non tutte le classi nel linguaggio Java possono essere serializzate e comunque una classe, per essere serializzata, deve implementare l'interfaccia java.io.Serializable o java.io.Externalizable. Quest'ultima vanta una maggiore elasticità,...
Come Aggiornare Java all' ultima versione disponibile - NanoPress
Il linguaggio di programmazione Java è stato ideato nel 1995 con l'obiettivo di creare un linguaggio compatibile con la moltitudine di piattaforme disponibili ed i vari browser utilizzati per navigare in Internet. Tenere aggiornato Java all'ultima...
Giochi gratis per il tuo cellulare! - Mondo Informatico
Se siete appassionato di giochi java per il vostro cellulare,non potete farvi perdere il sito giochigratisjava.net! Questo sito è un ottima risorsa per i vostri giochi! In pochi istanti potrete accedere a download gratuiti di un infinità di giochi java...
Come operare la serializzazione in Java (1/2) - Programmazione.it
Il linguaggio Java possiede un'API standard che permette, mediante un apposito algoritmo, di trasformare gli oggetti in una sequenza di byte (serializzazione), che possono essere inviati in rete ad un socket (per poter essere condivisi con un'altra...
Sviluppare con Android, un'introduzione - Programmazione.it
Le applicazioni Android sono scritte in linguaggio Java e vengono eseguite all'interno di una Virtual Machine (VM), ma non la classica JVM, bensì la Dalvik Virtual Machine, che si trova all'interno dei processi gestiti dal kernel....
Arriva un secondo fumetto segreto su Google Chrome - oneBlog
... per mesi come la rivoluzione del Web 2.0: un browser nuovo, veloce, con funzioni gradevoli, quali i tabs, una Java Virtual Machine dalle elevate prestazioni, un autocompletamento delle ricerche (nella cosiddetta omnibox), la navigazione nascosta....
Oracle: Java resterà aperto e MySQL continuerà a vivere - Il Software
Java resterà "open" e MySQL continuerà a vivere. Parola di Oracle. Il presidente dell'azienda, Charles Phillips, ed Edward Screven, "chief corporate architect", hanno voluto sgombrare il campo: Oracle non decreterà la fine delle tecnologie acquisite da...
SpringSource acquisisce Hyperic: stack Java open source completo? - oneBlog
SpringSource è la società che si occupa di sviluppare Spring (uno dei framework Java enterprise più popolari) e nei giorni scorsi ha annunciato un'acquisizione che potrebbe rivelarsi strategica per il suo avvenire. L'acquisizione di Hyperic segue...
Java Micro Edition SDK 3.0, le principali novità - Programmazione.it
Gli strumenti di sviluppo per l'edizione Micro di Java arrivano a una nuova versione, che sostituisce il Java Wireless Toolkit 2.5.2, a sua volta comprensivo anche di Java Toolkit 1.0 per CDC. Il nuovo toolbox per applicazioni mobili integra,...
Modifiche nella codifica UTF-8 in Java - Programmazione.it
Nelle ultime versioni Java c'è stata una modifica che forse è passata inosservata e che giustamente è il caso di sottolineare, come fa un articolo di Xueming Shen. Tale modifica riguarda la codifica UTF-8 e in particolare il rifiuto della...

Java (linguaggio)

Java è un linguaggio di programmazione orientato agli oggetti, derivato dal C++ (e quindi indirettamente dal C) e creato da James Gosling e altri ingegneri di Sun Microsystems. La piattaforma di programmazione Java è fondata sul linguaggio stesso, sulla Macchina virtuale Java (Java Virtual Machine o JVM) e sulle API Java. Java è un marchio registrato di Sun Microsystems.

Il gruppo di progetto iniziò a lavorare nel 1991, al linguaggio inizialmente fu dato il nome Oak, tale nome fu successivamente cambiato in Java a causa di un problema di copyright (il linguaggio di programmazione Oak esisteva già). Dato che gli ideatori del linguaggio si trovavano spesso ad un caffè presso il quale discutevano del progetto, il linguaggio prese il nome da tale abitudine (Java è una qualità di caffè dell'omonima isola dell'Indonesia), tanto che il magic number che identifica un file di bytecode ottenuto dalla compilazione di un file Java è 0xCAFEBABE (probabile riferimento alla cameriera che li serviva).

Java fu annunciato ufficialmente il 23 maggio 1995 a SunWorld.

Il 13 novembre 2006 la Sun Microsystems ha rilasciato la sua implementazione del compilatore Java e della macchina virtuale sotto licenza GPL.

L'8 maggio 2007 SUN ha rilasciato anche le librerie (tranne alcune componenti non di sua proprietà) sotto licenza GPL rendendo Java un linguaggio di programmazione la cui implementazione di riferimento è libera.

Per facilitare il passaggio a questo linguaggio per i programmatori old-fashioned legati in particolare a linguaggi come il C la sintassi di base (strutture di controllo, operatori e così via) è stata mantenuta pressoché identica.

La prima caratteristica, l'orientamento agli oggetti, si riferisce a un moderno metodo di programmazione e progettazione, la programmazione orientata agli oggetti (OOP).

L'idea alla base della OOP è di rappresentare, nella progettazione del software, le entità reali o astratte che compongono il problema sotto forma di oggetti. Gli oggetti sono caratterizzati da delle proprietà (definite variabili o campi di istanza o di esemplare) e di metodi applicabili sugli oggetti stessi, che possono ad esempio modificarne lo stato o estrarne informazioni.

I programmi scritti in Java possono essere unicamente orientati agli oggetti, di conseguenza tutto il codice deve essere necessariamente incluso in una classe.

Sebbene Java possa operare sia su oggetti che su tipi di dati primitivi, è considerato un linguaggio ad oggetti puro, ovvero nel quale gli oggetti sono le entità di base del linguaggio, anziché essere costruiti partendo da costrutti ad un inferiore livello di astrazione.

Una classe estende sempre una e una sola altra classe (ovvero non esiste ereditarietà multipla), ma può a sua volta essere estesa da un numero arbitrario di classi. Se non si utilizza la clausola extends, la classe estende comunque una superclasse implicita, la classe Object.

Questo sistema rende disponibile un modo per creare gerarchie di classi ben definite, ad esempio una classe Quadrilatero può definire alcuni comportamenti generali per tutte le figure geometriche con 4 lati, tuttavia si può presentare la necessità di aver bisogno di caratteristiche più specifiche per i nostri oggetti, quindi si creerà una classe Quadrato che estende la classe Quadrilatero da cui deriva tutti gli attributi (le variabili di istanza) e tutti i comportamenti (i metodi), salvo poi riscrivere (tramite overriding) quei comportamenti che sono prettamente associati ai quadrati (ovvero legati alla proprietà specifica dei quadrati di avere 4 lati uguali).

L'overriding si attua semplicemente scrivendo all'interno della classe che estende (in questo caso la classe Quadrato) il metodo che vogliamo riscrivere, utilizzando la stessa firma del relativo metodo della superclasse (deve avere lo stesso nome e gli stessi attributi, in numero e tipo, e lo stesso ordine).

Java adotta un modello di ereditarietà basato sull'ereditarietà singola; in altre parole, una classe può estendere una sola superclasse. Su questo punto Java si differenzia dal C++, basato sul modello dell'ereditarietà multipla. Dopo l'avvento di Java, l'ereditarietà singola si è gradualmente affermata come modello standard di ereditarietà nelle tecnologie object-oriented, ed è stata abbracciata, per esempio, anche dai linguaggi del framework .NET Microsoft.

L'utilizzo di una interfaccia in Java consente di trattare in modo omogeneo tutti gli oggetti che forniscono un dato insieme di servizi, a prescindere dalla loro implementazione (e quindi dalla loro particolare classe di appartenenza). Dal punto di vista sintattico, una interfaccia Java consiste principalmente di una lista di dichiarazioni di metodi che tutte le classi che implementano l'interfaccia devono fornire.

Si noti che nella dichiarazione di un metodo in un'interfaccia le parole chiave public e abstract sono sempre implicite e, dunque, facoltative. Con l'implementazione dell'interfaccia, la classe Quadrato deve contenere al suo interno i metodi calcolaPerimetro e calcolaArea propri (o possono essere ereditati dalla superclasse). L'utilizzo delle interfacce viene usato quando si hanno delle gerarchie di oggetti, o oggetti semplici che possiedono delle operazioni comuni (metodi), ma l'implementazione di queste sono differenti una dall'altra.

La seconda caratteristica, l'indipendenza dalla piattaforma, significa che l'esecuzione di programmi scritti in Java deve avere un comportamento simile su hardware diverso. Si dovrebbe essere in grado di scrivere il programma una volta e farlo eseguire dovunque. Questo è possibile con la compilazione del codice di Java in un linguaggio intermedio detto bytecode, basato su istruzioni semplificate che ricalcano il linguaggio macchina. Il bytecode verrà quindi eseguito da una macchina virtuale. Inoltre, vengono fornite librerie standardizzate per permettere l'accesso alle caratteristiche della macchina (come grafica e networking) in modo unificato. Il linguaggio Java include anche il supporto per i programmi con multithread, necessario per molte applicazioni che usano la rete.

La portabilità è un obiettivo tecnicamente difficile da raggiungere, e il successo di Java in questo ambito è materia di alcune controversie. Sebbene sia in effetti possibile scrivere in Java programmi che si comportano in modo consistente attraverso molte piattaforme hardware diverse, bisogna tenere presente che questi poi dipendono dalle macchine virtuali che sono programmi a sé e che hanno inevitabilmente i loro bug, diversi l'una all'altra: per questo è nata una parodia dello slogan di Sun "Scrivi una volta, esegui dovunque" ("write once, run everywhere"), che è diventato "Scrivi una volta, fai il debug ovunque" ("write once, debug anywhere").

Le prime implementazioni del linguaggio usavano una macchina virtuale Java che interpretava il bytecode per ottenere la massima portabilità, definita Architecture Neutral. Questa soluzione si è però rivelata poco efficiente, in quanto i programmi interpretati erano molto lenti. Per questo motivo, tutte le implementazioni recenti di macchine virtuali Java hanno incorporato un compilatore just-in-time (JIT compiler), cioè un compilatore interno, che al momento del lancio traduce al volo il programma bytecode Java in un normale programma nel linguaggio macchina del computer ospite. Inoltre, questa ricompilazione è dinamica, cioè la macchina virtuale analizza costantemente il modello di esecuzione del codice (profiling), e ottimizza ulteriormente le parti più frequentemente eseguite, mentre il programma è in esecuzione.

Questi accorgimenti, a prezzo di una piccola attesa in fase di lancio del programma, permettono di avere delle applicazioni Java decisamente più veloci e leggere. Tuttavia, anche così Java resta un linguaggio meno efficiente dei linguaggi compilati come il C++, scontando il fatto di possedere degli strati di astrazione in più, e di implementare una serie di automatismi, come il garbage collector, che se da un lato fanno risparmiare tempo ed errori in fase di sviluppo dei programmi, dall'altro consumano memoria e tempo di CPU in fase di esecuzione del programma finito.

La piattaforma Java fu uno dei primi sistemi a fornire un largo supporto per l'esecuzione del codice da sorgenti remote. Un Java applet è un particolare tipo di applicazione che può essere avviata all'interno del browser dell'utente, eseguendo codice scaricato da un server web remoto. Questo codice viene eseguito in un'area (sandbox) altamente ristretta, che protegge l'utente dalla possibilità che il codice sia malevolo o abbia un comportamento non desiderato; chi pubblica il codice può applicare un certificato che usa per firmare digitalmente le applet dichiarandole "sicure", dando loro il permesso di uscire dall'area ristretta e accedere al filesystem e al network, presumibilmente con l'approvazione e sotto il controllo dell'utente. In realtà gli applet non hanno avuto molta fortuna. Infatti presuppone che il client in cui essi vengono eseguiti abbia installata la JRE (deve eseguire il codice dell'applet). Hanno avuto fortuna le applicazioni che prevedono il cosiddetto thin-client, cioè un client 'leggero' che non ha bisogno di particolari strumenti per eseguire il codice remoto (a volte è necessario solo il browser).

Rispetto alla tradizione dei linguaggi a oggetti da cui deriva (e in particolare rispetto al suo diretto progenitore, il C++), Java ha introdotto una serie di notevoli novità rispetto all'estensione della sua semantica. Fra le più significative si possono citare probabilmente la possibilità di costruire GUI (interfacce grafiche) con strumenti standard e non proprietari utilizzando i package java.awt e javax.swing (per il C++ e altri linguaggi analoghi solitamente le GUI non fanno parte del linguaggio, ma sono delegate a librerie esterne), la possibilità di creare applicazioni multi-thread, ovvero che svolgono in modo concorrente molteplici attività, e il supporto per la riflessione, ovvero la capacità di un programma di agire sulla propria struttura e di utilizzare classi caricate dinamicamente dall'esterno.

Il seguente esempio stampa il testo "Hello world".

La classe porta il nome HelloWorld e, poiché è dichiarata "public", significa che anche il nome del file nel quale verra' scritto il programma dovra' chiamarsi HelloWorld.java. Quindi il nome del file .java e il nome della classe "pubblica" devono coincidere!

La classe HelloWorld contiene un unico metodo, che si chiama "main". È un nome particolare. In effetti, al caricamento della classe, l'interprete java cerchera' il metodo che portera' questo nome.

Questa operazione stampa sullo schermo la scritta "Hello world". Entrando più nel dettaglio, il metodo println() viene invocato su un oggetto statico di tipo PrintStream chiamato "out", il quale, a sua volta si trova all'interno della classe System.

I caratteri usano la codifica a 16 bit Unicode. Contiene tutti i caratteri usuali, oltre a tutti i set di caratteri di molte lingue come Greco, Cirillico, Cinese, Arabo, ecc. In Java si possono usare tutti questi caratteri, anche se molti editor non hanno il supporto per i set di caratteri diversi dal ASCII. Gli Array e le stringhe non sono tipi primitivi ma oggetti.

Java fu inizialmente rilasciato come Java Development Kit 1.0 (JDK 1.0). Questo comprende Java Runtime (la virtual machine e le librerie di classi), e gli strumenti di sviluppo (es. il compilatore Java). Successivamente, Sun fornì un pacchetto che comprendeva solo Java runtime, chiamato Java RunTime Environment (JRE). Normalmente le persone si riferiscono ad una particolare versione di Java attraverso la versione del JDK (es. JDK 1.4) Le versioni JDK 1.2 e successive sono spesso chiamate Java 2. Per esempio, il nome ufficiale del JDK 1.4 è Java(TM) 2 Platform, Standard Edition 1.4.

Sebbene il linguaggio sia molto semplice da imparare, l'utilizzo delle architetture e delle specifiche richiede un tempo di apprendimento molto lungo.

La programmazione in Java è una specializzazione della programmazione con linguaggi orientati agli oggetti.

L'apprendimento del linguaggio non è difficile. La vastità delle "librerie" (o più correttamente package) standard del linguaggio è tale da renderne praticamente impossibile la "padronanza"; per programmare in Java è dunque necessario avere a disposizione la documentazione delle API del linguaggio, disponibile in linea sul sito ufficiale.

Un buon punto di partenza per imparare Java è il tutorial di Sun.

Per sviluppare programmi in Java è teoricamente sufficiente un qualsiasi editor di testo; in pratica, se si vuole scrivere qualcosa di più del classico hello world, occorre un ambiente di sviluppo integrato. Esistono diversi IDE (Integrated Development Environment, ambiente di sviluppo integrato), alcuni gratuiti ed altri a pagamento.

Fra questi quello più premiato è IntelliJ IDEA vincitore fra l'altro del premio Best Java IDE 2005 rilasciato da JDJ. Si tratta di un IDE completo, molto funzionale ed in grado di garantire una padronanza completa del codice che si sta sviluppando.

La Sun stessa ha promosso lo sviluppo di un ambiente di sviluppo gratuito e open source chiamato NetBeans e lo mette a disposizione gratuitamente insieme a Sun Java Studio. Questi due ambienti sono scritti in Java e NetBeans è distribuito (opzionalmente) insieme alla macchina virtuale . Come entità separata, NetBeans è scaricabile da netbeans.org. Uno degli IDE commerciali più diffusi è JBuilder prodotto dalla Borland.

Per la parte superiore



Java 5

Java 5 è la versione 5.0 dell'edizione standard del linguaggio di programmazione Java (in inglese Java 2 Platform Standard Edition o J2SE). Questa versione era inizialmente conosciuta come versione 1.5.0, ma i creatori del linguaggio, per enfatizzarne il livello di maturità e stabilità raggiunto, hanno preferito rinominarla eliminando l'uno iniziale . Il nome in codice di Java 5 durante lo sviluppo era Tiger.

Questa versione è stata pubblicata per la prima volta il 29 settembre 2004 e contiene nuove funzionalità che puntano a semplificare e potenziare il linguaggio stesso. Il codice bytecode prodotto da un compilatore Java 5 può essere eseguito su qualsiasi macchina virtuale Java. Per usufruire quindi delle nuove caratteristiche del linguaggio non è necessario aggiornare la macchina virtuale.

Le nuove caratteristiche del linguaggio hanno permesso di potenziare e semplificare altre componenti standard di Java. Ad esempio gli Enterprise JavaBeans, che fanno parte delle specifiche dell'edizione enterprise di Java, erano noti agli sviluppatori per essere particolarmente complessi da programmare, ma dalla versione 3.0 questo problema è stato risolto grazie all'utilizzo dei metadati.

È stata aggiunta alla classe System la funzione printf che permette una formattazione dell' output simile all'omonima funzione del linguaggio C.

I tipi generici o generics permettono di semplificare l'utilizzo di classi che, come ad esempio le classi del package Collection, gestiscono collezioni di oggetti di qualsiasi tipo. Senza l'uso dei tipi generici, la gestione di oggetti di qualsiasi tipo può essere effettuata convertendo preventivamente gli oggetti nel tipo Object, che è la classe da cui derivano tutte le altre. Questa soluzione obbliga il programmatore a utilizzare operazioni di conversione di tipo (casting) ogniqualvolta è necessario prelevare un oggetto dalla collezione; inoltre non è possibile controllare a tempo di compilazione se vi siano errori di conversione di tipo, ad esempio se viene aggiunto alla collezione un tipo di oggetto non valido.

In entrambe le versioni vi è un errore di tipo in quanto la variabile s2 non è di tipo String. Tuttavia nella versione 1.4 il codice viene compilato e l'errore viene individuato solo a tempo di esecuzione, con la versione 1.5 l'errore è individuato a tempo di compilazione perché si è dichiarata la variabile lista come una collezione di oggetti di tipo String.

I metadati permettono di associare informazioni aggiuntive alle classi, alle interfacce, ai metodi e ai campi di un programma Java. Queste informazioni aggiuntive, dette anche annotazioni, possono essere lette e processate sia dal compilatore Java che da altri strumenti, e possono essere memorizzate nei file .class prodotti dal compilatore per essere poi lette a tempo di esecuzione tramite le apposite funzioni di introspezione messe a disposizione dal linguaggio.

Anche questa modifica va nella direzione di una maggiore leggibilità del codice, in quanto elimina la necessità di effettuare una esplicita conversione di tipo.

Per la parte superiore



Swing (Java)

Esempio di widget in Java 5.0+ per il X Window System. La renderizzazione dei font potrebbe variare a seconda della piattaforma utilizzata.

Swing è un Framework per Java. È una parte di Java Foundation Classes (JFC). Swing include una Interfaccia grafica (GUI), dei widget come le caselle di testo, pulsanti, pannelli e tabelle.

I widget Swing forniscono una GUI più sofisticata rispetto alla precedente Abstract Window Toolkit. Essendo scritti in puro Java, funzionano allo stesso modo su tutte le piattaforme (su cui java gira), al contrario delle AWT le quali sono legate al sistema grafico nativo del sistema operativo. Swing supporta il look and feel non tramite quello che viene fornito nativamente dal gestore delle finestre, ma tramite una sua emulazione. Questo significa che si può ottenere un qualsiasi L&F supportato su qualsiasi piattaforma. Lo svantaggio di questi componenti è quello di una più lenta esecuzione. Il vantaggio è una uniformità di visualizzazione tra svariate piattaforme.

La Internet Foundation Classes (IFC) era una libreria grafica per Java sviluppata originalmente dalla Netscape Communications Corporation e rilasciata per la prima volta nel 16 dicembre 1996.

Il 2 aprile 1997, Sun Microsystems e Netscape Communications Corporation annunciarono la loro intenzione di combinare IFC con altre tecnologie per creare la Java Foundation Classes. Oltre ai componenti originalmente forniti da IFC, Swing introdusse un meccanismo che permetteva il look and feel di ogni componente di una applicazione di essere alterato senza dover fare cambiamenti significativi al codice sorgente. L'introduzione del supporto al look and feel a plug-in permise ai componenti Swing di emulare l'apparenza dei componenti nativi mantenendo comunque il beneficio di essere indipendenti dalla piattaforma. Questa caratteristica rende molto semplice l'avere un look di una applicazione individuale che appare significativamente differente da tutti gli altri programmi nativi.

Originalmente distribuito come una libreria scaricabile separatamente, Swing fu inclusa come parte della Java Standard Edition fin dalla versione 1.2. Le classi Swing sono contenuto nella gerarchia package.

Comunque, alla base, ogni componente Swing si basa su di un contenitore AWT, dato che i JComponent di Swing estendono quelli di AWT. Questo permette a Swing di innestarsi al framework di controllo della GUI del SO nativo, compresi la cruciale mappatura device/screen e le interazioni dell'utente (come le pressioni dei tasti, i movimenti del mouse, etc.) Swing semplicemente "traduce" la sua (SO agnostico) semantica su quella sottostante dei componenti del SO. Così, per esempio, ogni componente di Swing si disegna sul dispositivo grafico in risposta alla chiamata component.paint(), la quale è definita nel container AWT. Ma, differentemente dai componenti AWT, i quali delegano il disegno ai widget nativi del SO, i componenti di Swing sono responsabili della loro stessa renderizzazione.

Soprattutto, l'architettura di Swing delega il compito del mappaggio di tutte le sfaccettature della semantica della GUI del SO in un semplice, ma generalizzato percorso al contenitore AWT. Poi, costruito su di una piattaforma generale, crea le sue proprie ricche e complesse semantiche della GUI, sotto forma della classe JComponent.

Tipicamente, gli oggetti dei modelli dei componenti Swing sono responsabili di provvedere ad una concisa interfaccia per la definizione degli eventi che vengono emessi, nonché proprietà accessibili per il modello dei dati da usare con i JComponent associati. Dato questo il modello di sviluppo MVC è un percorso loosely-coupled di oggetti in relazione collaborativamente, il modello provvede i consueti modi per creare event listeners agli oggetti del data model. Tipicamente, questi eventi sono model centric (ad esempio: l'inserimento di righe in un modello di tabella) e sono mappati dalla specializzazione del JComponent in un ben preciso evento per il componente GUI.

Per esempio, il JTable ha un modello chiamato TableModel che descrive una interfaccia per come una tabella dovrebbe accedere ai dati. Una implementazione di default di questo opera su di un array bidimensionale.

La componente visiva di un JComponent Swing è l'oggetto usato per "rappresentare" graficamente il controllo GUI concettuale. Una distinzione di Swing, come framework GUI, è il suo utilizzo sulla continua rappresentazione di controlli GUI (al contrario dell'uso dei componenti nativi della gui del SO). Questa distinzione è fonte di complicazione quando si mischiano controlli AWT, che usano controlli nativi, con controlli Swing in una GUI.

Deve essere notato che il tipico uso del framework Swing non richiede la creazione di modelli modificati, siccome il framework fornisce un insieme di implementazioni di default che sono trasparentemente, per default, associati con le corrispondenti figlie della classe JComponent nella libreria Swing. In generale, solo componenti complessi come le tabelle e le viste di collezioni potrebbero aver bisogno di modifiche ai loro modelli di default.

Alla fine, in termini di composizione visuale e gestione, Swing possiede layout relativi (i quali specificano la posizione reciproca tra i componenti) che operano in maniera opposta rispetto ai layout assoluti (i quali specificano le esatte posizioni e dimensioni dei componenti). Questa direzione verso visualizzazioni "fluide" è una diretta politica dello sviluppo di Swing che riemerge dalle ceneri del framework AWT e l'associata assunzione sulle Applet dell'ambiente operativo che ha tracciato il disegno e sviluppo dell'originale toolkit GUI di Java. Concettualmente, questa visualizzazione della gestione del layout è abbastanza simile a quella che gestisce la renderizzazione del contenuto dell'HTML nei browser, ed indirizza lo stesso insieme di concetti che hanno motivato i creatori.

Swing permette di specializzare il look and feel dei suoi widget, modificando quello di default (con parametri a runtime), basandosi su di uno esistente, creandone uno da zero, o, iniziando con J2SE 5.0, usando lo skinnable Synth Look and Feel, il quale viene configurato con un file di proprietà XML. Il look and feel può essere modificato a runtime.

Fin dalle prime versioni di Java, una porzione del Abstract Windowing Toolkit (AWT) ha fornito API indipendenti dalla piattaforma per i componenti della GUI. In AWT, ogni componente è renderizzato e controllato da uno nativo specifico per il sottostante sistema operativo. Al contrario, i componenti Swing sono spesso descritti come lightweight ("leggeri") perché non necessitano l'allocazione di risorse native nel toolkit della GUI del sistema operativo. I componenti AWT vengono detti heavyweight components ("componenti pesanti").

La maggior parte delle API Swing è generalmente una estensione complementare di AWT piuttosto che un diretto rimpiazzo. Infatti, ogni interfaccia Swing lightweight è basata su un componente AWT heavyweight perché tutti i componenti top-level in Swing JApplet, JDialog, JFrame e JWindow estendono i container top-level AWT. La funzionalità di renderizzazione usata da Swing per disegnare i suoi componenti è fornita da Java2D, un'altra parte di JFC. Comunque l'uso contemporaneo di componenti lightweight ed heavyweight nella stessa finestra è generalmente scoraggiato per incompatibilità di Z-order.

Lo Standard Widget Toolkit (SWT) è un toolkit concorrente originalmente sviluppato dalla IBM ed ora mantenuto dalla Eclipse Foundation. Le implementazioni SWT sono più in comune con i componenti AWT heavyweight. Questo conferisce benefici come una più accurata fedeltà con il sottostante toolkit window nativo, al costo di una maggior esposizione ad una programmazione più nativa nel modello di programmazione.

L'avvento di SWT ha dato origine ad una grande divisione tra gli sviluppatori del Java desktop con molti fortemente favorevoli a SWT e altri a Swing. Lo sviluppo di Sun su Swing continua a concentrarsi sulla fedeltà del look and feel (PLAF) in ogni toolkit window. Nel frattempo non vi sono altre risorse di PLAFs fedeli, molti dei quali sono nel sito javootoo.

C'è stato un dibattito significativo sulle prestazioni di SWT rispetto a quelle di Swing; La dipendenza di SWT da JNI lo rende lento quando i componenti GUI e Java necessitano di scambiarsi i dati, ma più veloce a disegnarsi quando il modello dei dati è stato caricato nella GUI.

SWT serve alla piattaforma delle finestre molto bene ma è considerata da alcuni di essere meno efficace come tecnologia per lo sviluppo multipiattaforma. Usando le funzionalità di alto livello dei window toolkit nativi, SWT riporta alla situazione vista negli anni 90 (con toolkit come zApp, Zinc, XVT e IBM/Smalltalk) dove i toolkit cercavano di mascherare le differenze nel comportamento e gestione del focus, della gestione degli eventi e dei layout grafici. Il fallimento di avere eguali comportamenti su ogni piattaforma può causare errori di programmazione subdoli e difficili da risolvere, che impattano sull'interazione dell'utente e sull'aspetto grafico della GUI.

Il seguente è un programma Hello world di esempio che usa Swing.

Per la parte superiore



Annotazione (Java)

Nella programmazione al computer, una annotazione Java è un modo per aggiungere metadata nel codice sorgente Java che può essere disponibile per il programmatore durante l'esecuzione. Molte volte è usata come alternativa alla tecnologia XML.

Le annotazioni Java possono essere aggiunte agli elementi del programma quali classi, metodi, campi, parametri, variabili locali, e pacchetti. A differenza dei tags aggiunti dalla documentazione Java e processati da tools come XDoclet, le annotazioni Java sono completamente accessibili dal programmatore mentre il software è in esecuzione usando una reflection.

Le annotazioni Java sono state introdotte dal Java Community Process come JSR-175 nel 2002 e approvate nel settembre 2004. Le annotazioni sono divenute disponibili con il Java Development Kit (JDK) versione 1.5. Questa caratteristica è stata aggiunta al linguaggio Java attraverso le specifiche.

Quando il codice Java viene compilato, il compilatore Java immagazzina i metadata delle annotazioni nei files class. In seguito, la Java Virtual Machine (JVM) o altri programmi possono guardare i metadata per determinare come interagire con gli elementi del programma o cambiare il loro comportamento.

La dichiarazione di un'annotazione è una variante dei tags che sono stati aggiunti, in passato, per commentare le sezioni.

Nell'esempio sia Retention che Target sono esempi di annotazioni.

Per la parte superiore



Source : Wikipedia