在java中的方法内创建类实例的范围

在java中的方法内创建类实例的范围,java,object,scope,object-lifetime,object-construction,Java,Object,Scope,Object Lifetime,Object Construction,有人能向我解释一下在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 */

有人能向我解释一下在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对象,或者该对象在函数完成时消失


谢谢

范围将是对象的声明。要在函数中创建对象,这取决于您的需求,如果您想重用该对象,那么您可以在类级别声明该对象,并将该类设置为singleton(如使用数据库存储库),然后在构造函数或某些init方法中初始化它。若您要求每个方法调用都应该有新的对象,那个么您应该在方法级别创建

由于没有将对象返回给任何实例变量,因此当methd结束时,没有指向对象的变量,因此可以对其进行垃圾收集。您无法知道gb何时运行或是否运行。这只是说,您不能假设对象将在方法结束后立即消失

这没有错,但它是次优的,DatagramSocket不符合按需构建的轻量级类的条件。这个问题可能会得到更好的答案

  • datagramSocket
    作为类的属性
  • 从方法中删除静态
  • 在该类的构造函数或调用类中实例化套接字并传递给构造函数
  • 参数变量“Port”应为“Port”
  • 您的代码忽略端口参数,并将套接字硬编码为20002
  • 学习这些知识

从类创建对象的范围是什么?你的意思是可以使用变量的范围吗?这取决于声明的位置。但是,是的,在这段代码中,每次调用此方法时,您都会创建一个新的DatagramSocket实例(java没有函数),并且在方法终止时,它确实可以用于GC。这不理想,不。您希望打开套接字并保持其打开状态。打开IO插槽真的很贵…谢谢。。。我每隔几分钟从主类调用一次发送函数,该函数创建“DatagramSocket”的对象……这样可以吗?@KamelK它可以工作,但是否“ok”是另一回事。如果您在应用程序启动时创建了一个实例,并继续重复使用该实例,而不是不断创建新实例,可能会(好得多)。基本上,你是在抛弃你的系统资源,这不是答案。答案需要证据、支持,而不是意识流。对不起,这不是答案。答案需要证据、支持,而不是意识流。此外,这还不足以作为编程的答案——“消失”是什么意思?假设的作者问“当函数完成时对象是否消失?”是的,作者是学生,你是老师。步骤1将解释什么是范围界定,步骤2什么是符合GC的条件,步骤3解释这意味着“可见性”不同于“删除”-GC。第四步,用一个很好的例子把它们联系起来。一个糟糕的问题永远不是写糟糕答案的借口。