Java demystified