Welcome to Java Ranch! In an effort to help you get answers for your questions I am going to offer you a bit of advice.
1. I would split your questions into separate posts.
2. I would also suggest that you be a little more specific with each of your questions, possibly a code snippet that does not work or a more specific use case that shows the part you need clarification on.
Currently you have 4 questions that are pretty general and I could write a small book trying to answer them all Most people here will be intimidated by the amount of effort needed to answer a post like this and move on to another.