亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在循環里一直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 關注
  • 1155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號