Diferència entre revisions de la pàgina «DAM-M3-UF4. Sintaxi»

De Wiki IES Marianao. Departament Informàtica
Dreceres ràpides: navegació, cerca
Línia 12: Línia 12:
 
http://docs.oracle.com/javase/6/docs
 
http://docs.oracle.com/javase/6/docs
  
* '''java.lang''', conté les funcions pròpies del llenguatge. '''Aquest no cal importar-lo''', ja que el compilador considera que l’importem cada cop que fem un programa.
+
* <b><code>java.lang</code></b>, conté les funcions pròpies del llenguatge. '''Aquest no cal importar-lo''', ja que el compilador considera que l’importem cada cop que fem un programa.
* '''java.util''', amb tot d’utilitats addicionals.
+
* <b><code>java.util</code></b>, amb tot d’utilitats addicionals.
* '''java.text''', amb utilitats de format i manipulació de textos.
+
* <b><code>java.text</code></b>, amb utilitats de format i manipulació de textos.
* '''java.math''', amb funcions matemàtiques.
+
* <b><code>java.math</code></b>, amb funcions matemàtiques.
* '''java.io''', amb rutines d’entrada i sortida
+
* <b><code>java.io</code></b>, amb rutines d’entrada i sortida
* '''java.net''', amb utilitats de xarxa.
+
* <b><code>java.net</code></b>, amb utilitats de xarxa.
* '''java.applet''', per a construir applets.
+
* <b><code>java.applet</code></b>, per a construir applets.
* '''java.awt''', per a gràfics i interfícies gràfiques d’usuari (GUI).
+
* <b><code>java.awt</code></b>, per a gràfics i interfícies gràfiques d’usuari (GUI).
* '''java.sql''', classes per a accedir a bases de dades.
+
* <b><code>java.sql</code></b>, classes per a accedir a bases de dades.
  
Per importar un paquet i poder usar les classes que conté cal indicar el ''paquet.*''
+
Per importar un paquet i poder usar les classes que conté cal indicar el <b><code>paquet.*</code></b>
  
 
Els punts en els noms dels paquets indiquen la estructura de directoris on es troben les classes.
 
Els punts en els noms dels paquets indiquen la estructura de directoris on es troben les classes.
  
 
Es recomanable crear les nostres classes '''sempre''' en algun paquet
 
Es recomanable crear les nostres classes '''sempre''' en algun paquet
 
+
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
package dam.m3.uf4;
 
package dam.m3.uf4;
  
Línia 34: Línia 35:
 
     ....
 
     ....
 
}
 
}
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
 
=== Llibreries ===
 
=== Llibreries ===
  
  
Les llibreries a Java es troben comprimides normalment en fitxers ''.jar''. Una vegada totes les funcions d’una llibreria estan finalitzades i no cal compilar-les més, el fitxer ''.jar'' generat el podem distribuir i incorporar fàcilment als nostres programes o a d’altres.
+
Les llibreries a Java es troben comprimides normalment en fitxers <code>.jar</code>. Una vegada totes les funcions d’una llibreria estan finalitzades i no cal compilar-les més, el fitxer <code>.jar</code> generat el podem distribuir i incorporar fàcilment als nostres programes o a d’altres.
  
Java proporciona la utilitat ''jar' per crear aquestes llibreries. La sintaxi és la següent
+
Java proporciona la utilitat <code>jar</code> per crear aquestes llibreries. La sintaxi és la següent
  
 +
<html>
 
<pre>
 
<pre>
$jar cvf nomllibreria.jar directori
+
<code class="shell">
 +
$jar cvf nomllibreria.jar directori
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
Aquesta instrucció crea una llibreria ''nomllibreria.jar'' amb el contingut del directori
+
 
 +
Aquesta instrucció crea una llibreria <code>nomllibreria.jar</code> amb el contingut del directori
  
  
Línia 53: Línia 61:
 
=== Compilació i execució. Terminal ===
 
=== Compilació i execució. Terminal ===
  
La variable d’entorn '''CLASSPATH''' indica els directoris on el compilador espera trobar els paquets i classes definits. Per defecte només cerca al directori actual. (Al treballar amb Eclipse no cal definir-la, ho gestiona automàticament)
+
La variable d’entorn <code>CLASSPATH</code> indica els directoris on el compilador espera trobar els paquets i classes definits. Per defecte només cerca al directori actual. (Al treballar amb Eclipse no cal definir-la, ho gestiona automàticament)
  
  
La variable CLASSPATH pot apuntar a un directori o a un fitxer, i pot contenir múltiples entrades separades per “;”:
+
La variable <code>CLASSPATH</code> pot apuntar a un directori o a un fitxer, i pot contenir múltiples entrades separades per “;”:
  
* Per a .class en packets sense nom (Sense la declaració package). CLASSPATH ha de contenir el nom del directori
+
* Per a <code>.class</code> en packets sense nom (Sense la declaració package). <code>CLASSPATH</code> ha de contenir el nom del directori
* Per a .class en paquets amb nom. CLASSPATH ha de contenir el nom del directori principal del paquet
+
* Per a <code>.class</code> en paquets amb nom. <code>CLASSPATH</code> ha de contenir el nom del directori principal del paquet
* Per llibreries .jar o .zip. CLASSPATH ha de contenir el nom del fitxer
+
* Per llibreries <code>.jar</code> o <code>.zip</code>. <code>CLASSPATH</code> ha de contenir el nom del fitxer
  
