A stack is a Last In First Out (LIFO) data structure that supports push and pop operations. Push adds an element to the top of the stack, while pop removes an element from the top. The Java Stack class models stacks. Stacks have many uses including maintaining browser back-and-forth navigation, reversing words, solving mazes using backtracking, and evaluating mathematical expressions.