Explain Java in great detail