I remember I had some trouble grasping the concept too, but I think I got it after someone explained to me using a class called student
So you create a class called student which has variables such as
String sStudentName = "";
int iStudentNumber = 0;
double dGPA = 0;
The class called Student also has behaviors such as calculate GPA (which can be embedded as methods that can take parameters (i.e. grades being entered into a system, or another "Add Grades" class.
An object however, is calling the constructor (meaning you use the word 'new nameOfClassInThisCase:Student') and telling it that 'hey, we have a new Student at this school". Instead of having to create 10 000 classes (because there are 10000 students at this school) where you enter
public class Student1
{
String sStudentName = "Joe Jones";
int i StudentNumber = 1;
double dGPA = 3.0;
}
.
.
.
public class Student10000
{
String sStudentName = Samantha Simpson
int iStudentNumber = 10000;
}
As you can tell, they're an exact copy, except for that the variables contain different values. So what you do, is use a class called Student as a blueprint, and every time you have a new student you call on this blueprint, tell it that the student name is XX, the Student number is.. (or can be generated automatically). Thus, Samantha Simpson and Joe Jones are instances of the class Student (aka objects) and the variable values such as their names would in a case like this be stored in a database.
Hmmm... it's a lot simpler to explain this to someone in person, but I hope it made some kind of sense. (oh yeah, assume you know that my little example classes would under no circumstance run and are missing i.e. main method).