最有趣/最有用的Java类?

我已经使用Java一年左右了,而且我经常发现自己在语言中发现了新的东西。 有趣的是,大多数这些很酷的东西不是来自第三方API或库,而是来自JDK中提供的类。

所以我想知道,部分是出于好奇,部分是出于对他人和我自己的教育,JDK中哪些课程最有趣/最有用/最喜欢?

根据定义,对象。

由于您特别提到了JDK,我认为允许提及一个实际上在JRE中不可用的API,并且在我们大多数人中也不太了解: javax.tools

这是一个完整的演示片段:

 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". } } 

有用? 不确定。 有趣? 是的,有趣的是知道:)

对于残余,我喜欢Collections , Reflection , Concurrent和JDBC API。 所有这些都在此之前已经提到过。

大多数实现Collection接口的类!

我见过的新手让人们遗漏的一件事是SimpleDateFormat类。 我在当前项目中发现了一堆遗留代码,这些代码是由一个不熟悉Java的C ++程序员编写的,他基本上使用自定义代码完成了所有日期到字符串的格式化。 谈论重新发明轮子。

我最近开始使用zip / unzip支持,这是JDK的一部分。 它很棒! 我正在使用它在webapp中创建KMZ档案。

ThreadLocal可能接近列表的顶部。 这个类是很多魔术在更高级别框架中发生的主要方式,如果使用得当,它提供了一种在线程之间共享引用的有趣方式。

Reflection软件包也非常强大,是适合使用的有用工具。

无聊,但不知何故,它不断回到ole System 。 不是为了任何酷或令人兴奋的东西(正如我所说,无聊),但对于那个命令我可能比其他任何东西使用更多 – System.out.println (或者只是打印,如果这更像你的鱼的水壶。)

集合框架,Java实用程序包esp。 RegExp解析类。 真的取决于你想做什么!

对我来说, java.nio包中有很多类。

java.beans.Expression

我会根据自己的问题来衡量。 我个人最喜欢的类是java.util.Random。 我认为它对概率模拟,纸牌游戏和其他小程序非常有用。 我也发现(伪)随机性的想法令人着迷。

  • equals()和toString()方法的所有“对象”的基础。
  • exception类。 你无法取消它。
  • 集合API。 几乎所有Collections API中的内容都很有用,并且在您的代码中使用。
  • System.out.println的系统类。 但它几乎被logger API取代。
  • ThreadPoolExecutor如果你的产品真的使用线程,你真的关心它们被控制:)。
  • JDBC API。 仅仅基于我们是否在讨论使用方法。 但是由于使用了Hibernate(ORM工具),即使这样也会在后台进行

试图列出一些有用的,但我认为列表真的会很长。

SwingWorker绝对是一个很棒的课程。 它允许您在Swing应用程序中方便地创建工作线程。 这将返回处理的最终结果,甚至可以基于处理向EDT提供中间结果。