Per compilar un programa que utilitza una llibreria jar sense definir CLASSPATH
+
Per compilar un programa que utilitza una llibreria <code>jar</code> sense definir <code>CLASSPATH</code>
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="shell">
 
$javac –cp c6.jar ExSample.java
 
$javac –cp c6.jar ExSample.java
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
Per executar el programa sense definir CLASSPATH
+
Per executar el programa sense definir <code>CLASSPATH</code>
  
 +
<html>
 
<pre>
 
<pre>
$java –cp .;c6.jar ExSample // El . per referenciar el fitxer ExSample.class  
+
<code class="shell">
 +
$java –cp .;c6.jar ExSample # El . per referenciar el fitxer ExSample.class  
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
També es pot definir el CLASSPATH
 
  
 +
També es pot definir el <code>CLASSPATH</code>
 +
 +
<html>
 
<pre>
 
<pre>
 +
<code class="shell">
 
$set CLASSPATH=.;c6.jar
 
$set CLASSPATH=.;c6.jar
  
 
$java ExSample
 
$java ExSample
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
 
== Sintaxis ==
 
== Sintaxis ==
Línia 86: Línia 108:
 
=== El primer programa ===
 
=== El primer programa ===
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
import java.io.*;
 
import java.io.*;
  
Línia 98: Línia 122:
  
 
}
 
}
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
 
* A Java tot el codi va dins de les classes (Funcions + Dades)
 
* A Java tot el codi va dins de les classes (Funcions + Dades)
* Per determinar on comencen i acaben les estructures (classe, funcions, estructures de control) s’utilitzen els caràcters { }
+
* Per determinar on comencen i acaben les estructures (classe, funcions, estructures de control) s’utilitzen els caràcters <code>{ }</code>
 
* La classe principal ha de tenir el mateix nom que el fitxer que la conté (Case sensitive)
 
