我的这段代码哪里有问题==,刚学java


import java.util.*;
import java.io.*;
import java.net.*;

public class TestServer2 {
    public static void main(String [] args) {

        try {
            ServerSocket ss;
            ss = new ServerSocket(8888);
        }catch(IOException e) {
            System.out.println("传输错误");
        }
        Socket s = new Socket();
        try{
            s = ss.accept();
        }catch(Exception e) {
            System.out.println("连接失败");
        }

        try {
            BufferedWriter bo = new BufferedWriter( new OutputStreamWriter(s.getOutputStream()));
            BufferedReader bi = new BufferedReader(new InputStreamReader(s.getInputStream()));
        }catch(IOException e) {
            e.printStackTrace();
        }

        try {
            String str = null;
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            str = br.readLine();
            while(!str.equals("bye")) {
                bo.write(str);
                System.out.println("Cilent : " + bi.readLine());
                str = br.readLine();
            }
            bo.close();
            bi.close();
            br.close();
        }catch(IOException e) {
            e.printStackTrace();
        }
    }   
}

```![图片说明](https://img-ask.csdn.net/upload/201606/02/1464833487_755523.png)

图片说明

变量的作用域不同。变量ss在try{}块中定义他的作用就只在try{}可见,将变量的声明放在try外面,才在try{}外可用。

变量的声明全部提前,要不就使用一个try..catch...把全部包起来,变量的作用域仅限于一对{.......}内

楼上正解 try{}语句块可以理解为一个方法 方法内的变量是局部变量

弄清楚变量的作用范围

 {}之内的才能访问

,记得关闭流,还有为什么用了这么多的try-catch语句,代码可读性不好,放在一个try-catch 中不可以吗。

变量作用域和初始化的问题,

 package EliminateTheJoy;

import java.util.*;
import java.io.*;
import java.net.*;

public class TestServer2 {
    public static void main(String [] args) {
         ServerSocket ss=null;
        try {

            ss = new ServerSocket(8888);
        }catch(IOException e) {
            System.out.println("传输错误");
        }
        Socket s = new Socket();
        try{
            s = ss.accept();
        }catch(Exception e) {
            System.out.println("连接失败");
        }
        BufferedWriter bo=null;
        BufferedReader bi=null;
        try {
            bo = new BufferedWriter( new OutputStreamWriter(s.getOutputStream()));
             bi = new BufferedReader(new InputStreamReader(s.getInputStream()));
        }catch(IOException e) {
            e.printStackTrace();
        }

        try {
            String str = null;
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            str = br.readLine();
            while(!str.equals("bye")) {
                bo.write(str);
                System.out.println("Cilent : " + bi.readLine());
                str = br.readLine();
            }
            bo.close();
            bi.close();
            br.close();
        }catch(IOException e) {
            e.printStackTrace();
        }
    }   
}