I do have one thing to ask though just for clarification on point 4. I think I understand but you mean that I should lean more towards using the constructor than using the mutator methods?
Yes. So instead of:
Person p = new Person();
p.setName("sos");
p.setAge(666);
prefer
Person p = new Person("sos", 666);
To add to this, if you don't plan on changing the fields after the object is created, you can also mark them as final
and be rest assured that there won't be any accidental assignment or mutation to these fields. It doesn't make a lot of difference in a single threaded program but become really important when you start using threads. Shared mutable state (i.e. sharing a Person object between two threads wherein the fields are mutate/can be set) can lead to headaches as the system grows in size. So for e.g. if you are asked to add a new song to the playlist and remove an existing one, instead of "mutating" or modifying the object you plan on removing, it's better to actually remove a given song object and add a new one. In short, stay away from unnecessary mutation! If you want to know more or need a detailed snippet to showcase the problem, just let me know and I'll write it out for you.
Does that come with the netbeans installation or is it a plugin that I can install seperately?
Some IDE's like Eclipse come …