黑马程序员技术交流社区

标题: try中的变量 在try外面不能用吗? [打印本页]

作者: 刘圣繁    时间: 2013-2-21 22:55
标题: try中的变量 在try外面不能用吗?
import java.net.*;
import java.io.*;
class LoginClient
{
public static void main(String[]args)throws Exception
{
Socket  st=new Socket("192.168.0.2",10002);
try{
PrintWriter out=new PrintWriter(st.getOutputStream(),true);
BufferedReader bur=new BufferedReader(new InputStreamReader(System.in));
BufferedReader buw=new BufferedReader(new InputStreamReader(st.getInputStream()));
for(int i=0;i<3;i++)
{
String name=bur.readLine();
if(name==null)
{
System.out.println("请输入用户名");
continue;
}
out.println(name);
String line=buw.readLine();
System.out.println(line);
if(line.contains("欢迎"))
break;
}
}
catch(IOException e){e.printStackTrace();}
finally{
try{
bur.close();
st.close();
}
catch(IOException e){e.printStackTrace();}
}
}
}
上面代码编译时出现问题
说变量bur找不到
编译提示找不到bur!!!!!!!!!!!
是不是说明try中的变量在try外面不能用   

作者: 谢波    时间: 2013-2-21 23:10
变量都有作用域的
一般来说呢就是一对大括号内
出了大括号就离开了变量的作用域,变量被释放了,不存在了
作者: 江华    时间: 2013-2-21 23:15
{} 内的东西,只能{}自家用,其他想用,只能让{},在内部声明为 static  

作者: 胥文    时间: 2013-2-21 23:15
try代码块中的变量是局部变量,外面是用不了的
该代码中,你可以设成引用型变量定义在成员位置上,下面代码块就可以用了
比如
PrintWriter out=null//引用型变量定义在成员位置上
BufferedReader bur=null//引用型变量定义在成员位置上
BufferedReader buw=null//引用型变量定义在成员位置上

try{
out=new PrintWriter(st.getOutputStream(),true);
bur=new BufferedReader(new InputStreamReader(System.in));
buw=new BufferedReader(new InputStreamReader(st.getInputStream()));
}
这样写就不会有问题了
作者: 江华    时间: 2013-2-21 23:40
{} 内的东西,只能{}自家用,其他想用,只能让{},在内部声明为 static  

作者: 小路飞    时间: 2013-2-22 10:12
胥文 发表于 2013-2-21 23:15
try代码块中的变量是局部变量,外面是用不了的
该代码中,你可以设成引用型变量定义在成员位置上,下面代码 ...

正解!归根起来还是局部变量的作用域问题。
作者: scott0610    时间: 2013-2-22 13:13
在try中声明的变量属于局部变量,局部变量的作用域只能在当前的方法中使用,当方法执行完后,局部变量的生命周期也就结束了。
作者: 唐长智    时间: 2013-2-23 00:01
胥文 发表于 2013-2-21 23:15
try代码块中的变量是局部变量,外面是用不了的
该代码中,你可以设成引用型变量定义在成员位置上,下面代码 ...

正解 ,ooo
作者: 贾文泽    时间: 2013-2-23 00:35

  1. import java.net.*;
  2. import java.io.*;
  3. class LoginClient
  4. {
  5. public static void main(String[]args)throws Exception
  6. {
  7. Socket  st=new Socket("192.168.0.2",10002);
  8. PrintWriter out=null;
  9. BufferedReader bur=null;
  10. BufferedReader buw=null;      //在外面初始化,作用于整个main方法
  11. try{
  12. out=new PrintWriter(st.getOutputStream(),true);
  13. bur=new BufferedReader(new InputStreamReader(System.in));
  14. buw=new BufferedReader(new InputStreamReader(st.getInputStream()));
  15. for(int i=0;i<3;i++)
  16. {
  17. String name=bur.readLine();
  18. if(name==null)
  19. {
  20. System.out.println("请输入用户名");
  21. continue;
  22. }
  23. out.println(name);
  24. String line=buw.readLine();
  25. System.out.println(line);
  26. if(line.contains("欢迎"))
  27. break;
  28. }
  29. }
  30. catch(IOException e){e.printStackTrace();}
  31. finally{
  32. try{
  33. bur.close();
  34. st.close();
  35. }
  36. catch(IOException e){e.printStackTrace();}
  37. }
  38. }
  39. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2