关于udp DatagramSocket的传值问题

请问如下类,为什么要带参数构造器呢,直接无参构造器不行吗,改成显式初始化不行吗
public class Send implements Runnable{
private DatagramSocket ds;
public Send(DatagramSocket ds){
this.ds = ds;
}
}

可以不用有参数的构造函数,但是需要提供这个属性的setter方法,否则你这个关联的对象怎么初始化呢?不用构造函数就需要类似如下:

 public class Send implements Runnable{
 private DatagramSocket ds;
 public setDs(DatagramSocket ds){
 this.ds = ds;
 }
 }