for
aumentadoCollection
considera sólo miembros de clase Object
durante ejecución.Esto compila correctamente:
import java.util.*;
public class Ej1 {
public static void main(String args[]) {
List lista = new ArrayList();
lista.add(new String("¡Hola!"));
lista.add(new String("¡Adiós!"));
lista.add(new Integer(95));
Iterator i = c.iterator();
while(i.hasNext()) {
String item = (String) i.next();
System.out.println("Artículo: " + item);
}
}
}
Pero falla al ejecutarse:
Artículo: ¡Hola!
Artículo: ¡Adiós!
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
at Ej1.main(Ej1.java:14)
Problemas detectados durante compilación:
import java.util.*;
public class Ej2 {
public static void main(String args[]) {
List<String> lista = new ArrayList<String>();
lista.add(new String("¡Hola!"));
lista.add(new String("¡Adiós!"));
lista.add(new Integer(95)); // error
Iterator<String> i = c.iterator();
while(i.hasNext()) {
String item = i.next();
System.out.println("Artículo: " + item);
}
}
}
for
aumentado (definición)Iterator
necesario.for (ParámetroFormal : Expresión) Sentencia
java.lang.Iterable
java.util.Collection
extiende java.lang.Iterable
foreach (Elemento in Colección)
?
for
aumentado (colección)
// Asume una instancia de StringBuffer "sb"
public void viejoFor(Collection c) {
for(Iterator i = c.iterator(); i.hasNext(); ) {
String str = (String) i.next();
sb.append(str);
}
}
// Asume una instancia de StringBuffer "sb"
public void nuevoFor(Collection<String> c) {
for(String str : c) {
sb.append(str);
}
}
for
aumentado (arreglo)
public int viejaSuma(int arreglo[]) {
int suma = 0;
for(int i = 0; i < arreglo.length; i++) {
suma += arreglo[i];
}
return suma;
}
public int nuevaSuma(int arreglo[]) {
int suma = 0;
for(int i : arreglo) {
suma += i;
}
return suma;
}
int
)
y objeto "envoltura" (p.e. Integer
) al utilizar colecciones:
List list = new ArrayList();
list.add(0, new Integer(59));
int n = ( (Integer) (list.get(0)) ).intValue();
List<Integer> list = new ArrayList<Integer>();
list.add(0, 59);
int n = list.get(0);
public class MenúPrincipal {
public static final int MENÚ_ARCHIVO = 0;
public static final int MENÚ_EDICIÓN = 1;
public static final int MENÚ_FORMATO = 2;
}
public enum MenúPrincipal {ARCHIVO, EDICIÓN, FORMATO};
enum
genera una clase (MenúPrincipal
):
Comparable<MenúPrincipal>
y Serializable
.ARCHIVO
, EDICIÓN
y FORMATO
.values()
regresa un arreglo de constantes.valueOf(String)
regresa constante a partir de nombre.equals()
, hasCode()
, toString()
, y compareTo()
.
public class Ejemplo {
public enum MenúPrincipal {ARCHIVO, EDICIÓN, FORMATO};
public static void main(String[] args) {
for (MenúPrincipal menú : MenúPrincipal.values())
System.out.println(menú);
}
}
switch
:
for (MenúPrincipal menú : MenúPrincipal.values()) {
switch(menú) {
case ARCHIVO:
System.out.println("archivo"); break;
case EDICIÓN:
System.out.println("edición"); break;
case FORMATO:
System.out.println("formato"); break;
}
}
interface XYZ {
public static final int Constante1 = 123;
public static final String Constante2 = "ABC";
}
public class MiClase implements XYZ {
....
int valor = 2 * Constante1;
...
}
import static XYZ.*;
public class MiClase {
....
int valor = 2 * Constante1;
...
}
import static java.lang.Math.*;
import static java.lang.System.*;
public class Ejemplo {
public static void main(String[] args) {
out.println("cos(0)=" + cos(0))
}
}
public interface PingIF extends Remote {
public void ping() throws RemoteException;
}
public class Ping implements PingIF {
public void ping() {
}
}
public class Ping {
public @remote void ping() {
}
}
void miMétodo(String arg0) { miMétodo(new String[] {arg0}) }
void miMétodo(String arg0, String arg1) { miMétodo(new String[] {arg0, arg1}) }
void miMétodo(String[] args) {
for (int i = 0; i < args.length; ++i) System.out.println(args[i]);
}
void prueba() {
miMétodo("1", "2");
miMétodo(new String[] {"1", "2", "3", "4", "5"});
}
void miMétodo(String ... args) {
for (String a : args) System.out.println(a);
}
void prueba() {
miMétodo("1", "2");
miMétodo("1", "2", "3", "4", "5");
}
printf
de C:
System.out.printf("%s %3d", nombre, edad);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int n = Integer.parseInt(str);
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
java.util.Formatter
proporciona algoritmos de reconocimiento de patronesjava.util.concurrent
, biblioteca de sincronización de alto nivel: