I have one class Message, which takes as parameter a String. If that String is larger than 50 char, i want to create an element of class BigMessage. Now if also that String is larger than 100 char, i want to throw MessageTooBig Exception. Somewhere i have a mistake, because when trying to run it, i have StackOverfrowException at 5th line of BigMessage.
You need to draw a diagram, with pencil and paper. Start off with the call to the Message constructor, with a 51 character message. Write down which object is created, then the next line called, and what that line calls and continue. Draw a diagram with a little square for each object created, and keep going until you return from your constructor.
If the actual type is dependent on the parameters, you don't want to use direct constructors. After all, when you call new Message to call the constructor, it creates a Message object always.
In this case I think you want a static factory method. First of all, make the Message constructor protected or give it default access, to prevent it from being called where it shouldn't be. Likewise for the BigMessage constructor. Next, create a static method:
Instead of using "new Message(text)" you now use "Message.createMessage(text)".