* La classe principal ha de tenir el mateix nom que el fitxer que la conté (Case sensitive)
* La paraula ''import'' indica els recursos externs que usem dins el nostre programa (API de java o recursos propis)
+
* La paraula <code>import</code> indica els recursos externs que usem dins el nostre programa (API de java o recursos propis)
* Les aplicacions d'escriptori (No Applets per exemple), dins de la classe principal sempre tenen la funció '''main'''. Aquesta és la funció per on entra el programa a l’execució. La capçalera de la funció és '''obligatòriament''' la de l'exemple.
+
* Les aplicacions d'escriptori (No Applets per exemple), dins de la classe principal sempre tenen la funció <code>main</code>. Aquesta és la funció per on entra el programa a l’execució. La capçalera de la funció és '''obligatòriament''' la de l'exemple.
* Per finalitzar qualsevol instrucció cal posar ;
+
* Per finalitzar qualsevol instrucció cal posar <code>;</code>
 
* Java distingeix majúscules i minúscules
 
* Java distingeix majúscules i minúscules
  
Línia 112: Línia 139:
 
Els comentaris en Java poden ser
 
Els comentaris en Java poden ser
  
* De una línia i comencen per "//", es poden col·locar a qualsevol lloc i marquen tot el que segueix fins al final de línia com un comentari
+
* De una línia i comencen per <code>//</code>, es poden col·locar a qualsevol lloc i marquen tot el que segueix fins al final de línia com un comentari
* De bloc, delimitats per "/*  .....  */".
+
* De bloc, delimitats per <code>/*  .....  */</code>.
* De Javadoc, mostrar informació quan es genera la documentació, delimitats per "/** ....... */"
+
* De Javadoc, mostrar informació quan es genera la documentació, delimitats per <code>/** ....... */</code>
  
 
=== Declaració de variables i assignació ===
 
=== Declaració de variables i assignació ===
Línia 122: Línia 149:
 
Els '''tipus de dades primitius''' són:
 
Els '''tipus de dades primitius''' són:
  
* byte . Nombres enters "molt curts" de 8 bits.
+
* <b><code>byte</code></b>. Nombres enters "molt curts" de 8 bits.
* short . Nombres enters "curts" de 16 bits.
+
* <b><code>short</code></b>. Nombres enters "curts" de 16 bits.
* int . Nombres enters de 32 bits.
+
* <b><code>int</code></b>. Nombres enters de 32 bits.
* long . Nombres enters "llargs" de 64 bits.
+
* <b><code>long</code></b>. Nombres enters "llargs" de 64 bits.
* float . Nombres reals de 32 bits. Precisió simple.
+
* <b><code>float</code></b>. Nombres reals de 32 bits. Precisió simple.
* double . Nombres reals de 64 bits. Precisió doble.
+
* <b><code>double</code></b>. Nombres reals de 64 bits. Precisió doble.
* char . Caràcters de 16 bits (UNICODE).
+
* <b><code>char</code></b>. Caràcters de 16 bits (UNICODE).
* boolean . Valors de veritat o falsedat: només pot ser  '''true''' '''false''' (Paraules reservades).
+
* <b><code>boolean</code></b>. Valors de veritat o falsedat: només pot ser  <code>true</code> <code>false</code> (Paraules reservades).
  
 
'''Observar que tots comencen amb minúscules!!!!!''', a diferència de les classes que sempre comencen amb majúscules.
 
'''Observar que tots comencen amb minúscules!!!!!''', a diferència de les classes que sempre comencen amb majúscules.
Línia 135: Línia 162:
 
La declaració de variables
 
La declaració de variables
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
tipus_de_dada nom_variable [= valor_inicial];
 
tipus_de_dada nom_variable [= valor_inicial];
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
 
Per exemple
 
Per exemple
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int i;
 
         int i;
 
         double radi, sup;
 
         double radi, sup;
 
         boolean repetidor;
 
         boolean repetidor;
 
         int k = 3;
 
         int k = 3;
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
La operació d’''assignació'' es realitza amb el símbol "=" (No confondre amb la operació de comparació "= =")
+
La operació d’''assignació'' es realitza amb el símbol <code>=</code> (No confondre amb la operació de comparació <code>==</code>)
  
 
Per exemple
 
Per exemple
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int i, j;
 
         int i, j;
 
         i = 3;
 
         i = 3;
Línia 158: Línia 196:
 
         j = j * 4 + 3;
 
         j = j * 4 + 3;
 
         j += 5; // Equivalent a j = j + 5.
 
         j += 5; // Equivalent a j = j + 5.
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
  
Línia 165: Línia 205:
 
Per exemple, el següent codi genera diversos errors
 
Per exemple, el següent codi genera diversos errors
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         boolean a;
 
         boolean a;
 
         if (a == true) System.out.println("true");
 
         if (a == true) System.out.println("true");
Línia 173: Línia 215:
 
         int c;
 
         int c;
 
         System.out.println(c);
 
         System.out.println(c);
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
  
Línia 180: Línia 224:
 
Una variable només és accessible
 
Una variable només és accessible
  
* Dins del fragment de codi delimitat per { } on està declarada
+
* Dins del fragment de codi delimitat per <code>{ }</code> on està declarada
 
* Si és un paràmetre d'un mètode (veure mètodes més endavant), dins el propi mètode
 
* Si és un paràmetre d'un mètode (veure mètodes més endavant), dins el propi mètode
  
 
Per exemple, el següent codi genera errors
 
Per exemple, el següent codi genera errors
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int a;
 
         int a;
 
         if (true) {
 
         if (true) {
Línia 192: Línia 238:
 
         a = 1;
 
         a = 1;
 
         d = 4;    //Error
 
         d = 4;    //Error
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
 
=== Constants ===
 
=== Constants ===
Línia 200: Línia 249:
 
De moment només cal saber que cal definir les constants fora de les funcions (però dins de la classe)
 
De moment només cal saber que cal definir les constants fora de les funcions (però dins de la classe)
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
static final tipus_de_dada NOM_CONSTANT [= valor_inicial];
 
static final tipus_de_dada NOM_CONSTANT [= valor_inicial];
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
 
Per exemple
 
Per exemple
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
public class Radi {
 
public class Radi {
  
Línia 221: Línia 277:
 
     }
 
     }
 
}
 
}
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
 
=== Cadenes de caràcters. String ===
 
=== Cadenes de caràcters. String ===
  
Java proporciona la classe String pel tractament de text. (No és un tipus simple, és una classe).
+
Java proporciona la classe <code>String</code> pel tractament de text. (No és un tipus simple, és una classe).
  
* Operació "+" per concatenar.
+
* Operació <code>+</code> per concatenar.
  
 
I els següents mètodes d'utilitat per exemple
 
I els següents mètodes d'utilitat per exemple
  
* Text.length(): Longitud d’una cadena de text
+
* <code>text.length()</code>: Longitud d’una cadena de text
* Text.substring(index inici, index final): Obté un tros d’una cadena
+
* <code>text.substring(index inici, index final)</code>: Obté un tros d’una cadena
* Text.equals("Altre Text"): Compara dos textos
+
* <code>text.equals("Altre Text")</code>: Compara dos textos
  
 
Per exemple
 
Per exemple
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         String textemeu;
 
         String textemeu;
 
         textemeu = "Bon";
 
         textemeu = "Bon";
Línia 243: Línia 304:
 
        
 
        
 
         System.out.println(textemeu.length()); // Escriu la longitud del text, 7
 
         System.out.println(textemeu.length()); // Escriu la longitud del text, 7
         System.out.println(textemeu.substring(1,3)) ;// Escriu “on”
+
         System.out.println(textemeu.substring(1,3)) ; // Escriu "on"
 
         System.out.println(textemeu.equals("Bon deia")); // Escriu false
 
         System.out.println(textemeu.equals("Bon deia")); // Escriu false
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
 
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
 
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
Línia 256: Línia 320:
 
| '''''Significat'''''
 
| '''''Significat'''''
 
|-
 
|-
| \b
+
| <code>\b</code>
 
| Retrocés
 
| Retrocés
 
|-
 
|-
| \t
+
| <code>\t</code>
 
| Tabulació
 
| Tabulació
 
|-
 
|-
| \n
+
| <code>\n</code>
 
| Salt de línia
 
| Salt de línia
 
|-
 
|-
| \'
+
| <code>\'</code>
 
| Cometes simple
 
| Cometes simple
 
|-
 
|-
| \"
+
| <code>\"</code>
 
| Cometes normals
 
| Cometes normals
 
|}
 
|}
Línia 279: Línia 343:
 
| colspan="2" | '''''Lògics'''''
 
| colspan="2" | '''''Lògics'''''
 
|-
 
|-
| +
+
| <code>+</code>
 
| Suma
 
| Suma
| &&
+
| <code>&&</code>
 
| AND
 
| AND
 
|-
 
|-
| -
+
| <code>-</code>
 
| Resta
 
| Resta
| &#124; &#124;
+
| <code>&#124; &#124;</code>
 
| OR
 
| OR
  
Línia 293: Línia 357:
 
<br />
 
<br />
 
|-
 
|-
| *
+
| <code>*</code>
 
| Producte
 
| Producte
| !
+
| <code>!</code>
 
| NOT
 
| NOT
 
|-
 
|-
| /
+
| <code>/</code>
 
| Divisió
 
| Divisió
 
| colspan="2" | '''''Relacionals'''''
 
| colspan="2" | '''''Relacionals'''''
 
|-
 
|-
| %
+
| <code>%</code>
 
| Mòdul
 
| Mòdul
| = =
+
| <code>==</code>
 
| Igual
 
| Igual
 
|-
 
|-
| '''''++'''''
+
| <code>++</code>
 
| Increment
 
| Increment
| !=
+
| <code>!=</code>
 
| Diferent
 
| Diferent
 
|-
 
|-
| --
+
| <code>--</code>
 
| Decrement
 
| Decrement
| >, <
+
| <code>>, <</code>
 
| Més gran que, Menor que
 
| Més gran que, Menor que
 
|-
 
|-
 
| '''''Text'''''
 
| '''''Text'''''
 
| <br />
 
| <br />
| >=, <=
+
| <code>>=, <=</code>
 
| Més gran o igual que, Menor o igual que
 
| Més gran o igual que, Menor o igual que
 
|-
 
|-
| +
+
| <code>+</code>
 
| Concatenació
 
| Concatenació
| instanceof
+
| <code>instanceof</code>
| ''obj instanceof cls'' és  true  si, i només si l'objecte obj  deriva de la classe cls.
+
| <code>obj instanceof cls</code> és  <code>true</code> si, i només si l'objecte <code>obj</code> deriva de la classe <code>cls</code>.
 
|}
 
|}
  
Línia 336: Línia 400:
 
Per '''declarar''' vectors a Java la sintaxi és la següent
 
Per '''declarar''' vectors a Java la sintaxi és la següent
  
''Tipus[] nom;''
+
<code>Tipus[] nom;</code>
  
 
A més, no hi prou amb declarar les variables, el compilador necessita conèixer la mida o longitud dels vectors per poder reservar l’espai necessari, així cal un segon pas per ''' inicialitzar''' els vectors.
 
A més, no hi prou amb declarar les variables, el compilador necessita conèixer la mida o longitud dels vectors per poder reservar l’espai necessari, així cal un segon pas per ''' inicialitzar''' els vectors.
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int [] vec;
 
         int [] vec;
  
Línia 346: Línia 412:
  
 
         String[] paraules = {"Hola", "Adeu"};
 
         String[] paraules = {"Hola", "Adeu"};
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
  
 
Finalment si volem '''fer referència''' als elements del vector cal que indiquem quin és l’element, tenint en compte que el primer element sempre és el 0.
 
Finalment si volem '''fer referència''' als elements del vector cal que indiquem quin és l’element, tenint en compte que el primer element sempre és el 0.
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int [] vec;
 
         int [] vec;
  
Línia 358: Línia 428:
 
         vec[0] = 1; // Primer element del vector
 
         vec[0] = 1; // Primer element del vector
 
         vec[3] = 7; // Últim element del vector
 
         vec[3] = 7; // Últim element del vector
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
  
 
=== Exercici. Vectors + Strings ===
 
=== Exercici. Vectors + Strings ===
  
Fent un únic "println()" mostrar el següent llistat  
+
Fent un únic <code>println()</code> mostrar el següent llistat  
(On els valors provenen d'un vector, p.e. String[] paraules = {"Hola", "Adeu", "Eps!!"};)
+
(On els valors provenen d'un vector, p.e. <code class="java">String[] paraules = {"Hola", "Adeu", "Eps!!"};</code>)
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="shell">
 
  Vector de 3 elements:
 
  Vector de 3 elements:
 
"Hola"
 
"Hola"
Línia 372: Línia 446:
 
"Eps!!"
 
"Eps!!"
 
  Fin
 
  Fin
 +
</code>
 
</pre>
 
</pre>
 
+
</html>
  
 
.
 
.
Línia 383: Línia 458:
 
La Declaració de '''funcions'''
 
La Declaració de '''funcions'''
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
   public [static] Tipus nomFuncio(paràmetres)
 
   public [static] Tipus nomFuncio(paràmetres)
 
   {
 
   {
Línia 390: Línia 467:
 
       return expressió;
 
       return expressió;
 
   }
 
   }
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
 
On la declaració de paràmetres és una llista del tipus
 
On la declaració de paràmetres és una llista del tipus
Línia 396: Línia 475:
 
<pre>Tipus variable, Tipus variable, ..., Tipus variable</pre>
 
<pre>Tipus variable, Tipus variable, ..., Tipus variable</pre>
  
* ''static'' ho farem servir per mètodes de classe.
+
* <code class="java">static</code> ho farem servir per mètodes de classe.
  
 
Les accions són mètodes que no retornen cap valor
 
Les accions són mètodes que no retornen cap valor
Línia 402: Línia 481:
 
La Declaració '''d'accions''' o procediments
 
