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