Como usted mencionó específicamente JDK, creo que se puede mencionar una API que en realidad no está disponible en el JRE y también es menos conocida entre la mayoría de nosotros: javax.tools
.
He aquí un fragmento de demostración completa:
package test;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.net.URL;
import java.net.URLClassLoader;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class Test {
public static void main(String[] args) throws Exception {
// Prepare source somehow.
String source = "public class Test { static { System.out.println(\"test\"); } }";
// Save source in .java file.
File root = new File("/test");
File sourceFile = new File(root, "Test.java");
Writer writer = new FileWriter(sourceFile);
writer.write(source);
writer.close();
// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
// Load compiled class.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("Test", true, classLoader); // Prints "test".
}
}
Útil? No es seguro. ¿Interesante? Sí, interesante saber :)
Para el resto, me gusta el Collections, Reflection, Concurrent y JDBC API. Todos los cuales ya están mencionados aquí.
http://stackoverflow.com/questions/15496/hidden-features-of-java –
@ Brian: Eso es similar e igualmente interesante, aunque la mayor parte de esto tiene que ver con peculiaridades sintácticas, etc en lugar de clases estándar –
Este es una pregunta wiki de la comunidad, entonces ¿por qué se cierra como subjetivo? –