- 1. Java World Captol 6 2http: // gustavoal Benvinguts a una nova edició d’JavaWorldb Li donem la benvinguda novament als nostres amics de Valor Creatiu Leo, benvingut a la vida real novament !. er En aquest lliurament ens estar parlant una mica sobre les expectatives en la indústria de la informàtica. Molt til per todoso aquells que es troben a un pas o dins de l’àmbit de emprendedores.l Tornant a la certificació, començarem a endinsar-nos en l’API de Java especialitzada per a l’entrada i sortida de dades. Si, a ara podrs llegir aquest .txt amb tots els telfons que vas treure el dissabte i passar-lo a la teva agenda desenvolupada en Java. .b Aprendrem a persistir nostres objectes amb el model de serializacin que ens proposa de manera nativa Java, una utilitat l en principi per no dependre d’una base de dades, però la qual tindr un valor afegit quan treballem enviandoo missatges a través d’internet amb aquest mateix mtode;) g Ja estem en el compte regressiva en les edicions de JavaWorld, queden solament 4 captols. Aprofitin a treure suss dubtes, ja sigui enviant comentaris o per email (les dades poden obtenir-los en els blocs). po Aprofitem l’oportunitat per agrair el suport rebut per la comunitat i la bona ona per seguir endavant amb Estet proyecto..c Gràcies a todos.o La direcció de revista JavaWorldm
2. 3Java World captol 6h la classe String t Com hem esmentat en captols anteriors, la classe String no pot ser modificada. Llavors, cmo és que podem associar t diferents cadenes a una mateixa variable de tipus String ?. p String és un objecte immutable: / Immutable Que paraula. I qu vol dir? Simple, exactament que un objecte String no pot canviar el seu valor, però en cap moment s’esmenta que una variable String / no pugui apuntar a un altre objecte. v Anem a veure uns exemples per entendre-ho millor: a l public class PruebasString_001 {static public void main (String args) {o String s1 = new String ( “Hola”); r String s2 = “JavaWorld”; c System.out.println (s1); r System.out.println (s 2); i s1 = s1 + “-“; a s2 = s2.toUpperCase (); // Passa a majscules la cadena t System.out.println (s1); i System.out.println (s 2); v System.out.println (s1.concat (s 2)); // concatena dues cadenes. Equival a s1 + s2 o. String s3 = s 2; b}} l o ghola sJavaWorld pHola-JAVAWORLD Oholà-JAVAWORLD t. Ara pot ser que s’estan preguntant però no va dir que un String era immutable ?. Si, així és, però reitero, ningú diu que una c variable de tipus String no pugui referenciar a un altre objecte. o Vegem de manera grfica el mapatge en memòria: m 3. Java World Captol 6 4h 0000 000A 000B 001F0020 002C 002D – 00.410.042-0051 t Hola JavaWorldHola-JAVAWORLD Hola JAVAWORLD tp: s1 s2System.out.println (s1.concat (s 2) ); / Hola JavaWorld / g u s1 = new String ( “Hola”); s1s2s3s s2 = “JavaWorld”; Hola-JAVAWORLD JAVAWORLD t s1 = s1 + “-“; a s2 = s2.toUpperCase (); v o Cada caràcter dins d’un String es troba en format UFT-16. Les posicions en memòria mostrades anteriorment són soloa per exemplificar. El comportament de l’emmagatzematge és dirigit per la JVM en conjunt amb el Sistema Operativo.l Quan s’inicialitzen les variables, se’ls assignen els valors Hola i JavaWorld, aqu és quan vam crear els nostres dos primerosb objectes de tipus String. i Després, a s1 li concatenamos – i guardem el resultat a la mateixa variable, el que produeix que es generi un nou objecte, i r actualitzant la referència perquè apunti a este.o A s2 el transformem en majscules. Novament es genera un altre objecte, i emmagatzemem la referència a s2. l I finalment, generem una sortida en pantalla de s1 + s2. En aquest cas, tamb es genera un nou objecte, amb l’excepció que la referència no la captura ningú. Una vegada que es va mostrar per pantalla aquesta variable és candidata a ser alliberada pel garbage a collector .. Com podran haver notat, en cap moment es va modificar ningn objecte que estigués en memòria, però si van canviar les b referències de s1 i s2. l Finalment, quan vam crear un nou objecte (s3), i li assignem el valor de s2, no es crea un nou objecte, s’assigna la mismao posició de memòria. gCada vegada que generin una nova cadena, es genera un nou objecte String, sempre. L’nica excepció és scuando assignem el valor d’una variable String a una altra. En aquest cas, les dues apunten a la mateixa posició pde memoria.o t. String i la memòria c Atès que una cadena és una cosa tan comuna, i per poder optimitzar la memòria, la JVM reserva un rea especial de la memòria o anomenada String constant pool (banc de constants String). Quan el compilador troba un literal de tipus String, verificam al banc si hi ha una altra cadena idntica. Si es troba una, directament es referència a aquesta, sinó, es crea un nou objecte String.La classe String conté el modificador de no accés final. Això vol dir que no és possible sobre escriure la classe.Creació d’cadenes ha una diferència subtil entre crear un String mitjançant un literal i un objecte: 4. 5Java World Captol 6String s1 = “JavaWorld” h Es crea una variable de referència (s1) i un objecte String, el qual és emmagatzemat en el banc de constants String i associat a s1. t String s2 = new String ( “JavaWorld”) t Es crea una variable de referència (s 2). Com utilitzem la paraula clau new, es crea un objecte String fora de l’banc de constants p String i s2 referenciar a aquest. Després, el literal JavaWorld és inserit al banc. : Mtodes de la classe String / Tot seguit es nomenen els mtodes ms utilitzats de la classe String: / Tipus d’MtodoDescripcin v valor a de retorn l charcharAt (int index) Retorna el caràcter situat a l’índex especificat. o Stringconcat (String str) Afegeix un String a la fin d’un altre (equivalent a utilitzar el +). r boolean equalsIgnoreCase (String otroString) Indica si dues cadenes són iguals, sense tenir en compte majscules. c int length () Retorna la quantitat de caràcters que conté la cadena. r Stringreplace (char caracterViejo, charReemplaza cada caracterViejo amb el caracterNuevo. i caracterNuevo) a Stringsubstring (int inicioIndice, int finIndice) Retorna una nova cadena amb els caràcters compresos des de t inicioIndice fins finIndice. i StringtoLowerCase () Converteix els caràcters en minscules. v StringtoString () Retorna el valor d’un String (atès que és un String, es retorna a s o mateix). . String toUpperCase () Converteix els caràcters en majscules. String trim () Elimina els espais en blanc a l’inici i final de la cadena. b Per ms informaci poden consultar l’API de Java lhttp: //java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html og Shay destacar que el tipus String té un mtode length ( ), i els arrays tenen un parmetre length.pot StringBuffer i StringBuilder. Quan utilitzarem moltes cadenes podem utilitzar les classes java.lang.StringBuffer o java.lang.StringBuilder. A diferència de c String, amb la qual si generaramos diverses cadenes, s’aniran emmagatzemant en el banc de constants String, aquestes noves classes no es o emmagatzemen en aquest últim, sinó que aprofiten el mateix espai de memòria. m StringBuffer vs. StringBuilder La classe StringBuffer va ser incorporada a partir de la versi 5 de Java. Posseeix exactament la mateixa API que StringBuilder, llevat que aquesta última no és thread-safe (multifil amb seguretat). En altres paraules, els mtodes no es troben sincronitzats. Java recomana sempre que sigui possible, utilitzar StringBuilder, atès que és molt ms veloç que la seva germana StringBuffer. Només StringBuilder no és thread-safe.StringBuffer si és thread-safe.Ambas comparteixen la mateixa API.cuando necessitem que sigui thread-safe, utilitzarem StringBuffer. 5. Java World Captol 6 6Utilizando StringBuffer i StringBuilder ht String s1 = “JavaWorld”; // S’afegeix un String a el banc de constants String s1 + = “. Anem per ms”; // Es genera un nou String, i la referència a l’anterior es perd tp // es crea un StringBuffer (no va a el banc de constants String) StrungBuffer s1 = new StringBuffer ( “JavaWorld”) ;: s1.append ( “. Anem per ms”); // es modifica el mateix objecte (no es crea un nou String) / mtodes importants en les classes StringBuffer i StringBuilder / g Valor de retorn MtodoSobrecarga Descripci Exemple StringBuffer s = new o StringBuffer / append (String s) SI Concatena la cadena sa la StringBuilder cadena dins de l’objecte StringBuffer ( “Vull ser”); s s.append ( “un SCJP!”); (No cal atrapar l’// Vull ser un SCJP! T referència perquè ela canvi es realitzi). v StringBuffer / delete (int inici, NOElimina la subcadena dins StringBuffer s = new StringBuffer ( “Vull ser un o StringBuilderint fi) de la cadena de l’objecte SCJP!”); s.delete (10, 13); // Vull a des de la posició inici a la ser SCJP! l posició fi. StringBuffer / insert (intindice, SI Insereix una nova cadena (s) StringBuffer s = newb StringBuffer ( “Vull SCJP”); StringBuilderString s) a partir de la posició s.insert (7, “ser un”); i indicada per índex dins // Vull ser un SCJPr de la cadena de l’objeto.o StringBuffer / reverse () NOInvierte la cadena. StringBuffer s = new StringBuffer ( “PJCS”); l StringBuilder s.revert (); // SCJP a String toString () NODevuelve un String amb el StringBuffer s = new StringBuffer ( “SCJP”); . valor de l’objecte. String s1 = s.toString (); // SCJP bl És possible que es trobin en l’examen amb mtodes encadenats, aquests simplement es resolen deo dreta a esquerra, i el resultat d’un mtode, és l’objecte que utilitza el segundo.gs Un exemple d’equivalències: p StringBuffer s = new StringBuffer ( “Un SCJP”); o s.reverse (). delete (4, 7) .append ( “… un que?”). insert (0, “Vull ser un”); t System.out.println (s); // Vull ser un PJCS … una que ?. StringBuffer s2 = new StringBuffer ( “Un SCJP”); c s2.reverse (); o s2.delete (4, 7); s2.append ( “… un que?”); m s2.insert (0, “Vull ser un”); System.out.println (s 2); // Vull ser un PJCS … una que?StringBuffer i StringBuilder , a l’ igual que String , no requereixen ningn import. 6. 7 Java World Capt