Vous êtes sur la page 1sur 9

Captulo 1 - Interfaces siempre son abstract (aunque no lo declaren) pero no necesariamente public - Metodos de interfaces siempre public y abstract,

aunque no lo declaren. - Si cualquier clase hereda de un interfaz, aunque en los mtodos de la interfaz no ponga public o abstract, por fuerza la clase debe declararlos public. - Las variables de interfaces, declaradas o no, son constantes public static final - abstract se aplica a clases y mtodos. En mtodos, jams puede combinarse con final, private y static. - Tambin las clases pueden ser final, y nunca abstract y final al mismo tiempo. - NO SE PUEDE instanciar una clase abstracta, aunque tenga constructor. (creo) - native se aplica slo a mtodos y acaban en punto y coma. - strictfp se aplica a clases y mtodos. - synchronized se aplica a bloques de cdigo y mtodos. - Un constructor nunca puede ser abstract, final o static - transient y volatile slo se aplican a las variables de una clase. - Las variables de instancia marcadas final deben ser inicializadas antes de que el constructor de la clase se complete. - Mirar bien enums (paginas 60-65) - Un constructor implcito sin argumentos se crea para un enum si no tiene un constructor. Nunca se puede invocar desde fuera del enum el constructor de un enum. - Properties of the enum type. An enum declaration is a special kind of class declaration: It can be declared at the top-level and as static enum declaration. It is implicitly static, i.e. no outer object is associated with an enum constant. It is implicitly final unless it contains constant-specific class bodies, but it can implement interfaces. It cannot be declared abstract unless each abstract method is overridden in the constantspecific class body of every enum constant. - Dentro de un enum puede haber un public static void main (String[] args){}. - Un enum NO se puede declarar dentro de un mtodo. - import statement, package statement and class definitions are all optional in a file. CIERTO. - The JavaBeans naming convention only applies to methods, not to class names. CIERTO.

Captulo 2 - Mirar reglas redefinicin de mtodos (pginas 106-107) - Un mtodo hijo que redefine a otro mtodo padre del cual hereda puede decidir no lanzar excepciones en caso de que el mtodo padre s los lance. Esto no da problemas siempre que llames al mtodo hijo desde una referencia de tipo hijo, pero si usas polimorfismo y asignas a una referencia de tipo padre un objeto de tipo hijo (Animal ani = new Perro() ) y llamas al mtodo redefinido, da runtime error porque se supone que la referencia de tipo Padre s lanza la excepcin (es ilegal llamar a ani.metodo porque en realidad ejecutas el mtodo del hijo que no lanza la excepcin de la clase Padre). - Si una clase hereda de otra e implementa una interfaz, el extends debe ser declarado antes del implements. - Reglas de diseo de constructores (pginas 133-134) - No se pueden usar variables de instancia ni mtodos de instancia hasta que la llamada a super() dentro del constructor termine.

