If you are using someone else's code then you're really stuck handling for a possible null. On the other hand, if you have control over the code base then never return a null object, and make that a rule across your entire application.
This may sound bad at first but I have developed several enterprise-level applications and this is a very effective way to make the code consistent and much more readable.
So, now, this
if (myString != null && !myString.isEmpty()) {
becomes simply
if (!myString.isEmpty()) {
In lue of that option use the new Optional feature in J8 as it is intended for that purpose.
NullPointerExceptionIf incatch, treat aselse, otherwise, proceed using the target object intry blockasif block. It's not worth mentioning this as answer, so putting in comments onlytry { Object o = myObject.mySubObject().getSpecificValue(); // use o further } catch(NullPointerException npe){ // else logic can come here; }