8. Struttura del linguaggio
•Commenti /*, //, /** (javadoc: descrizione dichiarazione)
•; (fine istruzione)
• {..} (blocco di istruzioni)
• abstract, case, new, this, while, …. (Keywords)
• boolean, char[2], byte[1], short[2], int[4], long[8],
float[4] ,double[8]
(Tipi primitivi)
•Dichiarazione variabili
•Assegnazioni
•Istanze
•Allocazione della memoria
•Scope delle variabili
•Convenzioni di codifica
9. •=C/C++
•Logici
!,|,&,^
•Concatenazione di stringhe: +
•Shift Operators:
128 << 1 : 256
16 << 2 : 64
128 >> 1 : 64
Casting di Espressioni:
Operatori
long longvalue=99L;
int intvalue=(int)longvalue;
long longvalue=99; //int
int intvalue=99L;
double z=12.414F;
float z1=12.414;
10. Statements
if (boolean expression)
{
statement or block;
}
[
else
{statement or block;
}
]
switch (expression)
{
case const1:
statements;
break;
…
default:
statements;
break; }
for (init_expr; bool_expr; alter_expr)
{
statement or block;
}
11. Statements
while (boolean expression)
{
statement or block;
}
do
{
statement or block;
} while (boolean test)
• break [label];
• continue [label];
• label: statement;
12. Arrays
char s[];
Point p[];
s=new char[20];
p=new Point[100];
p[0]=new Point();
...
String names[]= {
“pippo”,
“pluto”,
“topolino”
};
Myclass array[]=
{
new Myclass();
new Myclass();
new Myclass();
}
13. Arrays
array.length;
int twoDim[][]=new int [4][];
twoDim[0]=new int[7];
...
int twoDim[][]=new int[4][5];
...
14. Arrays
int elements[]=new int[6];
elements=new int[10];
...
int myArray[]={1,2,3,4,5,6};
int hold[]={10,9,8,7,6,5,4,3,2,1};
System.arraycopy(myArray,0,hold,0,myArray.length);
...
15. Object Orientation
•classi e oggetti
•ereditarietà
•metodi e costruttori
•passaggio di parametri
•this e super
•polimorfismo
•overloading e overriding
•instanceof operator
if (e instanceof Manager)
{...
}
•package e import
• static
• final
• abstract class
16. Object Orientation - Interfacce
•E’ come concetto molto simile a quello di classe astratta
•Tutti i metodi di un interfaccia sono astratti
•Le intefacce permettono di ottenere l’ereditarietà multipla
•Un interfaccia può estendere un’altra interfaccia
public interface Base
{
public static final int PROP=1;
public int mioMetodo();
}
public MioApplet extends Applet
implements Base, Runnable
{...
}
17. Object Orientation
if (x==y)
{
}
Condizione vera se x e y referenziano lo stesso oggetto
If (x.equals(y))
{
}
Condizione vera se x e y sono oggetti identici. E’ un metodo
della classe Object (come toString()) che spesso viene
riscritto.
18. Object Orientation - Inner Class
public class MyFrame extends Frame
{
...
class ButtonListener implements ActionListener
{
}
...
}
25. AWT - Layouts
Il layout dei componenti all’interno di un container è governato
da un Layout Manager
• FlowLayout (default per Panel e Applet)
• BorderLayout (default per Window, Dialog e Frame)
• GridLayout
• CardLayout
• GridBagLayout
29. Eventi
Evento: un oggetto che descrive cosa si è verificato
Gli eventi possono essere uni-cast e multi-cast
Button
Action event
actionPerformed (ActionEvent e)
{
}
30. Eventi
Listener
import java.awt.event.*;
public class ButtonHandler
implements ActionListener
{
public void actionPerformed
(ActionEvent e)
{
}
}
Source
...
Button b=new Button(“Me”);
b.addActionListener
(new ButtonHandler());
...
37. AWT Component
Checkbox
public void itemStateChanged(ItemEvent e)
{
String stato="deselected";
if (e.getStateChange()==ItemEvent.SELECTED)
stato="selected";
System.out.println(stato);
}
...
}
38. AWT Component
Checkbox Group
CheckboxGroup cbg=new CheckboxGroup();
Checkbox one=new Checkbox("One",cbg,true);
Checkbox two=new Checkbox("Two",cbg,false);
Choice
Choice ch=new Choice();
ch.addItem("Uno");
ch.addItem("Due");
fr.add(ch);
Si utilizza ItemListener per intercettare l’item selezionato
39. AWT Component
Canvas
import java.awt.*;
import java.awt.event.*;
public class MyCanvas extends Canvas
{
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillRect(0,0,getSize().width,getSize().height);
}
}
Label
Label lb=new Label("Hello!");
40. AWT Component
TextField e TextArea
TextField tf=new TextField("Hello!",30);
fr.add(tf);
Il tasto <ENTER> può essere intercettato attraverso l’evento Action.
TextArea ta=new TextArea("Hello!",4,30);
fr.add(ta);
Attraverso TextListener è possibile intercettare le modifiche del
testo visualizzato in entrambi i componenti.
41. AWT Component
List
List lst=new List(4,false);
lst.add("Item1");
lst.add("Item2");
lst.add("Item3");
Il doppio click sulla lista può essere intercettato attravrso l’evento
Action.
Dialog
Dialog d=new Dialog(fr,"Dialog",true);
d.add(new Button("Button"));
d.pack();
…
d.setVisible(true);
43. AWT Component
MenuBar
MenuBar mb=new MenuBar();
fr.setMenuBar(mb);
Menu
Menu m=new Menu("Menù");
mb.add(m);
…
mb.setHelpMenu(mh);
E’ possibile intercettare
l’evento Action sia sull’ oggetto
Menu che su MenuItem.
44. MenuItem
MenuItem it1=new MenuItem("Item1");
MenuItem it2=new MenuItem("Item2");
MenuItem it3=new MenuItem("Item3");
m.add(it1);
m.add(it2);
m.add(it3); CheckboxMenuItem
CheckboxMenuItem cbm=new
CheckboxMenuItem("Check Item");
m.add(cbm);
E’ possibile monitorare lo stato
di un CheckboxMenuItem
attraverso un ItemListener.
AWT Component
46. Applet
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class MyApplet extends Applet
{
Image img;
AudioClip sound;
public void init()
{
img=getImage(getDocumentBase(),"city.gif");
sound=getAudioClip(getDocumentBase(),"beth1.mid");
}
...
47. public void paint (Graphics g)
{
g.drawImage(img,2,2,this);
}
public void start()
{
//sound.play();
sound.loop();
}
public void stop()
{
sound.stop();
}
}
•Attraverso l’interfaccia
MouseListener è possibile
intercettare gli eventi generati
dal mouse;
• Con getParameter è possibile
leggere i parametri passati
attraverso il tag param
Applet
48. Threads
Runnable Interface
public class MyThread implements Runnable
{
int i;
public void run()
{i=0;
while (true)
{ System.out.println("Ciao " + i);
if (i==50) break;
try{
Thread.sleep(10);
}
catch (InterruptedException e) {}
i++;}
}
...
49. Threads
Runnable Interface
...
public static void main (String args[])
{
for (int j=0;j<4;j++)
{
MyThread mt= new MyThread ();
Thread t=new Thread(mt);
t.start();
}
}
}
50. Threads
Metodi della classe Thread
•isAlive()
•sleep()
•join() - aspetta che l’esecuzione del thread sia terminata
•wait(), notify() - classe Object
•suspend()
•resume()
•stop()
•yield()
Il problema della sincronizzazione:
synchronized (this)
{
}
public synchronized String pop(this)
{
}
51. Stream I/O e Files
Classi Base
• FileInputStream e FileOutputStream
• BufferedInputStream e BufferedOutputStream
• DataInputStream e DataOutputStream
• PipedInputStream e PipedOutputStream
52. Stream I/O e Files
Serializzazione (interfaccia Serializable) e persistenza
fos=new FileOutputStream("date.ser");
…
ObjectOutputStream os=new
ObjectOutputStream(fos);
fis=new FileInputStream("date.ser");
…
ObjectInputStream is=new
ObjectInputStream(fis);
Date dt=new Date();
dt=(Date)is.readObject();
...
is.close();
fis.close();
Date dt=new Date();
...
os.writeObject(dt);
os.close();
fos.close();
53. Stream I/O e Files
La parola chiave transient evita la serializzazione di alcune
proprietà della classe
public transient Thread myT;
54. Stream I/O e Files
Scrivere un file
...
PrintWriter out= new PrintWriter(new
BufferedWriter(new FileWriter("foo.out")));
out.println("riga");
out.close();
...
Leggere un file
BufferedReader in
= new BufferedReader(new FileReader("foo.out"));
System.out.println(in.readLine());
in.close();
...