java - 在循环里一直new对象为什么是可以的?
天蓬老师
天蓬老师 2017-04-17 17:26:53
0
6
886

菜鸟一枚,如果问题问的不恰当请各位轻喷。
第二次编辑:抱歉各位!我似乎误导了大家!
在学习客户端与服务器端的通信时,当中这么一段代码:

while(true){
//等待客户端的连接
socket = serverSocket.accept();
//创建一个新的线程
ServerThread serverThread = new ServerThread(socket);
    //启动线程
serverThread.start();
}

我想问:为什么一个同名对象能一直被new出来(当客户端建立起一个连接时)?比如这个serverThread。
但是如果我这么写:

while(true){
//等待客户端的连接
socket = serverSocket.accept();
//创建一个新的线程
ServerThread serverThread = new ServerThread(socket);
    ServerThread serverThread = new ServerThread(socket);
    //启动线程
serverThread.start();
}

我知道这是错的,new相同名字的对象是不可以的。
但是在无限循环中,也是在不停的new出对象啊,ServerThread serverThread = new ServerThread(socket);
不停的被执行,serverThread不停的创建..这样为什么可以呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(6)
PHPzhong

객체에는 범위가 있습니다. 예를 들어 첫 번째 루프의 serverThread는 루프가 끝나면 소멸됩니다. 즉, while(true) {...의 "{"와 "}" 사이의 범위에 속합니다. } .

Ty80

C 언어는 { }만 작성하면 1단계 범위가 생성됩니다. 그래서 serverThread 은 함수의 지역변수와 비슷합니다. 각 루프는 함수에 대한 서로 다른 호출이므로 문제가 없습니다.

大家讲道理

각 루프를 범위로 사용할 수 있습니다. 두 번째는 동일한 범위에 두 개의 동일한 변수 이름이 있다는 점입니다. 이는 절대 불가능합니다.
두 번째 변수의 이름을 변경하면 됩니다.
보충: 변수는 루프 내부의 지역 변수입니다. 이렇게 생각할 수 있습니다. 이 루프와 다음 루프는 동일한 범위에 있지 않으므로 본질적으로 다른 범위에서 동일한 변수를 생성합니다. 변수의.

大家讲道理

으아아아

伊谢尔伦

사실 이건 그냥 반복되는 변수 선언 오류입니다

으아악

이렇게 말하면 다들 말씀하신 것과 같습니다.
ServerThread serverThread = new ServerThread(socket);
으로 오면 serverThread 변수는 실제로 소멸됩니다. 더 이상 존재하지 않으므로 다시 선언할 수 있습니다

黄舟

동일 범위에 이미 존재하는 변수는 반복적으로 선언할 수 없지만 가능합니다.
Class A{
Int a = 0;
void methodB(){

으아아아

}
}

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