La Declaració '''d'accions''' o procediments
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
   public [static] void nomAccio(paràmetres)
 
   public [static] void nomAccio(paràmetres)
 
   {
 
   {
 
       instruccions;
 
       instruccions;
 
   }
 
   }
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
  
 
Els mètodes es defineixen dins la classe
 
Els mètodes es defineixen dins la classe
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
public class Radi {
 
public class Radi {
  
Línia 433: Línia 518:
 
     }
 
     }
 
}
 
}
 +
</code>
 
</pre>
 
</pre>
 
+
</html>
  
  
Línia 440: Línia 526:
  
  
* Els paràmetres de tipus simples (int, double, char, boolean) es passen sempre per valor.
+
* Els paràmetres de tipus simples (<code class="java">int, double, char, boolean</code>) es passen sempre per valor.
 
* Els tipus compostos (vectors, matrius i objectes en general) es passen sempre per referència. Una excepció és String que funciona com un tipus simple (per valor).
 
* Els tipus compostos (vectors, matrius i objectes en general) es passen sempre per referència. Una excepció és String que funciona com un tipus simple (per valor).
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
public class PasParametres {
 
public class PasParametres {
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
Línia 469: Línia 557:
 
     }
 
     }
 
}
 
}
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
 
* Aclariment: Això no és exactament així. Java passa tots els paràmetres per valor. Però quan aquests són complexes (Objectes, vectors...) en comptes de passar per valor tot l'objecte passa per valor només l'identificador (OID). Així es comporta com si fos un pas per referència, però per exemple no es pot substituir l'objecte dins el mètode.
 
