I was looking through my OOP class documentation and I found this example:
class Student {
private String name;
public int averageGrade;
public
No, it's not bad practice. It's actually fairly frequent. What you missed is that main is a static method. It's not a method of the Student object. It's a method of the Student class. You don't invoke it with someStudent.main(...), but with Student.main(...).
See http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html for more explanations.