here chk is initalized with null ,why the method call chkObj.getStr() is working
Because calling a static method doesn't check the value of the variable at all, but only checks its type.
what is the difference between method invocation chkObj.getStr() as shown above and method invocation like MyChk .getStr()
There is no difference in how it behaves!
That's a good reason to avoid calls like "chk.getStr()". It looks as if the value of chk actually matters for the call, while in fact it doesn't matter at all. You should always call static methods using the class name: "MyChk.getStr()", then it's clear what the intention and behavior is.