I am trying to clarify the OP's original remark:
Does that mean that the weight also changes in the first object as well?
This is an incorrect assumption of how static works. The simplest way to think of static is that it belongs to the class, not an instance of the class. Trying to access a static member of a class using an instance is technically allowed, but it should be viewed as a shortcut notation for accessing the static member through the class. An actual instance should not have extra hidden reference members pointing to the static class members.
my_instance = new MyClass();
my_instance.static_field = 3;
// should really read this as:
MyClass.static_field = 3;
Both age and weight theoretically could belong on the stack, but I suspect they don't because all Java instances are heap-allocated, and I suspect classes are also heap-allocated because they can be dynamically loaded. There might be some optimizations going on behind the scene which may result in the variables actually being allocated on the stack, but there's no guarantee without digging through the JVM specs or an actual implementation. Static has little/no bearing on whether memory is placed on the stack or heap, and likewise thinking of either as analogous to a C++ style reference or pointer can lead to some incorrect assumptions.
In any case, this seems beyond the scope of the OP's question. Their original question was more along the lines of "What does static do?" rather than "What are the implementation details behind static?". I'm trying to answer the former, you're trying to answer the latter.