My understanding of what an abstract class is and what its used for:
As we all know everything in java (well almost everything) revolves around classes and creating objects of those classes.
Classes have their own 1.variables - to hold values and 2.Methods - to act on the variables.
When one creates an object of the class, the variables in that object gets initialized.
We do know that classes are subclassed (The exciting world of inheritance)
When a class is subclassed, the subclasses inherits those states.
Now lets consider a real life situation - lets say you create a class called Car and extend it to form various subclasses like Bmw, Ferrari...
You might define common methods of every car like(accelerate(),turn() in your Car class but

Car objects would be toooo lets say abstract and they cannot have any particular implementation of accelerate() or turn() unless its an object of a Bmw or a Ferrari.
Abstract classes are thus a solution for such situations.
By defining a Class as an Abstract class you mention those behaviours that are common to cars without actually giving their definition(Y would you, a Bmw will implement it differently from a Ferrari object).
Though you can also have concrete methods(meaning methods that are not abstract in an abstract class too)