Java小知识集合

1. @SuppressWarnings("unchecked")

    有的Java程序在类型转换方面实在去不掉警告信息,就只能这么强制去除警告了。

 

2.  @SuppressWarnings("deprecation")

     强制去除过期方法的警告

 

3.  @SuppressWarnings({"deprecation","unchecked"})

     同时去除多个类型的警告 

 

4.

response.setContentType("application/pdf");
// 加了这一行就会出现打开和下载PDF的提示窗口,不加的话,直接在IE里显示,且只能用英文名字  : (
// 要想在新的IE窗口中打开PDF,那就要用window.open(url)来实现
response.setHeader("Content-Disposition", "attachment;filename = requireContent.pdf");

// .......
// .......


DataOutput output = new DataOutputStream(response.getOutputStream());
byte[] bytes = buffer.toByteArray();
response.setContentLength(bytes.length);
for( int i = 0; i < bytes.length; i++ ) { 
     output.writeByte( bytes[i] ); 
}
return null;

 

5. swing 中关闭窗口

// 释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。  JFrame 中调用此方法。
this.dispose();

// 将对该窗口的引用置为null, 这样,后面就不能引用这个窗口资源了。
//不然的话,被dispose掉的窗口资源还有可能别调用,因为dispose掉的窗口资源还没有被gc立即释放(gc会自动将对象释放的)。
// JFrame frm = new JFrame("testFrame");
// frm = null;  

首先,Java不允许你控制资源的释放,所有的资源释放都是由JVM来管理的,除非你退出JVM。
当你对资源调用dispose方法时,实际上是将资源的状态置为已废弃,gc会自动来将资源释放掉。

其次,setDefaultCloseOperation()方法是用来设置用户在此窗体上发起 "close" 时默认执行的操作。其中DISPOSE_ON_CLOSE调用任意已注册WindowListener的对象后隐藏并释放该窗体;EXIT_ON_CLOSE则使用System exit方法退出JVM。

dispose()是Window类的方法,并非Container类,它的JDK APIDOC里面这样描述:

释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。
通过随后调用 pack 或 show 重新构造本机资源,可以再次显示 Window 及其子组件。重新创建的 Window 及其子组件的状态与释放 Window 时这些对象的状态一致(不考虑这些操作之间的其他更改)。

注:当 Java 虚拟机 (VM) 中最后的可显示窗口被释放后,虚拟机可能会终止。


也就是说,调用dispose()方法是将对象占用的本地屏幕资源(screen resources)释放,对象本身并没有释放,只是底层的对应点已经释放了,所以仍然是可用的。
当然,调用底层本地屏幕资源已经被释放的对象可能会出现一些错误,有时会报一个SWTException: Widget is disposed...。

如果你的程序已经没有其他线程在运行的话,当所有的窗口都被dispose了之后,JVM也会退出。

只需要将该子窗口dispose掉,并且将对该窗口的引用置为null(如caoyinghui1986所说的),不用管它是否还能使用,gc会自动将对象释放的(不会立即释放,对象有它的生命周期,gc会依照自己的算法进行资源回收)。

 

6.Calendar 时间的增减

 

你可能感兴趣的:(java,jvm,虚拟机,swing,IE)