Classi
Una classe si puo' schematizzare in due punti principali: La dichiarazione, dove si definisce le caratteristiche, e il corpo dove si implementano i comportamenti (metodi). In tale sezione un ruolo fondamentale e' svolto dalle variabili.
Dichiarazione
class NameOfClass
Per convenzione il nome e indicato con una lettera maiuscola,
inoltre nella dichiarazione della classe si puo:
1) Dichiarare che la classe e una superclasse
2) Elencare le interfacce implementate dalla classe
3) Dichiarare se la classe e public, abstract, o final
[modifiers] class NameofClass [extends superclass] [implements (interface)]
[modifiers] |
public indica cha la classe puo essere usata da
oggetti non inclusi nel package corrente abstract indica che puo contenere metodi non implementati final indica che non puo avere sottoclassi |
[extends superclass] per specificare la superclasse delloggetto esplicitamente |
[implements (interface)] specifica le interfacce (serie di metodi) implementate |
Le variabili
Dichiarazione delle variabili
Le variabili naturalmente hanno un ruolo fondamentale, in java una variabile prima di poter essere usata deve essere dichiarata, specificandone il tipo e i livelli di accesso
Dichiarzione minima: |
type variableName (es. int anInteger) |
Per convenzione il nome di una variabile inizia con una lettera minuscola
Inoltre si possono specificare una serie di attributi:
[accessSpecifier] [static] [final] [transient] [volatile] type variable
[accessSpecifier] definisce quali altre classi hanno accesso alla variabile
[static] indica che la variabile e membro di una classe e non un istanza
[final] indica che la variabile e una costante
[transient] indica che non fa parte dello stato "persistente" delloggetto
[volatile] indica che la variabile e modificabile in modo asincrono
class | subclass | package | world | |
private | x | |||
protected | x | x* | x | |
public | x | x | x | x |
package | x | x |
Una subclass e una classe che deriva da un altra classe (superclasse) e ne eredita il comportamento, i metodi e le variabili. Per riferirsi al valore della superclass basta usare la parole chiave "super".
class subclass extends superclass {
Es.
class Super {
Number aNumber;
}
class Sub extends Super {
float aNumber;
super.aNumber
}
Aggiungendo "final" alla dichiarazione di classe/metodo [es. final class NomeClasse / final void nomeMetodo()] si evita luso di tale classe/metodo da parte di sottoclassi.
Classi che implementano concetti astratti (es. Number) e possono essere solo superclassi
(es. abstract class Number)
Metodi:
Ogni classe astratta puo contenere metodi astratti, cioe che non hanno implementazioni
Le classi String e StringBuffer
Sono 2 classi contenute nel package java.lang utili per lavorare con stringhe di dati.
Il seguente metodo inverte le parole:
Esempio: |
/* * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved. * */ class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i >= 0; i--) { dest.append(source.charAt(i)); } return dest.toString(); } } |
String = Per lavorare con stringhe che non possono essere cambiate
StringBuffer = quando si vuole manipolare il contenuto della stringa
Metodi accessori
Sono metodi usati per ottenere informazioni su un oggetto.
es:
source.lenght() = restituisce la lunghezza della stringa
source.charAt(i) = restituisce il carattere nella posizione "i" della stringa
indexOf(int carattere)
Restituiscelindice della prima occorrenza del carattere specificato
lastIndexOf(int carattere)
Restituiscelindice dellultima occorrenza del carattere specificato
indexOf(int carattere, int from)
Restituisce lindice della prima occorrenza del carattere specificato cercando avanti dallindice specificato
lastIndexOf(int carattere, int from)
Restituisce lindice dellultima occorrenza del carattere specificato cercando indietro dallindice specificato
indexOf(String String)
Restituisce lindice della prima occorrenza della stringa specificata
lastIndexOf(String String)
Restituisce lindice dellultima occorrenza della stringa specificata
indexOf(String String, int from)
Restituisce lindice della prima occorrenza della stringa specificata cercando avanti dallindice specificato
lastIndexOf(String String, int from)
Restituisce lindice dellultima occorrenza della stringa specificata cercando indietro dallindice specificato
Append (dest.append(source.charAt(i)) = aggiunge un carattere alla fine della stringa "dest" (solo per StringBuffer)
insert (var.insert(posizione, stringa) var.insert(6, "stringa")
toString() = Usato per stampare, converte la StringBuffer in String (es. return dest.toString())
valueOf = Converte variabili di diverso tipo in stringa
es.
System.out.println(String.valueOf(Math.PI))
string piStr = "3.14159";
Float pi = Float.valueOf(piStr);
Include gli standard input, output ed error stream, le propieta del sistema ed altre utilita varie (es ora, etc.)
es.
System.out
System.getProperty(argomento)
System.getProperty("user.name")
Standard input System.in = usato per input del programma
Standard output System.out = usato per loutput del programma
Standard error System.err = usato per visualizzare i messaggi di errore
La classe system ha 2 differenti versioni di getProperty:
getProperty = prende un singolo argomento[es. System.getProperty("Path.separator", "valore in caso di null");
getProperties = comprende lintero set di propieta del sistema
Dichiarazione
Piu metodi possono avere anche lo stesso nome, basta che varino il tipo dei dati
[es. draw(String s) / draw(int i)]
La dichiarazione fornisce il nome del metodo e il tipo di dati che restituisce [es. boolean isEmpty]
Puo avere un campo aspetto come le variabili implementato dalle seguenti voci:syncronized, paramlist, trows exceptionlist
Ogni metodo che ha lo stesso nome della sua classe e un costruttore e sara usato per inizializzare nuovi oggetti della classe, tramite loperatore new
Passare informazioni ad un metodo
Quando si scrive un metodo si dichiara il numero e il tipo di argomenti richiesti da quel metodo.
Se gli argomenti hanno lo stesso nome delle variabili della classe, il metodo prende il suo valore (usato per inizializzare), per poi far riferimento alle variabili iniziali del metodo si usa "this"
es.
class Circle {
int x, y, radius
public circle(int x, int y, int radius) {
this.x=x
this.y=y
this.radius=radius
.....
Nei metodi java gli argomenti sono passati come valore, quindi il metodo non puo variare il suo valore, se non chiamnado i metodi delloggetto e modificando le variabili accessibili delloggetto.
es.
int r=-1, g=-1, b=-1
pen.getRGBColor(r,g,b);
e equivalente a pen.getRGBColor (-1,-1,-1)
Per avere un valore come variabile usare la seguente chiamata :
es.
class Pen {
int redValue, greeValue, blueValue;
void getRGBColor( int red, int green, int blue)
red = redValue;
green = greenValue;
blue = blueValue;
Per modificare un argomento bisogna far riferimento ad un oggetto o ad un array
es. (introducendo un nuovo oggetto RGBColor che conterra i valori delle 3 variabili)
classRGBColor {
public int red, green, blue;
}
e scrivendo il metodo getRGBColor in modo che accetti un oggetto RGBColor come argomento
class pen {
int redValue, int greeValue, int blueValue;
void getRGBColor(RGBColor aColor){
aColor.red = redValue
aColor.green = greenValue
aColor.blue = blueValue
}
}
e con la seguente sequenza di chiamate le modifiche fatte alloggetto RGBColor avranno effetto in quanto pencolor e aColor fanno riferimento allo stesso oggetto
RGBColor penColor = new RGBColor()]
pen.getRGBColor(penColor);
System.out.println("red"+penColor.red+"green"+penColor.green+"blue"+penColor.blue
class ....
metodo
corpo del metodo
Nel corpo di un metodo normalmente si puo fare riferimento alle variabili della classe.
Con this si puo diversificare le variabili della classe dagli argomenti del metodo. this si riferisce alloggetto corrente.
es.
class HSBColor
int hue, saturation, brightness
HSBColor (int hue, int saturation, int brightness)
this.hue=hue
this.saturation=saturation
this.brightness=brightness
Quando un metodo nasconde una variabile dalla sua superclasse ci si puo riferire alla variabile nascosta attraverso luso di super
Le variabili locali rimangono valide fino a che il controllo rimane al metodo.
Un eccezzione e un evento che esula dal normale flusso del programma
try/catch/finally
try - il primo passo e racchiudere le dichiarazioni che potrebbero provocare eccezioni tra un blocco try
catch - (oggettodelleccezzione variabile[e]) associato direttamente al metodo try
throw - Specialmente nei metodi che possono essere solo una parte del programma (es per distribuzione) fa si che le eccezione possa essere vista da qualsiasi parte del programma.
Va specificato subito dopo il nome della classe, prima delle parentesi graffe
Richiede che leccezzione usata nella dichiarazione di throw derivi dalla classe trowable