* Aclariment: Això no és exactament així. Java passa tots els paràmetres per valor. Però quan aquests són complexes (Objectes, vectors...) en comptes de passar per valor tot l'objecte passa per valor només l'identificador (OID). Així es comporta com si fos un pas per referència, però per exemple no es pot substituir l'objecte dins el mètode.
Línia 478: Línia 568:
 
Posar llistat de l'exercici anterior en un mètode
 
Posar llistat de l'exercici anterior en un mètode
  
paràmetres: String[] vector  
+
paràmetres: <code class="java">String[] vector</code>
resultat: String
+
resultat: <code class="java">String</code>
  
  
Línia 498: Línia 588:
  
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int opcio;
 
         int opcio;
 
         opcio = 0;   
 
         opcio = 0;   
Línia 516: Línia 608:
 
             default: System.out.println("????");
 
             default: System.out.println("????");
 
         }
 
         }
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
 
==== Bucles ====
 
==== Bucles ====
Línia 534: Línia 628:
 
|}
 
|}
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
public class ExFor {
 
public class ExFor {
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
Línia 557: Línia 653:
 
     }
 
     }
 
}
 
}
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
 
El tractament de matrius és anàleg, només cal parar atenció al control de longitud
 
El tractament de matrius és anàleg, només cal parar atenció al control de longitud
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int [][] mat;
 
         int [][] mat;
 
         mat = new int[4][2]; // Matriu 4 files i 2 columnes
 
         mat = new int[4][2]; // Matriu 4 files i 2 columnes
  
         for (int i=0;i<mat.length;i++) { // Informar matriu
+
         for (int i=0; i &lt; mat.length; i++) { // Informar matriu
             for (int j=0;j< mat[0].length;j++) {
+
             for (int j=0; j &lt; mat[0].length; j++) {
 
                 mat[i][j] = i + 3;
 
                 mat[i][j] = i + 3;
 
                 System.out.print(mat[i][j]);
 
                 System.out.print(mat[i][j]);
Línia 573: Línia 673:
 
             System.out.println();
 
             System.out.println();
 
         }
 
         }
 +
</code>
 
</pre>
 
</pre>
 +
</html>
  
 
==== Break and Continue ====
 
==== Break and Continue ====
Línia 579: Línia 681:
 
Aquestes dues instruccions permeten controlar l’execució de bucles.
 
Aquestes dues instruccions permeten controlar l’execució de bucles.
  
'''break''' atura el bucle i surt, mentre que '''continue''' passa a la següent iteració
+
<code>break</code> atura el bucle i surt, mentre que <code>continue</code> passa a la següent iteració
  
 
En general aquestes estructures compliquen la lectura del codi i no es fan servir.
 
En general aquestes estructures compliquen la lectura del codi i no es fan servir.
Línia 605: Línia 707:
 
==== Sortida ====
 
==== Sortida ====
  
Per mostrar informació a la línia de comandes es fan servir les operacions de la classe ''System.out ''que ja s’han fet servir.
+
Per mostrar informació a la línia de comandes es fan servir les operacions de la classe <code>System.out</code> que ja s’han fet servir.
  
''print(): ''Escriptura sense salt de línia
+
<code>print()</code>: Escriptura sense salt de línia
  
''println(): ''Escriptura amb salt de línia al final
+
<code>println()</code>: Escriptura amb salt de línia al final
  
 
==== Entrada per Consola ====
 
==== Entrada per Consola ====
Línia 615: Línia 717:
 
Per entrar informació des de la línia de comandes es fan servir les operacions de la classe ''System.in ''.
 
Per entrar informació des de la línia de comandes es fan servir les operacions de la classe ''System.in ''.
  
''read(): ''Lectura d'un caràcter
+
<code>read()</code>: Lectura d'un caràcter
  
 
El següent exemple mostra com llegir una cadena de caràcters des de consola
 
El següent exemple mostra com llegir una cadena de caràcters des de consola
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
     public static void main(String[] args) throws IOException {
 
     public static void main(String[] args) throws IOException {
 
         System.out.println("Llegir fins a ENTER...");
 
         System.out.println("Llegir fins a ENTER...");
Línia 629: Línia 733:
 
         System.out.println("strEntrada = " + strEntrada);
 
         System.out.println("strEntrada = " + strEntrada);
 
     }
 
     }
 +
</code>
 
</pre>
 
</pre>
 +
</html>
 +
  
 
==== Entrada Per Paràmetres ====
 
==== Entrada Per Paràmetres ====
Línia 637: Línia 744:
 
Per a l’entrada des de consola es pot fer servir el pas de paràmetres de la funció ''main(String[] args)'' que es recuperen des del programa a través del vector ''args[index]''.
 
Per a l’entrada des de consola es pot fer servir el pas de paràmetres de la funció ''main(String[] args)'' que es recuperen des del programa a través del vector ''args[index]''.
  
 +
<html>
 
<pre>
 
<pre>
 +
<code class="java">
 
         int opcio;
 
         int opcio;
 
         opcio = Integer.parseInt(args[0]);   
 
         opcio = Integer.parseInt(args[0]);   
Línia 648: Línia 757:
 
             default: System.out.println("????");
 
             default: System.out.println("????");
 
         }
 
         }
     
