[英]The Scope of Creating an instance of a class inside a method in java
任何人都可以向我解释从 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
成为类的属性。范围将是对象的声明。 要在函数中创建对象,这取决于您的需求,如果您想重用该对象,则可以在类级别声明该对象并将该类设为单例(如使用数据库存储库)并在构造函数中初始化它或一些初始化方法。 如果您要求每个方法调用都应该有新对象,那么您应该在方法级别创建。
由于您没有将对象返回给任何实例变量,因此当方法结束时,没有指向该对象的变量,因此可以对其进行垃圾回收。 您不知道 gb 何时会运行或是否会运行。 这只是说你不能假设对象会在方法结束后立即消失
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.