2011-12-03 28 views
0

所以這是我的代碼:如何在不調用包的情況下調用我在Java中創建的變量? (其在同級別)

ServerSocket server = new ServerSocket(port); 
Socket sock = new server.accept(); 

它說:「服務器無法解析爲一個類型」。
就像你所看到的,我做了一個名爲「服務器」的變量。我怎樣才能使用server.accept()?
哦,我試過Socket sock = new this.server.accept();Socket sock = new accept();Socket sock = new this.accept();但他們都沒有工作。

回答

4

你想創建一個新的對象或調用一個現有的方法嗎?如果你只是想用server.accept(),你需要在方法調用之前除去new

ServerSocket server = new ServerSocket(port); 
Socket sock = server.accept(); 

當你想要實例化一個類型的new keyword時才使用。一旦你有了這種類型的實例,你再也不需要再使用new,只需使用包含該實例的變量就可以調用它。

當前編譯器試圖使用server作爲一種類型,這就是爲什麼你會收到一個錯誤,抱怨它沒有被解析爲一個。 :D

-1

這聽起來像問題是編譯器無法解析「ServerSocket」。

問:這個類在哪裏定義?

一個你分配「服務器」(即一旦你有一個「ServerSocket」的實例),那麼你不需要調用「新」。

建議的修改:

import java.net.*; 

public class MyClass { 

    public void SomeMethod() { 
    int port = SomeNumber; 
    ... 
    try { 
     java.net.ServerSocket socket = new ServerSocket (port); 
     Socket clientSocket = socket.accept(); 
     ... 
+0

提示:編譯器不尋找ServerSocket,但「服務器」 –

+0

@Yanick Rochon:提示 - 我只是想幫助。你的「暗示」(和你無保證的降價)不受歡迎:) – paulsm4

+2

你的答案的第一部分根本不正確,而且我非常友善地告訴你爲什麼我低估了。這遠遠超過我個人通常擁有的。 –

1

Java語言預計new應遵循的一個類名或數組類型的名字,並說要創建一個新的對象。

但是你並沒有試圖在這裏創建一個新的對象。您正嘗試在現有對象上調用accept()方法。

擺脫第二行的new


的原因有些混亂的消息是,編譯器認爲您試圖創建一個對象,並試圖匹配「server.accept」一個合格的類名稱;即「服務器」包中稱爲「接受」的類。這些都不存在,所以它說它不能這樣做。它沒有意識到「服務器」名稱是變量名稱的原因是變量的標識符和類和包的標識符位於不同的名稱空間中。爲了說明這一點,如果你定義一個類,如下所示:

package server; 
public class accept { 
} 

那麼你的兩個行的代碼段會給出不同的編譯錯誤,大致爲「你不能指定類型的對象‘server.accept行’到一個類型Socket的變量「。

相關問題