What is the advantage of "companion object" vs static keyword

One small note: Java did not invent packages. They were invented by Pascal related languages, first Modula as modules and then Ada as packages. Ada still lives as in Oracle PL/SQL (Ada subset), and packages are kicking there all right.

To me Java was a new language with best features taken from:

  • Pascal: JVM. Many Pascal implementations ran on bytecode
  • Ada: packages
  • C++: syntax variants with classes

Ada was “Object based”, while C++ “Object oriented” and here we are.