+
</code>
 +
</pre>
 +
</html>
 +
 
 
Per a l'execució del programa cal indicar aquest atribut
 
Per a l'execució del programa cal indicar aquest atribut
  
 +
<html>
 +
<pre>
 +
<code class="shell">
 
~$java Programa 0
 
~$java Programa 0
  
 
Has introduït 0
 
Has introduït 0
 
+
</code>
 
 
 
</pre>
 
</pre>
 +
</html>
  
  

Revisió del 18:09, 2 feb 2021

torna M3 - Programació

Estructura i organització

Paquets

Un paquet és un conjunt de classes organitzades i relacionades que es veuen unes a les altres i que comparteixen recursos.

Un paquet són una agrupació de classes relacionades funcionalment. El SDK de Java proporciona gran quantitat de paquets de codi obert que cal conèixer per estalviar-nos temps i esforços.

http://docs.oracle.com/javase/6/docs

  • java.lang, conté les funcions pròpies del llenguatge. Aquest no cal importar-lo, ja que el compilador considera que l’importem cada cop que fem un programa.
  • java.util, amb tot d’utilitats addicionals.
  • java.text, amb utilitats de format i manipulació de textos.
  • java.math, amb funcions matemàtiques.
  • java.io, amb rutines d’entrada i sortida
  • java.net, amb utilitats de xarxa.
  • java.applet, per a construir applets.
  • java.awt, per a gràfics i interfícies gràfiques d’usuari (GUI).
  • java.sql, classes per a accedir a bases de dades.

Per importar un paquet i poder usar les classes que conté cal indicar el paquet.*

Els punts en els noms dels paquets indiquen la estructura de directoris on es troben les classes.

Es recomanable crear les nostres classes sempre en algun paquet


package dam.m3.uf4;

public class Radi {
    ....
}

Llibreries

Les llibreries a Java es troben comprimides normalment en fitxers .jar. Una vegada totes les funcions d’una llibreria estan finalitzades i no cal compilar-les més, el fitxer .jar generat el podem distribuir i incorporar fàcilment als nostres programes o a d’altres.

Java proporciona la utilitat jar per crear aquestes llibreries. La sintaxi és la següent


$jar cvf nomllibreria.jar directori


Aquesta instrucció crea una llibreria nomllibreria.jar amb el contingut del directori


Compilació i execució. Terminal

La variable d’entorn CLASSPATH indica els directoris on el compilador espera trobar els paquets i classes definits. Per defecte només cerca al directori actual. (Al treballar amb Eclipse no cal definir-la, ho gestiona automàticament)


La variable CLASSPATH pot apuntar a un directori o a un fitxer, i pot contenir múltiples entrades separades per “;”:

  • Per a .class en packets sense nom (Sense la declaració package). CLASSPATH ha de contenir el nom del directori
  • Per a .class en paquets amb nom. CLASSPATH ha de contenir el nom del directori principal del paquet
  • Per llibreries .jar o .zip. CLASSPATH ha de contenir el nom del fitxer

Per compilar un programa que utilitza una llibreria jar sense definir CLASSPATH


$javac –cp c6.jar ExSample.java

Per executar el programa sense definir CLASSPATH


$java –cp .;c6.jar ExSample # El . per referenciar el fitxer ExSample.class 


També es pot definir el CLASSPATH


$set CLASSPATH=.;c6.jar

$java ExSample


Sintaxis

El primer programa


import java.io.*;

public class PrimerPrograma {

    public static void main(String[] args) {

        System.out.println("(''Text qualsevol'')"); // Display the string.

    }

}


  • A Java tot el codi va dins de les classes (Funcions + Dades)
  • Per determinar on comencen i acaben les estructures (classe, funcions, estructures de control) s’utilitzen els caràcters { }
  • La classe principal ha de tenir el mateix nom que el fitxer que la conté (Case sensitive)
  • La paraula import indica els recursos externs que usem dins el nostre programa (API de java o recursos propis)
  • Les aplicacions d'escriptori (No Applets per exemple), dins de la classe principal sempre tenen la funció main. Aquesta és la funció per on entra el programa a l’execució. La capçalera de la funció és obligatòriament la de l'exemple.
  • Per finalitzar qualsevol instrucció cal posar ;
  • Java distingeix majúscules i minúscules

Comentaris

Els comentaris en Java poden ser

  • De una línia i comencen per //, es poden col·locar a qualsevol lloc i marquen tot el que segueix fins al final de línia com un comentari
  • De bloc, delimitats per /* ..... */.
  • De Javadoc, mostrar informació quan es genera la documentació, delimitats per /** ....... */

Declaració de variables i assignació

La declaració de variables és OBLIGATÒRIA, a diferència d'altres llenguatges com PHP o VB

Els tipus de dades primitius són:

  • byte. Nombres enters "molt curts" de 8 bits.
  • short. Nombres enters "curts" de 16 bits.
  • int. Nombres enters de 32 bits.
  • long. Nombres enters "llargs" de 64 bits.
  • float. Nombres reals de 32 bits. Precisió simple.
  • double. Nombres reals de 64 bits. Precisió doble.
  • char. Caràcters de 16 bits (UNICODE).
  • boolean. Valors de veritat o falsedat: només pot ser true o false (Paraules reservades).

Observar que tots comencen amb minúscules!!!!!, a diferència de les classes que sempre comencen amb majúscules.

La declaració de variables


tipus_de_dada nom_variable [= valor_inicial];

Per exemple


        int i;
        double radi, sup;
        boolean repetidor;
        int k = 3;


La operació d’assignació es realitza amb el símbol = (No confondre amb la operació de comparació ==)

Per exemple


        int i, j;
        i = 3;
        j = i;
        j = j * 4 + 3;
        j += 5; // Equivalent a j = j + 5.


Abans de fer servir qualsevol variable cal inicialitzar-la, directe o indirectament

Per exemple, el següent codi genera diversos errors


        boolean a;
        if (a == true) System.out.println("true");
        else  System.out.println("false");
        String b;
        System.out.println(" ----" + b + "----- ");
        int c;
        System.out.println(c);


Visibilitat

Una variable només és accessible

  • Dins del fragment de codi delimitat per { } on està declarada
  • Si és un paràmetre d'un mètode (veure mètodes més endavant), dins el propi mètode

Per exemple, el següent codi genera errors


        int a;
        if (true) {
            int d;
        }
        a = 1;
        d = 4;    //Error


Constants

La declaració de constants en Java, s'associa a conceptes de OO.

De moment només cal saber que cal definir les constants fora de les funcions (però dins de la classe)


static final tipus_de_dada NOM_CONSTANT [= valor_inicial];


Per exemple


public class Radi {

    static final double PI = 3.1416; //Fora del main

    public static void main(String[] args) {

        double radi, perimeter;

        radi = 3.3;
        perimeter = radi * PI * 2.0;

        System.out.println("El perimetre es : " + perimeter);
    }
}


Cadenes de caràcters. String

Java proporciona la classe String pel tractament de text. (No és un tipus simple, és una classe).

  • Operació + per concatenar.

I els següents mètodes d'utilitat per exemple

  • text.length(): Longitud d’una cadena de text
  • text.substring(index inici, index final): Obté un tros d’una cadena
  • text.equals("Altre Text"): Compara dos textos

Per exemple


        String textemeu;
        textemeu = "Bon";
        textemeu += " dia";
       
        System.out.println(textemeu.length()); // Escriu la longitud del text, 7
        System.out.println(textemeu.substring(1,3)) ; // Escriu "on"
        System.out.println(textemeu.equals("Bon deia")); // Escriu false


http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

Per al tractament de text es poden fer servir alguns caràcters especials:

Caràcter Significat
\b Retrocés
\t Tabulació
\n Salt de línia
\' Cometes simple
\" Cometes normals

Operadors

Matemàtics Lògics
+ Suma && AND
- Resta | | OR



* Producte ! NOT
/ Divisió Relacionals
% Mòdul == Igual
++ Increment != Diferent
-- Decrement >, < Més gran que, Menor que
Text
>=, <= Més gran o igual que, Menor o igual que
+ Concatenació instanceof obj instanceof cls és true si, i només si l'objecte obj deriva de la classe cls.

.

Vectors

Un vector o matriu és un conjunt d’elements del mateix tipus que s’identifiquen per la seva posició.

Per declarar vectors a Java la sintaxi és la següent

Tipus[] nom;

A més, no hi prou amb declarar les variables, el compilador necessita conèixer la mida o longitud dels vectors per poder reservar l’espai necessari, així cal un segon pas per inicialitzar els vectors.


        int [] vec;

        vec = new int[4]; // Vector de 4 enters

        String[] paraules = {"Hola", "Adeu"};


Finalment si volem fer referència als elements del vector cal que indiquem quin és l’element, tenint en compte que el primer element sempre és el 0.


        int [] vec;

        vec = new int[4]; // Vector de 4 enters

        vec[0] = 1; // Primer element del vector
        vec[3] = 7; // Últim element del vector


Exercici. Vectors + Strings