- Toda clase debe tener un constructor, incluidas las clases abstractas. - NO SE PUEDE, en caso de haber una jerarqua de tres clases estilo Abuelo, Padre e Hijo, hacer una llamada a un mtodo de Abuelo desde Hijo estilo super.super.metodoDelAbuelo(); Solo se podra hacer una llamada al mtodo heredado del padre as: super.metodoDelAbuelo(); (lo que sera el mtodo heredado en Padre del Abuelo). - Un default constructor tiene el mismo nivel de acceso que la clase a la que pertenece y hace una llamada a super() por defecto. - Si un constructor no tiene en LA PRIMERA LINEA insertada una llamada a super() o una llamada a this() (con o sin argumentos, ambos) automticamente mete una llamada a super(). No puede tener los 2 a la vez, o el uno, o el otro. Si un constructor tiene una de estas llamadas, significa que no es el constructor definitivo, que le est pasando a otro constructor la responsabilidad final de llamar a super() (con o sin argumentos). Las llamadas mencionadas a this() y super() deben incluirse por FUERZA en la primera lnea, y slo pueden llamar a variables y mtodos estticos como argumentos de la llamada. Las variables y mtodos de instancia slo pueden usarse cuando alguno de los constructores, al fin, haya hecho la llamada a super() con o sin argumentos. - Un mtodo esttico no se puede redefinir (override). Aunque sea idntico en el padre y en el hijo, al llamarlo desde una instancia cualquiera, slo se tiene en cuenta la referencia de clase, no el objeto. Ejemplo: Animal a = new Animal(); Animal b = new Perro(); a.metodoestatico() y b.metodoestatico() devuelven el resultado de la clase Animal, independiente del objeto en ejecucin. - Un mtodo con tipo de retorno void nunca puede devolver nada, pero SI puede simplemente escribir un return a secas para salir tempranamente del mtodo. Algo as como si fuera un break. - is-a relationships always rely on inheritance. is-a relationships always rely on polymorphysm. CIERTO. - has-a relationships are always defined with instance variables FALSO. En una variable estatica tambin se puede guardar un objeto. In some cases, is-a relationship are used in the process of autoboxing CIERTO, porque se puede hacer autobox de un int en un Number via un Integer. - Encapsulation makes it easier to reuse classes. CIERTO. - NO SE PUEDE declarar un mismo mtodo con la exacta misma signatura dos veces, una vez como esttico, y otra vez como instancia. Ejemplo: static void go() {}; void go() {}; Esto da error de compilacin. - Las variables estticas se inicializan antes que las no-estticas. Ejemplo:
class Test { Test(int i) { System.out.print("Test(" +i +")"); } } public class Q12 { static Test t1 = new Test(1); Test t2 = new Test(2); static Test t3 = new Test(3); public static void main(String[] args) { Q12 Q = new Q12(); } }

Resultado: Test(1) Test(3) Test(2) - The following declaration(as a member variable) is correct: static final transient int maxElements = 100; - Una clase "Fullfils the contract" de otra se refiere a menudo a "implements" y "kind of" a "extends". - Any call to this or super must be the first line in a constructor. As the method already has a call to this, no more can be inserted. CIERTO. 2

- Has-a relationships no siempre requieren dos clases al menos, ya que una clase puede tener una variable de s misma. - Some reference variables live on the stack, and some live on the heap. CIERTO.

Captulo 3 - Los nmeros octales se representan poniendo un 0 antes del nmero, ej: 0777. El mximo nmero de dgitos sin contar el prefijo 0 para un octal es 21. - Para hexadecimales empieza en 0x o 0X, se aceptan tanto maysculas como minsculas INDISTINTAMENTE para los nmeros A-F. Se aceptan hasta 16 dgitos mximo en una sola cifra sin contar el 0x. - Para todos los literales integer (sean octales, decimales o hexadecimales) si pones un L al final de la cifra se especifica que el nmero es long. Ej: long jo = 110599L. - En nmeros de coma flotante, cualquier literal es por defecto double. Lo puedes especificar poniendo una d al final de la cifra, pero no es necesario. Si quieres especificar que es float, hay que hacerlo por fuerza con una f al final, si no te da error de compilacin. Las fracciones siempre detrs de un punto, no una coma, de lo contrario error de compilacin. - Se puede asignar un literal a un char, pues los char son en la trastienda integers de 16 bits sin signo (como un short sin signo). Hay que vigilar que el literal que se pasa al char no supere los 16 bits de representacin, sino error de compilacin. Si los supera, haciendo un casting (char) antes de la asignacin se truncan los digitos extra y ya no da error.Tambin se puede asignar cdigos de escape a un char entre comillas simples \n \ etc. - Por defecto, cualquier literal no flotante es interpretado como int, y lo ms importante, el resultado de cualquier expresin que involucre nmeros enteros da por resultado un tipo int (Pginas 192-193). Por tanto, esta asignacin no funciona por falta de casting: byte b = 7+3. Sin embargo esta s byte b = (byte) 7+3. La excepcin es utilizar los operadores *=, +=, /=, etc, que hacen un casting implcito. Ej: byte x = 4 ; x += 5 equivale a byte x = 4 ; x = (byte) x + 5; - Lo que tampoco funciona, y el apestoso libro no lo aclara, es que si pasas un literal numrico a un mtodo que toma como argumento un integer de tamao pequeo que no es int como por ejemplo short o byte (es decir, menor que int) tienes que hacer casting del literal para que la llamada no de error de compilacin. Ej: metodoQueTomaUnShort( (short) 7); - Acceder a un array fuera de rango produce un Runtime Exception, no un error de compilacin. Los arrays tienen una variable llamada length, mientras q los strings un mtodo length(). - Se puede asignar una referencia de array de un subtipo a una referencia de array de su supertipo. Por ejemplo, si tenemos Animal[] a ; Dog[] d = new Dog[3]; se puede hacer la asignacin a = d. Esto NO FUNCIONA CON TIPOS PRIMITIVOS. Es decir, no puedes asignar un short[] o byte[] a un int[], o un long[] a un int[], o un float[] a un double[]. - Los bloques de inicializacin estticos se ejecutan una sola vez, cuando se carga la clase. Los de instancia una vez por objeto, y despus de que todas las llamadas a super() de los constructores de la clase terminen, pero antes del cdigo propio de esos constructores. Si cometes algn fallo en un bloque de inicializacin, te puede saltar un error (de ejecucin, creo) ExceptionInInitializationError.

