Secondly, it is my opinion that you should name your objects in a way that makes sense (not only for you but also for other developers that might be working on your code after you).
For instances of class Student, I would also use a name, rather than student1, student2, etc (even though in your example all instances are currently alike - however, it is a good habit to get into right from the beginning)
Here's the rule of thumb: choose names that reflect the intent. Names like what you suggested don't really follow that guideline. However, you give very little context around how those names would be used. Would the object that you named mary always represent a student named Mary? Something like a name is usually an attribute of the object instead of a variable name.
I guess it also depends on what kind of abstraction you're trying to represent in your code.
If you are going to create 'x' amount of Students then you will most likely end up with an array or List of Student objects, in which case each object will need to know who it refers to because the variable name won't tell you.