I've heard that variables should be declared as close to the point that they're used as possible. However, I've also heard that member variables should be used to describe something that is a characteristic of a class.I find that these two pieces of advice sometimes conflict. For example, say I have a class the parses JSON using the jackson library. Would the jackson parser object I create in order for the class to be able to parse JSON be considered a characteristic of the class? Without the parser object my class can't do what it was designed to do.However, I only really use the parser object in my main parsing function-- as such, I could just create a local version there rather than giving it class wide scope.Perhaps that example was a bit contrived, but hopefully it conveys the gist of my question. What exactly constitutes a characteristic of a class? 
Rules of thumb for local vs member variables
design;object oriented
member variables should be used to describe something that is a  characteristic of a classYes and no. Guidelines like these should not be taken too far, since it may quickly turn into pointless philosophically discussions about what actually constitute a characteristic of a class. I think the rule is useful as a quick sanity check: If a field cannot be said to be a characteristic of a class then it probably should not be a field, or it should be a field in a different class. But the reverse is not true. Even if something could be considered a characteristic of a class it does not follow it should be a field. You always want to reduce the number of fields, so if something could be either a field or a local, you want it as a local - regardless of the above rule. So if your parser can be a local it should. 