- Los objetos Wrapper son inmutables, una vez se les ha asignado un valor, no se puede cambiar. Si a al constructor de un Wrapper se le pasa un string mal escrito cuya signatura no coincide exactamente con la de un primitivo , por ejemplo, two, dos, 20ypico entonces se produce una excepcin NumberFormatException. Todos se pueden construir con su correspondiente tipo primitivo o con un String, exceptuando Character, que slo acepta un char, y Float, que acepta float, double, y String. - Mirar bien mtodos de Wrappers (Pginas 240-243). - Dos variables Wrappers se supone q son equals() si son del mismo tipo y tienen el mismo valor. Aunque siendo iguales, son distintas, o sea: Integer i1 = 1000; Integer i2 = 1000; i1==i2 */esto da FALSO/*; i1.equals(i2) */esto da verdadero/*;. Hay una excepcin al operador ==, permitiendo que el resultado sea true en caso de que los Wrappers sean Boolean, Character desde \u0000 hasta \u007f (127) , Byte, y Short o Integer desde -128 hasta 127. - Si tenemos declarado un mtodo eat (Animal a) entonces si tenemos un objeto Dog d = new Dog(), podemos hacer esta invocacin eat(d), porque Dog hereda de Animal. Pero con los objetos Wrappers NO SE PUEDE, porque un Byte no hereda de un Short, ni un Short de un Integer, o un Integer de un Long, o un Float de un Double. Sin embargo, con primitivos, si tenemos una funcin sum(int a,b) y tenemos dos bytes o shorts se puede hacer llamadas de este tipo gracias al widening: sum(b,b); sum(b,s); sum(s,b); sum(s,s). Repito, widening slo con primitivos, con Wrappers no. - Se puede hacer shadowing entre una variable de instancia y una de mtodo, ya sea local o un argumento, pero una variable de bucle (por ejemplo en la declaracin del for) no puede hacer shadowing a un argumento de mtodo. Seguramente este no sea el nico caso, lo he sacado de una pregunta de test (la 3-8). - Los mtodos valueof() y parseXXX() pueden tomar como argumento un NUMERO, no solo un String, aunque slo lanzaran NumberFormatException en caso de tomar un String. - En una cuestin de test preguntaban a ver que array se declaraba e inicializaba 4 nmeros. El caso es que si declaramos int[] a = new int[4] esto tambin inicializa cuatro nmeros, porque los pone a 0. No hace falta corchetes para inicializarlos explcitamente. - Aunque invoques el mtodo finalize() en un objeto para el garbage collector, la JVM podra invocarlo por s misma una sola vez ms, y luego ya no volvera a invocarlo sobre el mismo objeto jams. - Un Var-args siempre debe ser el ltimo argumento de un mtodo, y en caso de que sea el nico argumento, puede tener 0 elementos. O sea, si tengo doStuff (Integer... x) podra hacer esta invocacin: dostuff();. - float f = (1/4) *10 da igual a 0, porque el resultado de la divisin de 1 entre 4 es 0.25, y como todo calculo entre nmeros enteros da por resultado un int, entonces se redondea a 0. Luego multiplicamos el 0 * 10, y hacemos un casting implcito a float, que nos deja un float de valor 0. - Atencin con los parseInt y valueOf del estilo parseInt("10",10), son legales pero parecen trampa ya que en la mayora de casos se usa otra base no decimal. - Cuando tengo islands of objects, en plan, e1.e = e2; e2.e = e3; e3.e = e1; hasta que las tres referencias no han sido anuladas, no hay ningn objeto elegible para el garbage collector. Cuando se han anulado las 3, las 3 son elegibles.

Captulo 4

- El contenido de un if siempre tiene q dar resultado boolean, por tanto es posible ver esta trampa en el examen: boolean b = false; if (b = true) {};. El resultado entre parntesis es true. Pero sin embargo NO lo puedes hacer con algo que no de un resultado boolean, por ejemplo un numrico , por ejemplo: int a = 5; if (a = 0) {}; . Produce error de compilacin. - En compound assignments (+= -= /= *=) la parte de la derecha siempre tiene prioridad. Por ejemplo x *= 5+3 equivale a x = x * (5+3). - El resultado comparado entre un floating-point y un integer puede ser verdadero. Ej: if ( 5.0 == 5L) { System.out.println(esto es cierto); }. El resultado es esto es cierto. - null instanceof CualquierClase siempre siempre da false, incluso comparndolo contra object. Si tratamos de comparar jerarquas de clases incompatibles, tenemos error de compilacin. Por ejemplo: cat instanceof dog. Esto da error de compilacin.

Captulo 5 - Mirar reglas switch (Pginas 336-337). - En un enhaced for, SIEMPRE hay que declarar la variable sobre la que se va a iterar. O sea, no se puede hacer esto: int x; int[] array = {1,2,3}; for(x : array){}. Se puede usar el polimorfismo, pero la variable a la izquierda debe ser superclase de los elementos del array. Es decir, se puede hacer esto for (Animal a : dogs){} ya que los perros del array pueden hacer cualquier cosa que haga un animal, pero no se puede hacer esto for (Dog d : animals){}. - En un for estndar s se puede declarar la variable fuera del bucle y usarla despus. Ejemplo: int x = 0; for (x = 0; x < 5; x++){System.out.println(x);} x = 7; - Un continue debe estar dentro de un loop, sino obtendramos un error de compilacin. - Un labelled break o labelled continue del estilo break outer; o continue outer; debe estar dentro del loop que lleve la misma etiqueta que ese break o continue. Si no, da error de compilacin. - Cuando en un bloque try-catch queremos capturar excepciones de una determinada clase perteneciente a una superclase para darle un determinado tratamiento, pero al resto de subclases pertenecientes a la superclase queremos darles un tratamiento ms general, podemos declarar la excepcin ms especfica PRIMERO y DESPUS la ms general que engloba al resto. SIEMPRE se declara la subclase primero y despus la superclase, sino da error de compilacin. - Mirar excepciones comunes (pgina 382). - Mirar bien el captulo de aserciones, que son jodidas. - En un for corriente, es vlido inicializar e iterar varias variables, de este modo: for (int x, y = 0 ; x < 10 ; x++, y++);. Pero no se puede hacer esto: for (int x = 0, int y = 0 ; x < 10 ; x++, y++); Es decir, se hace una sola declaracin mltiple, no varias independientes. - En un enhanced for la variable se puede declarar como final Ej: for (final int i : array){} - En un switch, una variable Integer u otro Wrapper, incluso si es static final, no se considera una constante que pueda ser utilizada en uno de los case. O sea, que este es uno de los pocos casos en los que no hay Unboxing.

Captulo 6

- Cuando asignamos una cadena a un String, estamos creando un objeto en el String Pool (String s = abc). La nica excepcin se da cuando hemos creado otra cadena en el pool con anterioridad y tiene exactamente el mismo valor. Si al hacer la asignacin String s = abc la JVM encuentra alguna cadena con el valor abc, se la asigna a s sin crear un nuevo objeto. - Al hacer String s = abc estamos creando un slo objeto en el String Pool, pero si hacemos String s = new String(abc) estamos creando dos, uno en el String Pool (abc) y otro en la memoria normal (new String()). - DateFormat y NumberFormat slo pueden especificar un Locale en tiempo de instanciacin (getInstance o getDateInstance). Una vez instanciados, NO SE PUEDE modificar un Locale. - Regex Zero-Length Matches (mirar Pgina 500). - Al hacer tokenizing, String.split() crea un array de strings a partir de un String que ha sido dividido por el patrn regex. Por ejemplo, si String s = abc,def,gh,,ik y hacemos String[] array = s.split(,) obtendramos todas las cadenas separadas por comas. Lo importante a tener en cuenta es que no se generan slo 4 cadenas (abc def gh ik) sino 5, porque entre gh y ik hay dos comas, y por tanto habra otro String de longitud cero entre esas 2 comas, quedando los siguientes: abc def gh ik. Por tanto, array.length es 5, no 4. - StringBuffer y StringBuilder no hacen override del Equals(), as que dos instancias de esas clases slo son iguales si referencian el mismo objeto, no si tienen mismos valores. - Al hacer des-serializacin personalizada mediante el writeObject(), defaultWriteObject(), readObject() y defaultReadObject() los datos se leen de vuelta en orden FIFO, es decir, si has serializado un int en primer lugar, se des-serializar ese int en primer lugar. Si despus has hecho defaultWriteObject(), lo prximo sera el defaultReadObject(). En el writeObject se escribe en el mismo orden en el que se lee en el readObject. Signatura: private void writeObject(ObjectOutputStream os) throws IOException, private void readObject(ObjectInputStream is) throws IOException, ClassNotFoundException. - NumberFormatException, IllegalArgumentException and IllegalStateException are exceptions that are typically thrown by an application or API developer. NoClassDefFoundError, StackOverflowError, NullPointerException y ArrayIndexOutOfBoundsException, ExceptionInInitializerError, ClassCastException son tpicamente lanzadas por la JVM. - En las assertions, la segunda expresin slo se ejecuta si la primera DA FALSO. - It is sometimes appropiate to call getters and setters from assertions. FALSO. Los setters pueden causar efectos colaterales que no quieres que sucedan slo por estar las aserciones habilitadas. - Reader es la superclase abstracta de todos los lectores de caracteres y InputStream de los lectores de bytes. - FilterWriter, InputStream y Reader son abstractas. El mtodo read de InputStream lanza IOException. - Si tengo un float size = 3.2f e intento hacer System.out.printf("%1d", size) esto compila pero salta IllegalFormatConversionException. Sin embargo, puede que con el valor 3.0 s deje hacer la conversin, aunque no estoy seguro. Acabo de comprobarlo en Eclipse, y tampoco deja. - Cuando algo no es serializable salta una excepcin NoSerializableException. - Si al usar format tengo esto format(%c, x) da error porque la x tiene que ir entre comillas simples. Si hago format(%f, 123) da error tambin porque tendra q poner

123.0. Si hago format(%b, 123) NO da error, sino que devuelve true para cualquier cosa que no sea un boolean. - StringBuffer y StringBuilder tambin tienen mtodo length(). - En lo referido a Files o Streams, el close() lanza una IOException, as que hay que capturarlo en un match o declararse que se lanza una excepcin. - Para crear una instancia de Console - System.console() - hay que usar las clases java.lang.System (que no hace falta importar) y java.io.Console. - Scanner NO tiene un hasNextChar() o un nextChar(). Del resto de primitivos s tiene. El useDelimiter() puede ser cualquier expresin regex valida, no tiene que ser algo simple.

Captulo 7 - Mirar bien los tipos de colecciones (Pginas 561-565). - Es importante recordar que Equals() toma un argumento de tipo objeto, mientras que compareTo() debera coger un argumento del tipo de objeto que t quieras. Si aadimos el implements Comparable<ClaseConcreta> entonces podramos hacer compareTo(instanciaDeClaseConcreta). - Arrays.sort() y Collections.sort() son ambos static y cambian el objeto coleccin o array que invocan como argumento, sin devolver nada. Arrays.sort() puede ordenar tipos primitivos, pero en ese caso siempre los ordena de forma natural, de modo que es imposible usar un Comparator para ordenar tipos primitivos de otra forma. Es decir, esta invocacin Arrays.sort(arrayDeInts, unComparator) da error, imagino que de compilacin, aunque no lo s. El String no es un tipo primitivo, y se puede usar con un Comparator. - Solo el binarySearch() requiere que una coleccin haya sido ordenada antes de buscar en ella mediante el Collections.sort(). Ni el reverse() ni el reverseOrder() necesitan ese orden previo para ejecutarse. - Cuando queremos aadir algo a un set, por ejemplo Set mySet = new HashSet(); mySet.add(objeto); el add() tiene la posibilidad de devolver un boolean indicando si ha habido xito al introducir el objeto en el Set o no se ha podido. Cuando no se puede, normalmente el caso habitual es que sea un duplicado. - La notacin <?> o cualquiera de sus derivados extends y super se usan solamente con declaraciones de variables (siempre de objetos, o sea, referencias) mientras que los <E> o <T> o cualquiera similar se usan con clases, mtodos o variables. No se puede usar <?> en mtodos y clases como si fuera un <T>. - En una collection, por ejemplo un Set o Map, no overridear hashCode() provoca que cada cosa que metas en la coleccin vaya a su propio bucket, pero luego no puedes comparar elementos entre s con el equals(). O sea, que una vez metidos no puedes encontrarlos y sacarlos de la coleccin. Si implementamos el hashCode(), el equals() puede encontrar elementos iguales entre s y si es un Set estimar que son duplicados. - Si en un array de objetos, por ejemplo, Animal[] intentamos meter el objeto equivocado, por ejemplo, un Tree, nos saltara una RunTimeException llamada ArrayStoreException. - Si en un TreeSet<Number> metemos varios nmeros, estos deben ser mutuamente comparables. Es decir, si hacemos un tree.add(128), estaran admitidos como comparables tree.add(Integer.valueOf(-1) y tree.add(0xCAFE), pero NO estaran admitidos tree.add(42) por ser un String, o tree.add(new Long(123)); por ser un long,

o tree.add(3.14) por ser un double. Tampoco un tree.add(null). Osea, como 128 es UN INTEGER, todo lo dems debe ser a la fuerza INTEGER tambin. - Lo mismo pasa en un ArrayList x. Si metemos x.add(5); x.add(new Integer(42)); x.add(new Integer(50)); x.add(new Integer(812).longValue()); y hacemos Collections.sort(x), salta una excepcin porque el 812 sera un Long y los dems Integer, y no se puede comparar Integers con Longs. - Al parecer, pero NO ESTOY SEGURO, con los wildcards puedes hacer uso de <? extends loquesea> y <? super loquesea> pero con los Generic Declarations <E> o <T> slo se puede usar el extends, NO podemos hacer esto: class Pie <T super Apple> {}. - En las Generic Declarations, el <?> a solas es incompatible con la operacin add. Ejemplo: void funcion(List<?> lista){lista.add(new Objeto()); Esto no se puede hacer. - public class Basket<E> Correctas: Basket b = new Basket(); Basket b1 = new Basket<Fruit>(); Basket<Fruit> b2 = new Basket<Fruit>(); Basket<?> b5 = new Basket<Apple>(); - The asList() method creates a fixed-size list that is backed by the array, so no additions are possible. No se puede llamar a add() sobre la lista creada. Pero en otra cuestin he visto que S se puede hacer un list.set (index, nuevoelemento) sobre la lista obtenida a partir del asList(). Aunque claro, set (index, nuevoelemento) no aade nada. - Si intentamos hacer un variable instance of Collection<tipogenerico> nos da error de compilacin por emplear el tipo genrico. Da igual con que interfaz o clase de coleccin lo hagamos. - ArrayList no puede usar ceiling() o floor() porque son mtodos nuevos en Java 6 y no implementa el interfaz NavigableMap o NavigableSet. Y como ArrayList, la mayora tampoco, pues slo pueden implementarlo TreeMap y TreeSet (y los interfaces SortedSet y SortedMap).

Captulo 8

Captulo 9 - Cuando en una llamada a objeto.wait(), el thread que lo invoca no tiene el lock de objeto, lanza un IllegalMonitorStateException. No es una checked exception, as que no hace falta capturarlo en un catch. - Cualquier clase que implemente Runnable debe POR FUERZA implementar el mtodo public void run(). Es lo lgico, todo aquel que implementa una interfaz debe implementar sus mtodos si es una clase concreta. - En la clase Thread estn definidos tanto los mtodos start() como run(). run() lo tiene porque implementa a Runnable. Pero en Runnable no hay ningn start() porque Runnable no es un Thread, es una interfaz independiente de Thread, que es una clase. - El wait puede tomar un argumento de tipo long. - El notify() no libera los locks de un objeto inmediatamente, sino cuando sale del bloque o mtodo sincronizado. - wait (long millis) y join (long millis) tienen mtodos overloaded que toman el long millis a esperar si no se les devuelve el control. sleep (long millis) lo tiene siempre. - wait y notify son los nicos mtodos que hacen release de los locks del objeto que los invoca, aunque notify lo hace no inmediatamente, sino al salir del bloque de sincronizacin. Ni sleep, ni join, ni yield liberan los locks del objeto que los invoca al ejecutarse.

- Cuando hacemos un notify, cualquier thread que est esperando se vuelve runnable inmediatamente, pero el notify no libera el lock del objeto para ese thread hasta que sale del bloque de sincronizacin. - Si un myThread que implementa run() se construye utilizando un myRunnable que tambin implementa run(), al hacer start() el run() que se utiliza es el del thread. - public void run() puede sufrir un override con la palabra synchronyzed, pero no se puede overridear como static (ningn mtodo de instancia se puede overridear como mtodo esttico).

Capitulo 10 - Tanto para los comandos java como para javac, en Unix la sintaxis es as: java /directorio1/directorio2:/directorio1:.. Esto busca en el directorio 2 que est dentro de directorio 1 primero, en el directorio 1 despus, y finalmente en el directorio por defecto. El . significa directorio por defecto. Tambin podemos especificar classpath como cp. Hay dos cosas importantes a saber. La primera es que javac SIEMPRE busca en el directorio por defecto, mientras que el comando java no lo hace, hay que especificarlo. La segunda es que el comando java siempre acepta la abreviatura cp, mientras que javac la admite CASI siempre, aunque no siempre, depende de la mquina. - Tanto java como javac pueden usar ficheros JAR en el classpath. - JAR files placed in the /jre/lib/ext subdirectory within the J2SE directory tree can be used by javac regardless of the command line classpath. CIERTO - When the compiler gets the command-line argument that instructs it to construct any missing directories it needs, a destination directory must NOT be included in the command line. FALSO. - Con el comando java solamente se ejecuta un .class, nunca dos o ms. Solamente se ejecutan ficheros de extensin .class.Y creo que con javac se compila slo uno tambin. - El -D se usa solo con el comando java, no con javac - A la hora de hacer import static, un enum se cuenta como el miembro esttico de la clase en la que est metido.

Vous aimerez peut-être aussi