Bonjour,

Je me pose la question suivante, pourquoi ce code peut être compilé ?
(JavaSE-10)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
public class Panneau extends JPanel{
 
private static final long serialVersionUID = -6727483609391796566L;
 
{
 
int x=0;
 
System.out.println("Ne devrait pas compiler ?"+"x= "+x);
 
}
 
public Panneau(){
 
}
 
@Override
 
public void paintComponent(Graphics g) {
 
int y1=getHeight();
 
int x1=getWidth();
 
System.out.println("x1="+x1+" y1="+y1);
 
g.drawOval(x1/4,y1/4, x1/2,y1/2);
 
}
 
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
int x=0;
 
System.out.println("Ne devrait pas compiler ?"+"x= "+x);
C'est cette partie qui m'interroge, théoriquement: Le System.out.println, ne devrait pas compiler (lancé hors de toute méthode)

Celui-ci ne compile pas : (comme attendu)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
import java.awt.Graphics;
 
import javax.swing.JPanel;
 
public class Panneau extends JPanel{
 
private static final long serialVersionUID = -6727483609391796566L;
 
int x=0;
 
System.out.println("Ne compile pas"+"x= "+x);
 
public Panneau(){
 
}
 
@Override
 
public void paintComponent(Graphics g) {
 
int y1=getHeight();
 
int x1=getWidth();
 
System.out.println("x1="+x1+" y1="+y1);
 
g.drawOval(x1/4,y1/4, x1/2,y1/2);
 
}
 
}
(J'ai supprimé les accolades du bloc en début de classe)
Merci pour vos réponses.