Validating multiple choice test items
The student ID can never change, but a persons last and first name can change (get married, changes name due to losing a bet, etc...).
When deciding what constrructors to have you really need to think about what makes sense to have.
You should probably also throw an exception if title is null in the constructor, that way you can guarantee that it will NEVER be null in a method (which can be extremely helpful).
This is a good habit to do whenever possible (final not-null).
Finally, it makes testing easier – providing a dumb constructor, that just assigns the values to the fields, without performing any logic or validation, it allows you to introduce invalid state into your system to test how it behaves and reacts to that.
You won't be able to do that if you're validating data in the constructor.
But if you are a developer and you want to extend the test in a more advanced way, the code is structured so that it is straightforward to copy and adapt. When the box outlines your control, release the mouse.
It's a reasonably simple solution, especially in comparison with the Builder pattern (as seen in Joshua Bloch's define a completely different design pattern with the same name, so that might be slightly confusing) that implies creating a nested class, a builder object, etc.
Depending on the particular functionality being tested in your application, you can write code for either a functional test, or for an integration test that might or might not include testing at the UI level.
If you simply want to directly access some business logic, you might code a unit test.
On the question of constructor use: I always try to have one base constructor that all others defer to, chaining through with "omitted" parameters to the next logical constructor and ending at the base constructor. If you want to defer construction specifics to subclasses, that's what the subclass constructors are for.
The trouble with calling non-finals from constructors is that the subclass has not yet been initialized - just plain unsafe!