【问题标题】:How do I get the value of a variable from another method without passing it off as an argument?如何从另一个方法获取变量的值而不将其作为参数传递?
【发布时间】:2019-06-29 01:45:17
【问题描述】:

我正在尝试创建一个聊天应用程序(是的,我知道,不是很有创意)并且我想将套接字变量的值传输到其他方法中。

但是我很困惑我该怎么办?

我已经尝试过将其作为参数传递,但由于某种原因不起作用,还尝试在方法之外声明变量,这也不起作用。

    public void DeclaringVariables() throws IOException{

        InetAddress group = InetAddress.getByName("239.255.255.255"); 
        int port = 1201; 
        Scanner sc = new Scanner(System.in); 
        System.out.print("Enter your name: "); 
        name = sc.nextLine(); 
        MulticastSocket socket = new MulticastSocket(port); 

        // Since we are deploying 
        socket.setTimeToLive(0); 
        //this on localhost only (For a subnet set it as 1) 

        socket.joinGroup(group); 
        Thread t = new Thread(new
        ReadThread(socket,group,port)); 

            // Spawn a thread for reading messages 
        t.start();

    }          

/**
 *
 */
public void SendButton() {

    try {

        while(true) {

                String message; 
                message = sc.nextLine(); 
                if(message.equalsIgnoreCase(GroupChat.TERMINATE)) 
                { 
                    finished = true; 
                    socket.leaveGroup(group); 
                    socket.close(); 
                    break; 
                } 
                message = name + ": " + message; 
                byte[] buffer = message.getBytes(); 
                DatagramPacket datagram = new
                DatagramPacket(buffer,buffer.length,group,port); 
                socket.send(datagram); 

    }
    } 

    catch (IOException ex) {
        Logger.getLogger(ChatGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
    }

【问题讨论】:

  • @Spara - 除非有充分的理由(常量、单例(少量)等),否则应避免使用静态 - 要访问同一类中的任何内容,拥有一个实例变量就足够了,而不是静态的.
  • I've already tried passing it off as an argument which for some reason doesn't work 它应该可以工作。请张贴代码。
  • 你能展示你正在写的完整课程吗?此外,Java 中的方法名称应使用小写形式,即declaringVariables()sendButton()
  • @Spara 不是,它是一个局部变量
  • @Spara 不应该。它应该是每个实例一个,而不是每个 JVM 一个。

标签: java variables inheritance


【解决方案1】:

如果您在多个方法中需要socket,请考虑将其声明为类属性,而不是局部变量。这样,您可以在类构造函数中实例化它并通过类中的所有方法访问它。像这样:

public class MyClass {

    // declare it here
    private MulticastSocket socket;

    public MyClass() {
        // instantiate it here
        socket = new MulticastSocket(1201); 
    }

    public void myMethod() {
        // now you can use it everywhere!
        socket.someMethod();
    }

}

【讨论】:

  • 您能告诉我该怎么做吗?你刚才说的一切都让我头晕目眩,哈哈
  • @PaperTronics 我更新了我的答案。请阅读 Java 教程,这是他们教给你的关于 OO 编程的第一件事;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2022-01-19
相关资源
最近更新 更多