Source: https://www.bluej.org/tutorial/tutorial-201.pdf