Runs on JVM. Statically typed.
Object orientated
Functional
Type inference
Functional capabilities reduces the number of lines of code
Getters and setters
val does not allow reassignment. var allows reassignment
Every value is an object.
Every operation is a method call.
Case classes to do pattern matching
Multivariable assignment