在阅读了c#的隐藏特性之后,我想知道Java的隐藏特性有哪些?
当前回答
c风格的printf():)
System.out.printf("%d %f %.4f", 3,Math.E,Math.E);
输出: 3 2.718282 2.7183
二分搜索(以及它的返回值)
int[] q = new int[] { 1,3,4,5};
int position = Arrays.binarySearch(q, 2);
类似于c#,如果在数组中没有找到'2',它会返回一个负值,但如果你对返回值取1的补,你实际上会得到'2'可以插入的位置。
在上面的例子中,position = -2, ~position = 1,这是2应该插入的位置…它还允许您找到数组中“最接近”的匹配项。
我认为它很漂亮……:)
其他回答
这并不是一个真正的隐藏功能,但当我看到这个编译好的时候,它确实给了我一个很大的惊喜:
public int aMethod(){
http://www.google.com
return 1;
}
它被编译的原因是编译器将http://www.google.com行“http:”部分视为标签,而该行的其余部分是注释。
所以,如果你想写一些奇怪的代码(或模糊的代码),只要在那里放很多http地址。: -)
在Swing中工作时,我喜欢隐藏的Ctrl - Shift - F1特性。
它转储当前窗口的组件树。 (假设您没有将该击键绑定到其他内容。)
作为初学者,我非常欣赏Java 6中的JConsole监控软件,它已经为我解决了一些问题,而且我还在不断地寻找它的新用途。
显然JConsole在Java 5中已经有了,但我认为现在它已经改进了,至少现在工作得更稳定了。
Java 5中的JConsole: Java 5中的JConsole
Java 6中的JConsole: Java 6中的JConsole
当你在做它的时候,好好看看本系列中的其他工具: java6故障排除工具
当你不需要StringBuilder中包含的同步管理时,使用StringBuilder代替StringBuffer。它将提高应用程序的性能。
Java 7的改进甚至比任何隐藏的Java特性都要好:
菱形语法:Link
不要在实例化时使用那些infinite <>语法:
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
// Can now be replaced with this:
Map<String, List<String>> anagrams = new HashMap<>();
switch中的字符串:Link
在switch中使用String,而不是old-C int:
String s = "something";
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
自动资源管理Link
这段旧代码:
static void copy(String src, String dest) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dest);
try {
byte[] buf = new byte[8 * 1024];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} finally {
out.close();
}
} finally {
in.close();
}
}
现在可以用更简单的代码代替:
static void copy(String src, String dest) throws IOException {
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest)) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}
}
JDK发行版中的bin目录下的JVisualVM。监视甚至分析任何java应用程序,即使是没有使用任何特殊参数启动的应用程序。仅在Java 6SE JDK的最新版本中。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap