比如下面的类少了in.close();这个语句会发生什么后果?还有,我这个方法写对吗?public class ConnectServer {
   public boolean isAppInit()  {
boolean appInit=true;
URL myURL;
      try {
myURL = new URL("http://www.sifg.com.cn/index.jsp");
InputStream is = myURL.openStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
if((in.readLine()) == null) {
 appInit=false;
 return false;
}
in.close();
} catch (MalformedURLException e) {
System.out.println("服务器连接没有启动");
 return false;
}catch(IOException e1){
System.out.println("读取服务器URL出现错误");
 return false;
}
return appInit;
}
}

解决方案 »

  1.   

    如果不关闭的话,那么这个IO资源就会被他一直占用,这样别人想用就没有办法用了,所以这回造成资源浪费。你要关闭资源,最好写在finally中,如果这个东东出现一个异常,你就关不掉了。
      

  2.   

    因为你的inputstream在try中,如果前面的语句出现exception,就没有关闭流.
    没有关闭简单来说的后果就是:该资源还是被占用着,没有释放,如果再来一个请求,
    就会抛出RuntimeExcetion.
      

  3.   

    首先,你的代码是对的!
    close()方法的作用是释放资源!
      把对象设为NULL,让垃圾回收机来回收!
      

  4.   

    java的特点之一就是它有自己的垃圾回收机制,close()方法可以将对象占用的资源释放,减少资源的浪费,同时在逻辑上,也是程序员应该习惯做到的,这样对程序也是安全的,
      

  5.   

    虽然都是 InputStream,但不同的物理实现,close() 的物理作用也有所不同,所以忘记了 close() 的后果也不一样。比如 ByteArrayInputStream 这种输入流,close() 与否就没什么关系。楼主的例子中,实际的输入流是一个网络连接。如果忘记 close() 的话,它会一直占用着,直到 timeout 后系统自动关闭这个网络连接。也就是说,如果你忘记了关闭这个资源,到了一定的时候,系统会替你关闭。但如果类似这样的程序被执行很多次,就会有大量资源被长时间无效占用,极端情况下可能导致后续程序资源不足而失败。也不是所有的资源都能自动回收,比如 FileInputStream,你要是忘记关闭了,它就一直占用着,直到 JVM 退出。所以,回过来说,好的编程习惯是:主动用程序严格控制对资源的释放,而不必区分其具体的物理实现,不要指望系统级的回收机制。这样能保证程序的可读性和可靠性。
      

  6.   

    不知道什么时候会断掉,需要根据你链接的那一方的协议和timeout设置了。如果是http协议,则不用担心,因为keep-alive是维持不了几秒钟的。
      

  7.   


    修正一下。如果 FileInputStream 对象满足了垃圾回收条件,JVM 会调用其 finalize(),从而调用 close() 关闭文件。不过,还是那个原则:要主动控制,不要寄希望于系统的自动回收。
      

  8.   

    虽然java会自动帮你关闭,但是还是自己写一下比较好
      

  9.   

    好,以后写就要注意用finally把它关掉