2024-04-20 09:00:01

Java的隐藏特性

在阅读了c#的隐藏特性之后,我想知道Java的隐藏特性有哪些?


当前回答

我差点忘了这个小宝贝。在任何正在运行的java进程上尝试这个:

jmap -histo:活动PID

您将得到给定VM中活动堆对象的直方图。作为一种快速计算某些类型的内存泄漏的宝贵方法。我使用的另一种技术是创建和使用所有集合类的有大小限制的子类。这将导致容易识别的失控集合出现快速故障。

其他回答

在Java 1.6 Update 10及以后版本中发现的下一代Java插件有一些非常简洁的特性:

传递java_arguments参数,将参数传递给创建的JVM。这允许您控制给予applet的内存量。 为每个applet创建单独的类装入器,甚至单独的JVM。 指定要使用的JVM版本。 在只需要完整Java库功能的一个子集的情况下,安装部分Java内核。 更好的Vista支持。 支持(实验性)将applet拖出浏览器,并在导航离开时让它继续运行。

这里记录了许多其他事情:http://jdk6.dev.java.net/plugin2/

更多信息请访问:http://jdk6.dev.java.net/6u10ea.html

它并不是完全隐藏的,但反射是非常有用和强大的。使用简单的class . forname("…"). newinstance()是很好的,其中类类型是可配置的。编写这种工厂实现很容易。

局部类。 从包含类的外部实例化Java内部类。

这并不是一个真正的功能,而是我最近在一些网页上发现的一个有趣的技巧:

class Example
{
  public static void main(String[] args)
  {
    System.out.println("Hello World!");
    http://Phi.Lho.free.fr

    System.exit(0);
  }
}

是一个有效的Java程序(尽管它会生成警告)。 如果你不明白为什么,请看格雷戈里的回答!;-)好吧,这里的语法高亮也给了一个提示!

一些控制流的技巧,最后围绕一个return语句:

int getCount() { 
  try { return 1; }
  finally { System.out.println("Bye!"); }
}

确定赋值规则将检查最终变量总是通过简单的控制流分析进行赋值:

final int foo;
if(...)
  foo = 1;
else
  throw new Exception();
foo+1;