Diferència entre revisions de la pàgina «DAM-M3-UF4. Sintaxi»
(→Enumeracions: Enum) |
|||
(6 revisions intermèdies per 2 usuaris que no es mostren) | |||
Línia 12: | Línia 12: | ||
http://docs.oracle.com/javase/6/docs | http://docs.oracle.com/javase/6/docs | ||
− | * | + | * <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. |
− | * | + | * <b><code>java.util</code></b>, amb tot d’utilitats addicionals. |
− | * | + | * <b><code>java.text</code></b>, amb utilitats de format i manipulació de textos. |
− | * | + | * <b><code>java.math</code></b>, amb funcions matemàtiques. |
− | * | + | * <b><code>java.io</code></b>, amb rutines d’entrada i sortida |
− | * | + | * <b><code>java.net</code></b>, amb utilitats de xarxa. |
− | * | + | * <b><code>java.applet</code></b>, per a construir applets. |
− | * | + | * <b><code>java.awt</code></b>, per a gràfics i interfícies gràfiques d’usuari (GUI). |
− | * | + | * <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 | + | 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 | + | 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 | + | Java proporciona la utilitat <code>jar</code> per crear aquestes llibreries. La sintaxi és la següent |
+ | <html> | ||
<pre> | <pre> | ||
− | + | <code class="shell"> | |
+ | $jar cvf nomllibreria.jar directori | ||
+ | </code> | ||
</pre> | </pre> | ||
+ | </html> | ||
+ | |||
− | Aquesta instrucció crea una llibreria | + | 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 | + | 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 | + | <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 | + | * 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ó | + | * 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 | + | * 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 | + | * <b><code>boolean</code></b>. Valors de veritat o falsedat: només pot ser <code>true</code> o <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 | + | 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ó | + | * 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 | ||
− | * | + | * <code>text.length()</code>: Longitud d’una cadena de text |
− | * | + | * <code>text.substring(index inici, index final)</code>: Obté un tros d’una cadena |
− | * | + | * <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 | + | 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 | ||
− | | | | | + | | <code>| |</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> |
− | | | + | | <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 | ||
− | + | <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 === | ||
+ | |||
+ | Fent un únic <code>println()</code> mostrar el següent llistat | ||
+ | (On els valors provenen d'un vector, p.e. <code>String[] paraules = {"Hola", "Adeu", "Eps!!"};</code>) | ||
+ | |||
+ | <html> | ||
+ | <pre> | ||
+ | <code class="shell"> | ||
+ | Vector de 3 elements: | ||
+ | "Hola" | ||
+ | "Adeu" | ||
+ | "Eps!!" | ||
+ | Fin | ||
+ | </code> | ||
+ | </pre> | ||
+ | </html> | ||
. | . | ||
Línia 368: | 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 375: | 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 381: | Línia 475: | ||
<pre>Tipus variable, Tipus variable, ..., Tipus variable</pre> | <pre>Tipus variable, Tipus variable, ..., Tipus variable</pre> | ||
− | * | + | * <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 387: | 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 418: | Línia 518: | ||
} | } | ||
} | } | ||
+ | </code> | ||
</pre> | </pre> | ||
+ | </html> | ||
Línia 424: | 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 453: | 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. | ||
+ | |||
+ | |||
+ | === Exercici. Mètode === | ||
+ | |||
+ | Posar llistat de l'exercici anterior en un mètode | ||
+ | |||
+ | paràmetres: <code class="java">String[] vector</code> | ||
+ | resultat: <code class="java">String</code> | ||
+ | |||
+ | |||
=== Estructures de Control === | === Estructures de Control === | ||
Línia 463: | Línia 581: | ||
| valign="TOP" colspan="2" | '''''Condicionals''''' | | valign="TOP" colspan="2" | '''''Condicionals''''' | ||
|- | |- | ||
− | | if ( | + | | <html><pre><code class="java">if (<i>condició</i>) { |
− | | switch( | + | <i>instruccions</i> |
+ | } [else { | ||
+ | <i>instruccions</i> | ||
+ | }]</code></pre></html> | ||
+ | | <html><pre><code class="java">switch(<i>expressió</i>) { | ||
+ | case valor1: | ||
+ | <i>instruccions</i> | ||
+ | break; | ||
+ | case valor2: | ||
+ | <i>instruccions</i> | ||
+ | break; | ||
+ | [default: | ||
+ | <i>instruccions</i>] | ||
+ | }</code></pre></html> | ||
|} | |} | ||
− | Per exemple, para atenció a l'ús (o no) dels blocs { } | + | Per exemple, para atenció a l'ús (o no) dels blocs <code>{ }</code> |
+ | <html> | ||
<pre> | <pre> | ||
+ | <code class="java"> | ||
int opcio; | int opcio; | ||
opcio = 0; | opcio = 0; | ||
Línia 488: | Línia 621: | ||
default: System.out.println("????"); | default: System.out.println("????"); | ||
} | } | ||
+ | </code> | ||
</pre> | </pre> | ||
+ | </html> | ||
==== Bucles ==== | ==== Bucles ==== | ||
Línia 496: | Línia 631: | ||
| valign="TOP" colspan="2" | '''''Iteració''''' | | valign="TOP" colspan="2" | '''''Iteració''''' | ||
|- | |- | ||
− | | do {< | + | | <html><pre><code class="java">do { |
− | + | <i>instruccions</i>; | |
− | } while ( | + | } while ( <i>condició</i> );</code></pre></html> |
− | | while ( < | + | | <html><pre><code class="java">while ( <i>condició</i> ) { |
− | + | <i>instruccions</i>; | |
− | < | + | }</code></pre></html> |
|- | |- | ||
− | | valign="TOP" colspan="2" | for ( | + | | valign="TOP" colspan="2" | <html><pre><code class="java">for ( <i>inicialització</i>; <i>acabament</i>; <i>iteració</i> ) { |
+ | <i>instruccions</i>; | ||
+ | }</code></pre></html> | ||
|} | |} | ||
+ | <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 529: | Línia 668: | ||
} | } | ||
} | } | ||
+ | </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 | + | for (int i=0; i < mat.length; i++) { // Informar matriu |
− | for (int j=0;j | + | for (int j=0; j < 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 545: | Línia 688: | ||
System.out.println(); | System.out.println(); | ||
} | } | ||
+ | </code> | ||
</pre> | </pre> | ||
+ | </html> | ||
==== Break and Continue ==== | ==== Break and Continue ==== | ||
Línia 551: | Línia 696: | ||
Aquestes dues instruccions permeten controlar l’execució de bucles. | Aquestes dues instruccions permeten controlar l’execució de bucles. | ||
− | + | <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 565: | Línia 710: | ||
{| cellspacing="0" cellpadding="7" border="1" | {| cellspacing="0" cellpadding="7" border="1" | ||
|- | |- | ||
− | | | + | | <code>System.in</code> |
| Entrada de dades pel dispositiu estàndard d’entrada | | Entrada de dades pel dispositiu estàndard d’entrada | ||
|- | |- | ||
− | | | + | | <code>System.out</code> |
| Sortida de dades pel dispositiu estàndard de sortida | | Sortida de dades pel dispositiu estàndard de sortida | ||
|- | |- | ||
− | | | + | | <code>System.err</code> |
| Sortida d’errors | | Sortida d’errors | ||
|} | |} | ||
Línia 577: | Línia 722: | ||
==== Sortida ==== | ==== Sortida ==== | ||
− | Per mostrar informació a la línia de comandes es fan servir les operacions de la classe | + | 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. |
− | + | <code>print()</code>: Escriptura sense salt de línia | |
− | + | <code>println()</code>: Escriptura amb salt de línia al final | |
==== Entrada per Consola ==== | ==== Entrada per Consola ==== | ||
− | Per entrar informació des de la línia de comandes es fan servir les operacions de la classe | + | Per entrar informació des de la línia de comandes es fan servir les operacions de la classe <code>System.in</code>. |
− | + | <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 601: | Línia 748: | ||
System.out.println("strEntrada = " + strEntrada); | System.out.println("strEntrada = " + strEntrada); | ||
} | } | ||
+ | </code> | ||
</pre> | </pre> | ||
+ | </html> | ||
+ | |||
==== Entrada Per Paràmetres ==== | ==== Entrada Per Paràmetres ==== | ||
Línia 607: | Línia 757: | ||
L'entrada per paràmetres consisteix en introduir dades al programa quan s'executa com a paràmetres de l'execució | 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ó | + | Per a l’entrada des de consola es pot fer servir el pas de paràmetres de la funció <code>main(String[] args)</code> que es recuperen des del programa a través del vector <code>args[index]</code>. |
+ | <html> | ||
<pre> | <pre> | ||
+ | <code class="java"> | ||
int opcio; | int opcio; | ||
opcio = Integer.parseInt(args[0]); | opcio = Integer.parseInt(args[0]); | ||
Línia 620: | Línia 772: | ||
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> | ||
+ | </html> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Enumeracions: Enum ==== | ||
+ | |||
+ | Enum, | ||
+ | Tipus de dada especial que limita els possibles valors d'una variable a un conjunt de constants | ||
+ | El nombre de possibles valors ha de ser fix | ||
+ | |||
+ | Poden incloure mètodes i altres atributs | ||
+ | |||
+ | <html> | ||
+ | <pre> | ||
+ | <code class="java"> | ||
+ | public enum Fruites { | ||
+ | TARONJA, PERA, PINYA | ||
+ | } | ||
+ | </code> | ||
</pre> | </pre> | ||
+ | </html> | ||
+ | Es poden declarar variables i assignar valors | ||
+ | <html> | ||
+ | <pre> | ||
+ | <code class="java"> | ||
+ | Fruites fruita = Fruites.PERA; | ||
+ | </code> | ||
+ | </pre> | ||
+ | </html> | ||
+ | |||
+ | Disposen del mètode estàtic "values()" que permet recòrrer els elements | ||
+ | |||
+ | <html> | ||
+ | <pre> | ||
+ | <code class="java"> | ||
+ | for (Fruites f : Fruites.values()) { | ||
+ | System.out.println(f); | ||
+ | } | ||
+ | </code> | ||
+ | </pre> | ||
+ | </html> | ||
+ | |||
+ | Mostra | ||
+ | |||
+ | <html> | ||
+ | <pre> | ||
+ | <code class="shell"> | ||
+ | TARONJA | ||
+ | PERA | ||
+ | PINYA | ||
+ | </code> | ||
+ | </pre> | ||
+ | </html> | ||
+ | |||
+ | |||
+ | Es poden definir valors per als elements de les enumeracions | ||
+ | |||
+ | <html> | ||
+ | <pre> | ||
+ | <code class="java"> | ||
+ | public enum Fruites { | ||
+ | TARONJA ("Taronja", 1.1), | ||
+ | PERA ("Pera", 2.1), | ||
+ | PINYA ("Pinya", 2.4); | ||
+ | |||
+ | private final String nom; | ||
+ | private final double preu; | ||
+ | |||
+ | Fruites(String nom, double preu) { | ||
+ | this.nom = nom; | ||
+ | this.preu = preu; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | </pre> | ||
+ | </html> | ||
== Convencions Programació Java == | == Convencions Programació Java == |
Revisió de 16:37, 21 oct 2021
torna M3 - Programació
Contingut
- 1 Estructura i organització
- 2 Sintaxis
- 2.1 El primer programa
- 2.2 Comentaris
- 2.3 Declaració de variables i assignació
- 2.4 Visibilitat
- 2.5 Constants
- 2.6 Cadenes de caràcters. String
- 2.7 Operadors
- 2.8 Vectors
- 2.9 Exercici. Vectors + Strings
- 2.10 Modularitat. Mètodes
- 2.11 Exercici. Mètode
- 2.12 Estructures de Control
- 2.13 Entrada i Sortida bàsica
- 3 Convencions Programació Java
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 sertrue
ofalse
(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 | |
|
|
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ó | |
|
|
|
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
Enumeracions: Enum
Enum,
Tipus de dada especial que limita els possibles valors d'una variable a un conjunt de constants
El nombre de possibles valors ha de ser fix
Poden incloure mètodes i altres atributs
public enum Fruites {
TARONJA, PERA, PINYA
}
Es poden declarar variables i assignar valors
Fruites fruita = Fruites.PERA;
Disposen del mètode estàtic "values()" que permet recòrrer els elements
for (Fruites f : Fruites.values()) {
System.out.println(f);
}
Mostra
TARONJA
PERA
PINYA
Es poden definir valors per als elements de les enumeracions
public enum Fruites {
TARONJA ("Taronja", 1.1),
PERA ("Pera", 2.1),
PINYA ("Pinya", 2.4);
private final String nom;
private final double preu;
Fruites(String nom, double preu) {
this.nom = nom;
this.preu = preu;
}
}
Convencions Programació Java
http://www.oracle.com/technetwork/java/codeconv-138413.html
http://checkstyle.sourceforge.net/ Aplicació per validar els estàndards