为了账号安全,请及时绑定邮箱和手机立即绑定

java中在方法内创建类实例的作用域

java中在方法内创建类实例的作用域

收到一只叮咚 2021-05-31 21:42:54
任何人都可以向我解释从 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 对象并浪费资源或函数完成后对象消失?
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

这并没有错,但它是次优的,出于按需构建的目的,DatagramSocket 不符合轻量级类的要求。这个问题可能会在SE Code Review上得到更好的答案。

  • 使datagramSocket类的属性。

  • 从方法中删除静态。

  • 在此类的构造函数或调用类中实例化套接字并传递给构造函数。

  • 您的参数变量“端口”应该是“端口”。

  • 您的代码会忽略 Port 参数并将套接字硬编码为 20002。

  • 了解变量生命周期和作用域之间区别


查看完整回答
反对 回复 2021-06-02
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信