任何人都可以向我解释一下在java中的方法内从类创建对象的范围,这是一个糟糕的方法并且浪费资源还是正常的?程序正在运行,但我不确定这一步:
/**
* Sending Packets Method
* @param message-the message we want to send to the client side
* @param IP-in InetAddress format
* @param Port-in integer format
* @return Null
*/
public static void send(String message,InetAddress IP,int Port){
byte [] buffer=message.getBytes();
DatagramPacket datagrampacket=new DatagramPacket(buffer,buffer.length,IP,Port);
datagrampacket.setPort(20002);
try {
DatagramSocket datagramSocket=new DatagramSocket();
datagramSocket.send(datagrampacket);
datagramSocket.setReuseAddress(true);
datagramSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
在这种情况下,我每次调用该函数时都会创建一个新的 DatagramSocket 对象,浪费资源或该对象在函数结束时消失?
谢谢
请您参考如下方法:
这并没有错,但它不是最佳的,DatagramSocket 不符合按需构建的轻量级类的资格。这个问题可能会在 SE Code Review 上得到更好的答案。 .
- 使
datagramSocket
成为该类的属性。 - 从方法中删除静态。
- 在此类的构造函数或调用类中实例化套接字并传递给构造函数。
- 您的参数变量“Port”应为“port”。
- 您的代码忽略端口参数并将套接字硬编码为 20002。
- 了解 distinction between variable lifetime and scope .