Fent un únic println() mostrar el següent llistat (On els valors provenen d'un vector, p.e. String[] paraules = {"Hola", "Adeu", "Eps!!"};)


 Vector de 3 elements:
	"Hola"
	"Adeu"
	"Eps!!"
 Fin

.

Modularitat. Mètodes

Les funcions són mètodes que retornen un valor

La Declaració de funcions


   public [static] Tipus nomFuncio(paràmetres)
   {
      instruccions;

      return expressió;
   }

On la declaració de paràmetres és una llista del tipus

Tipus variable, Tipus variable, ..., Tipus variable
  • static ho farem servir per mètodes de classe.

Les accions són mètodes que no retornen cap valor

La Declaració d'accions o procediments


   public [static] void nomAccio(paràmetres)
   {
      instruccions;
   }


Els mètodes es defineixen dins la classe


public class Radi {

    static final double PI = 3.1416; //Fora del main

    public static void main(String[] args) {
        System.out.println("El perimetre es : " + funcioPerimetre(3.3));
       
        accioPerimetre(3.3);
    }
   
    public static double funcioPerimetre(double radi) {
        double perimeter = radi * PI * 2.0;
        return perimeter;      
    }
   
    public static void accioPerimetre(double radi) {
        double perimeter = radi * PI * 2.0;
        System.out.println("El perimetre es : " + perimeter);
    }
}


Pas de paràmetres

  • Els paràmetres de tipus simples (int, double, char, boolean) es passen sempre per valor.
  • Els tipus compostos (vectors, matrius i objectes en general) es passen sempre per referència. Una excepció és String que funciona com un tipus simple (per valor).


public class PasParametres {
    public static void main(String[] args) {
        int sim = 3;
        pasValor(sim);
        System.out.println("El valor de sim és: " + sim);  // Mostra 3
       
        String text = "Sense canviar";
        pasString(text);
        System.out.println("El valor de text és: " + text); // Mostra "Sense canviar"
       
        int[] vec = new int[1];
        vec[0] = 3;
        pasReferencia(vec);
        System.out.println("El valor de vec [0]: " + vec[0]); // Mostra 7
    }
    public static void pasValor(int a) {
        a = 7;
    }
    public static void pasString(String s) {
        s = "Canviat";
    }
    public static void pasReferencia(int[] b) {
        b[0] = 7;
    }
}

  • Aclariment: Això no és exactament així. Java passa tots els paràmetres per valor. Però quan aquests són complexes (Objectes, vectors...) en comptes de passar per valor tot l'objecte passa per valor només l'identificador (OID). Així es comporta com si fos un pas per referència, però per exemple no es pot substituir l'objecte dins el mètode.


Exercici. Mètode

Posar llistat de l'exercici anterior en un mètode

paràmetres: String[] vector resultat: String


Estructures de Control

Condicionals

Condicionals
if (Condició ) {
<Instruccions>
} [ else {
<Instruccions>
} ]
switch( < expressió > ) {
case valor1:
<Instruccions>
break;
case valor2:
<Instruccions>
break;
[default:
<Instruccions>]
}

Per exemple, para atenció a l'ús (o no) dels blocs { }



        int opcio;
        opcio = 0;   

        if (opcio == 0) System.out.println("Has introduït 0");
        else {
            if (opcio == 1) System.out.println("Has introduït 1");
            else System.out.println("????");
        }
       
       
          switch(opcio) {
            case 0: System.out.println("Has introduït 0");
                     break;
            case 1: System.out.println("Has introduït 1");
                     break;
            default: System.out.println("????");
        }

Bucles

Iteració
do {
<Instruccions>;

} while ( <Condició> );

while ( <Condició> ) {

<Instruccions>;
}

for ( <inicialització>; <acabament>; <iteració> ) {
<Instruccions>;
}


public class ExFor {
    public static void main(String[] args) {
        System.out.println("Inici Bucle for");
        for ( int i=0; i<10; i++) {
            System.out.println("Valor de i: "+i);
        }
       
        System.out.println("Inici Bucle while");
        int i = 0;
        while ( i < 10 ) {
            System.out.println("Valor de i: "+i);
            i++;
        }
       
        System.out.println("Inici Bucle do while");
        i = 10;
        do {
            i--;
            System.out.println("Valor de i: " + i);
        } while (i > 0);
    }
}

El tractament de matrius és anàleg, només cal parar atenció al control de longitud


        int [][] mat;
        mat = new int[4][2]; // Matriu 4 files i 2 columnes

        for (int i=0; i < mat.length; i++) { // Informar matriu
            for (int j=0; j < mat[0].length; j++) {
                mat[i][j] = i + 3;
                System.out.print(mat[i][j]);
                System.out.print(" ");
            }
            System.out.println();
        }

Break and Continue

Aquestes dues instruccions permeten controlar l’execució de bucles.

break atura el bucle i surt, mentre que continue passa a la següent iteració

En general aquestes estructures compliquen la lectura del codi i no es fan servir.

..

Entrada i Sortida bàsica

De moment ens limitarem a l’entrada/sortida de dades des de la línia de comandes en cru (sense les classes d'utilitat habituals per aquestes operacions).

De manera automàtica a qualsevol programa estan oberts tres canals

System.in Entrada de dades pel dispositiu estàndard d’entrada
System.out Sortida de dades pel dispositiu estàndard de sortida
System.err Sortida d’errors

Sortida

Per mostrar informació a la línia de comandes es fan servir les operacions de la classe System.out que ja s’han fet servir.

print(): Escriptura sense salt de línia

println(): Escriptura amb salt de línia al final

Entrada per Consola

Per entrar informació des de la línia de comandes es fan servir les operacions de la classe System.in .

read(): Lectura d'un caràcter

El següent exemple mostra com llegir una cadena de caràcters des de consola


    public static void main(String[] args) throws IOException {
        System.out.println("Llegir fins a ENTER...");
        char caracter;
        String strEntrada = "";
        while ((caracter = (char) System.in.read()) != '\n') {
            strEntrada = strEntrada + caracter;            
        }
        System.out.println("strEntrada = " + strEntrada);
    }


Entrada Per Paràmetres

L'entrada per paràmetres consisteix en introduir dades al programa quan s'executa com a paràmetres de l'execució

Per a l’entrada des de consola es pot fer servir el pas de paràmetres de la funció main(String[] args) que es recuperen des del programa a través del vector args[index].


        int opcio;
        opcio = Integer.parseInt(args[0]);   
       
          switch(opcio) {
            case 0: System.out.println("Has introduït 0");
                     break;
            case 1: System.out.println("Has introduït 1");
                     break;
            default: System.out.println("????");
        }

Per a l'execució del programa cal indicar aquest atribut


~$java Programa 0

Has introduït 0


Convencions Programació Java

http://www.oracle.com/technetwork/java/codeconv-138413.html

http://checkstyle.sourceforge.net/ Aplicació per validar els estàndards