NOTE: Java strictly enforces pass-by-value
NOTE: Array.toString() prints the entire array contents
NOTE: method signature includes only method name, parameter, number and order of parameters, and formal type parameters and exclude return type, access modifiers, parameter names, the exceptions
NOTE: arr: an array reference variable store in stack, arr[0]: element of array store in heap
NOTE: check assignment of returned array reference
NOTE: abstraction allows user to focus on few high-level operations to user and hides low-level operations (Ex., no direct read and write; use accessor and mutator methods instead)
NOTE: many of Java’s built-in classes only wok with objects
NOTE: Java caches Integer obejcts for literal values [-128, 127]
NOTE: do not use == or != to compare two reference variables because these operators compare object references, use .equals() and .compareTo() instead
NOTE: wrapper class objects are stored on heap
NOTE: scnr.nextInt accepts inputs that begin with + or - to indicate sign and accepts inputs that optionally use commas to separate every third digit
NOTE: many of Java’s built-in classes only wok with objects
NOTE: list most specific (subclass) exceptions first, followed by general (superclass) exceptions becuase JVM evaluates catch blocks sequentially
NOTE: RuntimeException and Error and thier subclasses are the only unchecked exceptions in Java
NOTE: A try-with-resources variable must be newly declared, final, or effectively final