var declares a mutable cell. Analogous to a non-final in Java. Avoid the use of
var unless in exceptional circumstances.
val declares an immutable cell that is evaluated at its declaration point. Analogous to a
final in Java.
def declares an immutable cell that is evaluated upon each use. An argument list may follow.
Analogous to a method in Java.
lazy val declares an immutable cell that is unevaluated until first use.
Example (welcome to the Scala interpreter)
scala> val a = 7
a: Int = 7
scala> def b = 8
b: Int
scala> def c(n: Int) = n + 42
c: (Int)Int
scala> var d = 9
d: Int = 9
scala> lazy val e = 10
e: Int = 10