为了账号安全,请及时绑定邮箱和手机立即绑定

在循环里一直new对象为什么是可以的?

在循环里一直new对象为什么是可以的?

慕桂英546537 2019-03-22 22:19:47
菜鸟一枚,如果问题问的不恰当请各位轻喷。第二次编辑:抱歉各位!我似乎误导了大家!在学习客户端与服务器端的通信时,当中这么一段代码: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 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

对象有作用域,像第一个循环里的serverThread在结束一次循环时候就会被销毁,也就是在while(true){…}的“{”和“}”之间属于一个作用域。


客户端连接后是单独的一个线程(serverThread)去处理,这个线程与主线程之间是异步的,所以主线程不用等待serverThread执行完销毁,而是子线程自己的生命周期去控制,主线程继续等待下一个客户端的连接

查看完整回答
反对 回复 2019-04-17
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

C语言是块作用域,只要你写了一个{ }就会生成一级作用域。所以serverThread 类似于函数的局部变量。每一次循环都是函数的不同调用,所以不会有什么问题。


查看完整回答
反对 回复 2019-04-17
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

每次循环可以当一个作用域吧,第二个是在同一个作用域里有两个相同变量名了,肯定是不行的吧。
把第二个变量名改下就好了吧。
补充:你这个变量是循环内部的一个局部变量,你可以这么认为:这一次的循环和下一次的循环不在同一个作用域,所以你本质上是在不同的作用域创建了相同的名称的变量。

查看完整回答
反对 回复 2019-04-17
?
三国纷争

TA贡献1804条经验 获得超7个赞

while (true) {

    int localValue = 100;

    // int localValue = 200; // ERROR!在当前作用域,已经存在名为 localValue 的变量,不可重复声明变量

}


int localValue = 200; // OK!当前作用域没有名为 localValue 的变量


查看完整回答
反对 回复 2019-04-17
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

实际上这个只是变量重复声明错误


ServerThread serverThread = new ServerThread(socket);

//serverThread 已经被声明你是无法再次声明。

serverThread = new ServerThread(socket);

你如果说这个的话就和大家说的一样serverThread变量实际上在一次循环后就会被销毁,再来到

ServerThread serverThread = new ServerThread(socket);

的时候serverThread实际上已经不存在了所以可以被重新声明


查看完整回答
反对 回复 2019-04-17
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

同作用域已存在的变量不能重复声明,但这种情况是可以的:
Class A{
Int a = 0;
void methodB(){

Int a = 1;

}
}


查看完整回答
反对 回复 2019-04-17
  • 6 回答
  • 0 关注
  • 1133 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号